麻绳网装饰图片:(3)交易测试系统和程式化交易函数
第四章 交易测试系统和程式化交易函数
无论是指标、条件选股,或者交易系统的编制,都是一个循序渐进的过程。这一点在交易系统中表现得尤为突出,从一个方案的提出,到量化,编制公式,然后在以后的不断的检验--历史数据下的静态检验,当前数据下的动态检验,实战检验,任何其中的一个环节如果发现有不合理的,不准确的的地方都需要我们对整个公式系统进行修改,使之更加完美,也许可以将之称为“优化”。
在金字塔1.90的版本中,突出了这个功能的实现,可以通过测试平台对所有的公式化分析工具或者交易工具进行全方位的测评,并提交一份翔实可信的测试报告,在以下的几节中,我们将通过融合测试平台的使用对指标、条件选股以及交易系统的公式进行优化。
1、测试平台的基本内容和架构
在金字塔中为技术指标、条件选股以及交易系统建立了统一的测试平台。在【交易】栏中选“程式化交易评测”,或按Ctrl + F7
假设我们选择了技术指标当中的MA进行测试,在设定好一定的买入条件和卖出条件以及测试的市场模型之后即可对任意的指标、公式等进行测试。金字塔中提供了两种不同的测试模型,一种是针对全部信号的单个股票测试,另外一种是为了最佳的模拟真实的买入和卖出条件,以及参与市场的投资策略的测试模型,具体的内容和区别请看后面的说明。
开仓信号,选择模型和分析周期。
入场规则,入场条件设定测试时段,也即测试的时间区间,金字塔默认的区间为20000101到当前。如果默认的入场规则无法满足您的要求,可以在模型当中编制您的入场条件。
出场规则,金字塔提供以上7种平仓条件,包括卖出指令和止损指令:
目标周期为终点,到时自动平仓,20周期以后的收盘价平仓;
目标利润为终点,到时自动平仓,10%帐面盈利以后的收盘价平仓;
以及5类止损平仓:分别设定不同类型下的规避风险条件。
交易费用:按证券和期货,根据成交额和成交量计算佣金。
市场模型:金字塔提供两类市场模型供测试分析。
测试报告
系统信号指示和资金曲线同图显示
2、 交易测试系统函数
金字塔拥有可供引用的函数超过660个,并还在增长中。
其中交易系统函数46个,主要用于实现模型的测试和前台图表程式化交易。
交易系统之开多操作,
用法:BUY(COND,V,Type,P);
表示当COND条件成立时,
买入V股(手)当前品种,TYPE表示买入类型,
P表示买入价格,所有参数均可以省略。
V:买入股(手)数或买入资金百分比(N%),省略表示100%;
TYPE:可以是本周期收盘(THISCLOSE),次周期开盘(MARKET),
次周期限价单(LIMIT),次周期停损单(STOP)等交易方式控制符;
P:对于限价单、停损单需要指定的买入价格
例如:BUY(C>O ,1000,THISCLOSE);表示收阳线则在本周期收盘价上买入1000股(手)。
BUY(C>0,50%,LIMIT,CLOSE-0.2);表示在次周期CLOSE-0.2元位置下买入限价单,
若价格达到或低于该价格则用50%资金买入。
交易系统之平多操作,
SELL(COND,V,Type,P); 用法同上
交易系统之开空操作,
BUYSHORT(COND,V,Type,P); 用法同上
交易系统之平空操作,
SELLSHORT(COND,V,Type,P); 用法同上
ASSET当前资产
户账户客的净自有资产=可用现金+占用保证金-融资(现金+品种市值-融资)
AVGENTERPRICE 持仓均价
当前持有品种的平均持仓成本——最近空仓以来计
BESTPERCENT 最大利润率
当前位置之前所有交易中利润率最大一次的利润率,其数值在0—1之间
BESTTRADE 最大盈利额
当前位置之前所有交易中盈利最大一次的利润额
CASH(N) 现金存量
得到当前帐户的可用资金余额
用法:CASH(N),N表示投资方向 0多头;1空头
例如:CASH(0)表示取当前多头帐户的可用现金余额
ENTERBARS 开仓历时
返回上次开仓到当前的周期数,若之前没有开仓记录返回-1
ENTERPRICE 上次开仓价
得到当前位置的上次开仓价
ENTERVOL 上次开仓量
得到当前位置的上次开仓量
EXITBARS 平仓历时
返回上次平仓到当前的周期数,若之前没有开仓记录返回-1
EXITPRICE 上次平仓价
得到当前位置的上次平仓价
EXITVOL 上次平仓量
得到当前位置的上次平仓量
HOLDING 持仓量
得到当前帐户持仓量,多仓返回正数空仓返回负数
LIMIT 限价交易
交易方式控制符:加入限价单,次周期达到限价即操作,否则放弃。
LIMITR 限价交易
交易方式控制符:加入限价单,本周期达到限价即操作,否则放弃。
Market 市价交易
交易方式控制符:按照次周期开盘价操作
例如:buy(cond ,1000,market);
该控制符仅对交易评测时有效
MAXSEQLOSS 最大连续亏损次数
当前位置之前连续亏损交易的最大次数
MAXSEQWIN 最大连续盈利次数
当前位置之前连续盈利交易的最大次数
NEXTHIGH 次周期最高价交易
交易方式控制符:按照次周期最高价操作
例如:BUY(COND ,1000,NEXTHIGH);
该控制符仅对交易评测时有效
NEXTLOW 次周期最低价交易
交易方式控制符:按照次周期最低价操作
NEXTMID 次周期中价交易
交易方式控制符:按照次周期中间价操作
NEXTOPEN 次周期开盘价交易
交易方式控制符:按照次周期开盘价操作
NUMLOSSTRADE 亏损次数
当前位置之前总共有多少次亏损的交易,注意每次卖出算一次交易,而买入不算
NUMSEQLOSS 连亏次数
当前位置之前连续有多少次亏损的交易,注意每次卖出算一次交易,而买入不算
NUMSEQWIN 连盈次数
当前位置之前连续有多少次盈利的交易,注意每次卖出算一次交易,而买入不算
NUMWINTRADE 盈利次数
当前位置之前总共有多少次盈利的交易,注意每次卖出算一次交易,而买入不算
OPENBAR 开仓历时
上一次仓位=0以来的周期数
OPENPROFIT 浮动盈亏
当前浮动盈亏(当前持仓市值与持仓成本之差)
PERCENTWIN 交易胜率
当前位置之前盈利交易占总交易次数的比例,其数值在0—1之间
SEQLOSS 连亏金额
当前位置之前连续亏损总额,注意每次卖出算一次交易,而买入不算
SEQWIN 连盈金额
当前位置之前连续盈利总额,注意每次卖出算一次交易,而买入不算
STATE 帐户状态
得到当前帐户状态,无仓输出0;有多头仓输出1;有空头仓输出-1
STOP 停损交易
交易方式控制符:加入停损单,或又称突破交易,次周期达到设定价格即操作买入,否则放弃。
所谓停损就是交易价比设定的价格要差,具体说来对于买入或卖空就是高于设定价格,
对于卖出或买空就是低于设定价格
例如:BUY(COND ,1000,STOP,CLOSE-0.01);
该控制符仅对交易评测时有效
STOPR 停损交易
为本周期的,其它同STOP
THISCLOSE 收盘价交易
交易方式控制符,按照本周期收盘价操作
例如:BUY(COND ,1000,THISCLOSE);
该控制符仅对交易评测时有效
TOTALDAYTRADE 日内交易次数
当前位置之前总共有多少次当日的交易,注意每次卖出算一次交易,而买入不算
用法: TOTALDAYTRADE
TOTALTRADE 交易次数
当前位置之前总共有多少次交易,注意每次卖出算一次交易,而买入不算
TYPE(N) 上N次信号类型
得到当前位置之前上N次信号类型
输出:0、无信号;1、开多;2、平多;3、开空;4、平空;
TYPEBAR 表示上次信号,
得到当前位置之前上N次信号指定类型距当前周期
TYPEBAR(N,TYPE)N表示上次信号,
TYPE表示信号类型 0、无信号;1、开多;2、平多;3、开空;4、平空;
例如:TYPEBAR(2,1)表示:倒数第2个开多信号历时
WORSTPERCENT 最大亏损率
当前位置之前所有交易中亏损率最大一次的利润率,其数值在0—1之间
WORSTTRADE 最大亏损额
当前位置之前所有交易中亏损最大一次的亏损额
3、 程式化交易函数
程式化交易函数共有41个,主要适于实际程式化交易,在后台运行,而不会在图表中显示。
大部分是在测试交易系统函数后加“T”,如
程式化交易系统之开多操作,
用法:TBUY(COND,V,[Type,P1,P2,AC,STOCK]);表示当COND条件成立时,
买入V股(手)当前品种,
TYPE表示开仓类型,LMT限价 MKT市价 STP止损 STPLMT限价止损
P1表示开仓价格,当TYPE为LMT和STP,STPLMT时为指定限价和止损价格,其他情况填0
P2为止损限价,当TYPE为STPLMT时,必须指定P2的止损限价,其他情况填0,当P1止损价触发时按照P2价格止损操作.
当TYPE参数省略时,为市价开仓。
AC为帐户ID,为空时为系统默认帐户,否则将下单到指定帐户中
STOCK为品种代码,比如'SH600215',为空或者不填时为当前品种
例如:TBUY(C>O ,1000,LMT,C);表示收阳线则在本周期收盘价上买入1000股(手)。
TBUY(C>0,1000,STP,CLOSE+0.2);表示收阳线则在本周期收盘价高于0.2元下1000股(手)止损单,当盘中价格到了触发价时按市价开仓止损.
TBUY(C>0,1000,STPLMT,CLOSE+0.2,CLOSE);表示收阳线则在本周期收盘价高于0.2元下1000股(手)止损单,当盘中价格到了触发价时按CLOSE价格开仓止损
程式化交易系统之平多操作,
TSELL(COND,V,[Type,P1,P2,AC,STOCK]); 用法同上
程式化交易系统之开空操作,
TBUYSHORT(COND,V,[Type,P1,P2,AC,STOCK]); 用法同上
程式化交易系统之平空操作,
TSELLSHORT(COND,V,[Type,P1,P2,AC,STOCK]); 用法同上
注意:程式化交易系统的函数中交易类型Type与交易测试系统的差别
DEBUGOUT(STR,NUM) 调试输出
用户可以在程式化交易中通过输出指定的字符串来实现调试的目的,可以借助这个功能来完成监控程式化交易的各种细节参数,因为在后台执行程式化交易时,用户在前台的图表上是看不到内部数据的。
用法:DEBUGOUT(STR,NUM),STR为用户指定输出的一个行文字,NUM为用户指定的一个监控数字.
例如:DEBUGOUT('当前资产为%.
"%
该函数仅在做程式化交易时有效
SLEEP(D) 延时
当位于最后一个周期时,延时指定数量时间后再执行下条语句。
用法:SLEEP(D),D为延时的设置时间,单位为毫秒(1秒钟等于1000毫秒)。
例如:SLEEP(1000)表示等待1秒后再执行下行语句。
TODAYHOLDING 今持仓量
得到当前帐户的今日持仓量,多仓返回正数空仓返回负用法:TODAYHOLDING
TSUBMIT(N) 委托单历时
用法:TSUBMIT(N)仍未成交时,函数返回未成交历时的秒数,有效值范围为(1-1000);成交函数返回0.
N为委托方向.0所有方向;1开多;2平多;3开空;4平空;
便于控制未成交交易,采取其他补救措施
TTOTALDAYTRADE 日内交易次数
当前位置之前总共有多少次当日的交易,注意每次卖出算一次交易,而买入不算
用法:TTOTALDAYTRADE
其它的程式化交易函数,类似,请自己依次查看
注意:在公式编辑中,点击 [ << ] 可弹出函数列表,可按类查找需要的函数,如果需要可直接也双击改函数即可引入。公式中的蓝色字段为函数名,将鼠标放在未知的蓝色字段上,将看到该函数的描述和基本用法。
程式化交易执行语句常用的其它函数:
MINDIFF 最小变动价位
返回当前品种最小变动价位(可在市场管理中设置)。
若市场分类小数点为2时最小变动价位则为0.01
注意:该函数返回常数
VOLUNIT 每手单位
返回每手单位(可在市场管理中设置),注意:该函数返回常数
MULTIPLIER 乘数
当前品种的乘数或单位
用法:MULTIPLIER
OPENTIME(N) 开盘时间
返回交易所的指定时段的开盘时间
用法:OPENTIME(N),N表示对应市场分类中交易所交易时间设置的节数(自上而下)1表示第一个
函数返回有效值范围为(000000-235959),此函数返回常数,对于日线及更长周期此函数无效.
CLOSETIME(N) 收盘时间
返回交易所的指定时段的收盘时间
用法:CLOSETIME(N),N表示对应市场分类中交易所交易时间设置的节数(自上而下),特设0表示最后一节的节数(即日收盘的节数)
函数返回有效值范围为(000000-235959),此函数返回常数,对于日线及更长周期此函数无效.
PLAYSOUND 播放声音文件
播放一首指定位置的一个声音文件,可以是MP3或者WAV等格式.
用法:PLAYSOUND(COND,PATH),当最后一个周期得COND条件成立时,播放指定位置PATH的一个声音文件
声音文件可以是绝对路径,也可以只是一个声音文件,只有一个文件名时用户需要将它安放在DOCUMENT目录.
例如:PLAYSOUND(CLOSE>OPEN,'D:\ONTIFY.MP3'),当最后一个周期为阳线时播放D:\ONTIFY.MP3位置的声音文件.
SENDMAIL 发送邮件
发送一封邮件到指定的邮箱.
用法:SENDMAIL(COND,MAILTO,SUB,CON),当最后一个周期得COND条件成立时,发送到MAILTO用户,标题为SUB,内容为CON
例如:SENDMAIL(CLOSE>OPEN,'ABC@SINA.COM;XYZ@WEISTOCK.COM','警报','大阳线'),
表示当最后一个周期为阳线时,往ABC@SINA.COM和XYZ@WEISTOCK.COM这两个邮箱发送邮件,标题是'警报',内容是'大阳线'.
用户使用该功能之前,需要预先设置邮件发送的SMTP信息,具体操作位置在 工具->网络->邮件发送设置里,并需要构选'允许程式化交易'选项.
DYNAINFO(4) 取得最新动态行情: 今开
DYNAINFO(5) 取得最新动态行情: 最高
DYNAINFO(6) 取得最新动态行情: 最低
DYNAINFO(7) 取得最新动态行情: 最新
DYNAINFO(28) 取得最新动态行情: 买一价
DYNAINFO(34) 取得最新动态行情: 卖一价
DYNAINFO(54) 取得最新动态行情: 涨停
DYNAINFO(55) 取得最新动态行情: 跌停
4、 账户函数介绍
为了方便交易员编写资金管理程序,金字塔增加了账户函数(43个),今后还将扩充更多头寸管理函数。
TACCOUNT(1); 交易帐户: 返回当前交易帐户ID(该函数返回字符串类型数值)
TACCOUNT(2); 帐户类型: 返回当前交易帐户类型(0 盈透;1 CTP)
TACCOUNT(3); 现金余额: 返回当前交易帐户中的现金余额
TACCOUNT(4); 浮动盈亏: 返回当前交易帐户中的浮动盈亏
TACCOUNT(6); 平仓净值: 返回当前交易帐户中的平仓净值
TACCOUNT(19); 当前可用资金: 返回当前交易帐户中的当前可用资金
TACCOUNT(20); 当前流动资产: 返回当前交易帐户中的当前流动资产
TACCOUNT(26); 上次结算准备金: 返回当前交易帐户中的上次结算准备金(CTP专有)
TACCOUNT(27); 结算准备金: 返回当前交易帐户中的期货结算准备金(CTP专有)
TACCOUNT(28); 占用保证金: 返回当前交易帐户中的占用保证金(CTP专有)
TACCOUNT(29); 可取资金: 返回当前交易帐户中的可取资金数量(CTP专有)
TACCOUNT(30); 平仓盈亏: 返回当前交易帐户中的平仓盈亏数额(CTP专有)
TACCOUNT(31); 手续费: 返回当前交易帐户中的手续费(CTP专有)
TACCOUNT(32); 入金金额: 返回当前交易帐户中的入金金额(CTP专有)
TACCOUNT(33); 出金金额: 返回当前交易帐户中的出金金额(CTP专有)
TACCOUNT(34); 上次信用额度: 返回当前交易帐户中的上次信用额度(CTP专有)
TACCOUNT(35); 上次质压: 返回当前交易帐户中的上次质压(CTP专有)
TACCOUNT(36); 质压金额: 返回当前交易帐户中的质压金额(CTP专有)
TACCOUNT(36); 信用额度: 返回当前交易帐户中的信用额度(CTP专有)
。。。
TACCOUNT(43)
其它的账户函数,请自己依次查看
注意:在公式编辑中,点击 [ << ] 可弹出函数列表,可按类查找需要的函数,双击该函数将直接引入公式。公式中的蓝色字段为函数名,将鼠标放在未知的蓝色字段上,将看到该函数的描述和基本用法。