分享

(3)交易测试系统和程式化交易函数

  2010-11-25

第四章  交易测试系统和程式化交易函数

 

无论是指标、条件选股,或者交易系统的编制,都是一个循序渐进的过程。这一点在交易系统中表现得尤为突出,从一个方案的提出,到量化,编制公式,然后在以后的不断的检验--历史数据下的静态检验,当前数据下的动态检验,实战检验,任何其中的一个环节如果发现有不合理的,不准确的的地方都需要我们对整个公式系统进行修改,使之更加完美,也许可以将之称为优化
在金字塔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 最大利润率

当前位置之前所有交易中利润率最大一次的利润率,其数值在01之间

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  交易胜率

当前位置之前盈利交易占总交易次数的比例,其数值在01之间

 

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、平空;

例如:TYPEBAR21)表示:倒数第2个开多信号历时

 

WORSTPERCENT  最大亏损率

当前位置之前所有交易中亏损率最大一次的利润率,其数值在01之间

 

WORSTTRADE  最大亏损额

当前位置之前所有交易中亏损最大一次的亏损额

 

 

3、 程式化交易函数

程式化交易函数共有41个,主要适于实际程式化交易,在后台运行,而不会在图表中显示。

大部分是在测试交易系统函数后加“T”,如

程式化交易系统之开多操作,

用法:TBUY(COND,V,[Type,P1,P2,AC,STOCK]);表示当COND条件成立时,

买入V股(手)当前品种,

TYPE表示开仓类型,LMT限价 MKT市价 STP止损 STPLMT限价止损

P1表示开仓价格,当TYPELMTSTP,STPLMT时为指定限价和止损价格,其他情况填0

P2为止损限价,TYPESTPLMT,必须指定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('当前资产为%.2f',1234),将在程式化交易的监控部分打印出来 "当前资产为1234.00"

"%.2f"为一个打印的控制符号,系统会将他替换为指定的一个数字输出,%.2f为显示两位小数,%.0f则表示不显示小数.

该函数仅在做程式化交易时有效

 

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.COMXYZ@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)

其它的账户函数,请自己依次查看

注意:在公式编辑中,点击  [ << ] 可弹出函数列表,可按类查找需要的函数,双击该函数将直接引入公式。公式中的蓝色字段为函数名,将鼠标放在未知的蓝色字段上,将看到该函数的描述和基本用法。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多