第四章 交易测试系统和程式化交易函数 无论是指标、条件选股,或者交易系统的编制,都是一个循序渐进的过程。这一点在交易系统中表现得尤为突出,从一个方案的提出,到量化,编制公式,然后在以后的不断的检验--历史数据下的静态检验,当前数据下的动态检验,实战检验,任何其中的一个环节如果发现有不合理的,不准确的的地方都需要我们对整个公式系统进行修改,使之更加完美,也许可以将之称为“优化”。
入场规则,入场条件设定测试时段,也即测试的时间区间,金字塔默认的区间为20000101到当前。如果默认的入场规则无法满足您的要求,可以在模型当中编制您的入场条件。 市场模型:金字塔提供两类市场模型供测试分析。 系统测评报告
系统信号指示和资金曲线同图显示 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) 其它的账户函数,请自己依次查看 注意:在公式编辑中,点击 [ << ] 可弹出函数列表,可按类查找需要的函数,双击该函数将直接引入公式。公式中的蓝色字段为函数名,将鼠标放在未知的蓝色字段上,将看到该函数的描述和基本用法。 |
|