金字塔决策交易系统高级教程修订版.docx
《金字塔决策交易系统高级教程修订版.docx》由会员分享,可在线阅读,更多相关《金字塔决策交易系统高级教程修订版.docx(121页珍藏版)》请在冰豆网上搜索。
金字塔决策交易系统高级教程修订版
金字塔决策交易系统—高级教程(2016修订版)
Administrator
●
本教程主要介绍金字塔的后台程序化交易,VBA、C++二次开发的编程。
第一章金字塔的后台程序化交易
金字塔提供功能性和扩展性更为强大的基于后台预警模式的程序化交易模式(后台程序化),可以在不影响用户前台图形操作的情况下,高效地与预警系统一起工作,实现自动交易。
由于该模式运行在后台,不需要打开图表占用过多的资源,且只需最后一个周期的信号,所以原则上公式不做多余计算,效率高,便于对多个品种同一个策略进行轮循监控。
从某种意义讲,后台程序化属于图表程序的深化,它的优点是更注重于策略的高效执行,更完美地实现策略的设计初衷。
虽然后台程序化的功能强大,但用户切忌直接使用后台策略,而跳过学习图表程序化的过程。
原因是在后台程序化中用户无法直接在图表上看到信号的整个出现过程,因此对用户的公式编写水平有一定的要求。
其次,用户需要对金字塔的后台交易系统工作机理有比较深的了解,并且要对自己的公式系统有清晰的认识,这样一旦遇到问题也能及时找到原因。
后台交易过程中,一旦遇到问题,需要客户掌握第八章后台程序化交易调试的技巧。
以我们多年的经验来看,用户先将策略经测评、优化、图表实盘上运行后,再转化成后台策略,会取得非常好的效果。
1.1后台程序化工作机理
在初级教程中,我们介绍了基于虚拟数据技术的图表程序化交易。
想必经过一段时间的学习,大家已将图表程序化运用的相当纯熟。
不过当你进行实盘的时候,是否发现在某些情况下,例如碰到未成交单、未完全成交单、需要进行追撤单等更精细的下单操作时,图表程序化就束手无策了。
这是由于图表基于虚拟数据的特性,无法与真实账户进行交互,虚拟数据的成交并不考虑实盘的的流动性情况,只要价格达到即成交。
而实际情况可能并不是这样。
另一方面,当图表程序化碰上多品种、多策略、或者较复杂的策略时,有时系统会显得相对较慢、不流畅。
这是由于图表需要计算大量以往的历史数据进行判断操作,并在图表上进行输出。
这消耗了相当多的资源。
但实盘并不需要考虑历史曾经如何,实时交易需要考虑的是如何高效的执行,其实只需根据最后一根K线上的数据,来确定开平仓的动作。
这也就是例如DYNAINFO等这些常数函数无法进行测评而实盘的公式确可以用的主要原因,因为DYNAINFO只有最新的一笔行情数据,而没有历史的序列数据。
金字塔后台程序化也是这个道理,因为金字塔的后台程序化只注重交易,因此无法用来测评。
总结一下,金字塔的后台程序化交易是金字塔很大的特色。
从工作机制的角度看,后台程序化在沿用PEL语言体系的情况下,为用户创造了近似VB、C++才能达到的精细化、高效快捷程序化下单模式。
因此它特别适合那些多周期、多策略、多品种的组合交易以及对效率要求较高的套利交易,为您的交易带来无与伦比的便捷。
1.2后台程序化交易函数
金字塔的后台程序化交易只能在专业版及更高级的版本中使用,它可以运行在序列和逐K线两种模式,但是推荐序列模式运行,这样可以极大提高后台执行的效率。
为了让用户更快的编写和熟悉金字塔的后台程序化交易,金字塔的程序化交易函数,前面都在交易系统函数名称前加T字母,比如BUY改为TBUY,使用方法大致相同,用户仔细注意查看函数的使用说明。
与图表交易系统函数不同的是,后台程序化交易的函数都使用实际的用户持仓和资金。
让我们通过案例来学习后台程序化交易函数。
例1:
MA指标后台公式
//中间变量
MA3:
MA(C,3);
MA5:
MA(C,5);
//交易系统
TBUY(CROSS(MA3,MA5),1,LMT,C);//按照最新价限价开多
TSELL(CROSS(MA5,MA3),0,LMT,C);//按照最新价限价平多,0表示平掉全部持仓
请注意TBUY和TSELL函数的参数出现了变化,真正的下单时,需要指定下单类型和价格的,否则系统会按照市价进行交易。
用以模拟交易的函数和真实交易的函数,大部分只是有了前面T字母差别,大部分的用以交易评测的交易系统,只要将交易函数部分前面加T字母即可解决,唯一区别最大的就是TBUY,TSELL,TBUYSHORT,TSELLSHORT这4个函数与模拟交易用的函数区别较大,请仔细辨别。
请注意后台程序化交易不能使用图表交易功能,且图表交易和后台交易的函数不能混用。
交易控制符THISCLOSE在真实交易中被LMT等真实交易控制符所取代,金字塔的模拟交易控制符和真实交易控制符两者不能通用。
金字塔的真实下单函数只支持LMT限价MKT市价STP止损STPLMT限价止损这4个交易控制符。
真实下单交易函数,下单数量不再支持百分比模式。
程序化交易的函数介绍:
程序化交易系统之开多操作:
用法:
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',为空或者不填时为当前品种
后台程序化交易不能使用图表交易功能,且图表交易和后台交易的函数不能混用。
例如,限价在图表中函数为Limit,后台为Lmt。
市价在图表是函数Market,在后台是Mkt。
例如:
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与交易测试系统的差别
例2:
唐奇安通道模型
//中间变量
input:
N(20,5,100,1),NS(10,0,60,1);
Price:
=AVGENTERPRICE;//持仓价位
//交易条件
开多平空条件:
=CROSS(H,hhv(ref(h,1),N));
开空平多条件:
=CROSS(llv(ref(l,1),N),L);
//交易系统
SELLSHORT(开多平空条件and持仓<0,持仓,market);
SELLSHORT(持仓<0,持仓,Stopr,Price+NS);//止损
BUY(开多平空条件and持仓=0,30%,market);
SELL(开空平多条件and持仓>0,持仓,market);
SELL(持仓>0,持仓,Stopr,Price-NS);//止损
BUYSHORT(开空平多条件and持仓=0,30%,market);
//其他
资产:
asset,noaxis,colorgreen;
持仓:
HOLDING,LINETHICK0;
总次数:
TOTALTRADE,LINETHICK0;
盈利:
NUMWINTRADE,LINETHICK0;
胜率:
ROUNDS(100*PERCENTWIN,1),LINETHICK0;
连亏:
MAXSEQLOSS,LINETHICK0;
连盈:
MAXSEQWIN,LINETHICK0;
将交易模型转换成程序化交易系统,主要是涉及交易系统函数的转化,即在交易系统函数前加“t”,以及交易类型的改动;并且程序化交易函数都是在后台运行,不能在图表中显示;交易数量不能用30%的写法,只能用具体数量。
因此,唐奇安通道模型转化为可程序化交易的系统:
//中间变量
input:
N(20,0,60,1),NS(30,0,100,1);
持仓:
=tHOLDING,LINETHICK0;
KCS:
=intpart(tasset*0.3/(close*multiplier));//也表示30%的开仓数
BUY1:
=hhv(ref(h,1),N);
SELL1:
=llv(ref(l,1),N);
Price:
=tAVGENTERPRICE;//持仓价位
//交易条件
开多平空条件:
=CROSS(H,BUY1);
开空平多条件:
=CROSS(SELL1,L);
//交易系统
TSELLSHORT(开多平空条件and持仓<0,t持仓,mkt);
TSELLSHORT(持仓<0,持仓,Stp,Price+NS);
TBUY(开多平空条件and持仓=0,KCS,mkt);
TSELL(开空平多条件and持仓>0,持仓,mkt);
TSELL(持仓>0,持仓,Stp,Price-NS);
TBUYSHORT(开空平多条件and持仓=0,KCS,mkt);
若想与交易模型完全一样,后6句则需这样写:
tSELLSHORT(ref(开多平空条件,1)and持仓<0,t持仓,mkt);
tSELLSHORT(持仓<0,持仓,Stp,Price+NS);
tBUY(ref(开多平空条件,1)and持仓=0,KCS,mkt);
tSELL(ref(开空平多条件,1)and持仓>0,t持仓,mkt);
tSELL(持仓>0,持仓,Stp,Price-NS);
tBUYSHORT(ref(开空平多条件,1)and持仓=0,KCS,mkt);
注意:
在公式编辑中,点击[<<]可弹出函数列表,可按类查找需要的函数,双击该函数将直接引入公式。
公式中的蓝色字段为函数名,将鼠标放在未知的蓝色字段上,将看到该函数的描述和基本用法。
1.3后台套利模型范例
基于后台程序化效率高、操作灵活的特性,用来处理对价格异常敏感的套利交易就非常合适了。
以下我们选取了常见的集中情况作为范例。
(1)简单价差类型的套利模型
C1为两个品种的价差。
当价差小于300时,买入开仓前一品种RB05,卖出开仓后一品种RB03
当价差大于500时,卖出平仓前一品种,买入平仓后一品种
当价差大于600时,卖出开仓前一品种,买入开仓后一品种
当价差小于400时,买入平仓前一品种,卖出平仓后一品种
由于涉及到需要同时下单到不同的品种,这里直接使用后台程序化交易系统编写。
//中间变量
C1:
=“RB05$close”-“RB03$close”;
//交易系统
TBUY(CROSS(300,C1),10,mkt,0,0,'','SQRB05');//开多
TBUYSHORT(CROSS(300,C1),10,mkt,0,0,'','SQRB03');//开空
TSELL(CROSS(C1,500),10,mkt,0,0,'','SQRB05');//平多
TSELLSHORT(CROSS(C1,500),10,mkt,0,0,'','SQRB03');//平空
TBUYSHORT(CROSS(C1,600),10,mkt,0,0,'','SQRB05');//开空
TBUY(CROSS(C1,600),10,mkt,0,0,'','SQRB03');//开多
TSELLSHORT(CROSS(400,C1),10,mkt,0,0,'','SQRB05');//平空
TSELL(CROSS(400,C1),10,mkt,0,0,'','SQRB03');//平多
注意在后台程序化交易监控中,用户至少需要监控RB05或者RB03其中的一个。
(2)如何编制技术指标的套利模型:
//中间变量
C1:
=“RB05$close”-“RB03$close”;
DIFF:
=EMA(C1,12)-EMA(C1,26);
DEA:
=EMA(DIFF,9);
MACD:
=2*(DIFF-DEA);
//交易条件
平空开多条件:
=MACD>0;
平多开空条件:
=MACD<0;
//交易系统
TSELLSHORT(平多开空条件,10,mkt,0,0,'','SQRB03');//平空
TBUY(平空开多条件,10,mkt,0,0,'','SQRB05');//开多
TSELL(平多开空条件,10,mkt,0,0,'','SQRB05');//平多
TBUYSHORT(平空开多条件,10,mkt,0,0,'','SQRB03');//开空
(3)如何编制技术指标的多账户模型:
账户1:
16801
账户2:
16802
//中间变量
DIFF:
=EMA(C,12)-EMA(C,26);
DEA:
=EMA(DIFF,9);
MACD:
=2*(DIFF-DEA);
//交易系统
IFTHOLDING<0THENBEGIN
TSELLSHORT(MACD>0andTHOLDING<0,THOLDING,mkt,0,0,'16801');//平空
TSELLSHORT(MACD>0,10,mkt,0,0,'16802');//平空
END
IFTHOLDING=0THENBEGIN
TBUY(MACD>0andTHOLDING=0,10,mkt,0,0,'16801');//开多
TBUY(MACD>0,10,mkt,0,0,'16802');//开多
END
IFTHOLDING>0THENBEGIN
TSELL(MACD<0andTHOLDING>0,THOLDING,10,mkt,0,0,'16801');//平多
TSELL(MACD<0,10,mkt,0,0,'16802');//平多
END
IFTHOLDING=0THENBEGIN
TBUYSHORT(MACD<0andTHOLDING=0,10,mkt,0,0,'16801');//开空
TBUYSHORT(MACD<0,10,mkt,0,0,'16802');//开空
END
所有上述模型仅供参考,据此交易风险自负。
更多范例请登陆金字塔论坛——策略发布区http:
/
1.4后台程序化的启用
选择“交易→后台程序化交易”或按Ctrl+A会出现图7.3本地预警交易。
图1.41本地预警交易
(1)选“新增条件”,将出现图7.4程序化条件设定
图1.42程序化条件设定
(2)参数设置
第一步:
首先,点“指标公式”,选择你的模型和使用周期;
第二步:
加入要监控的品种;
第三步:
其它各种设置,
注意:
打勾“允许程序化交易”,其中,可将“下单需手工确认”关闭,如勾选自定义分品种下单,会出现确认对话框,请用户详看出现的每一个提示确认对话框;设定“预警时间间隔”及“时间范围启用”;等等然后按“确认”;
最后点击“启动预警”。
(3)在程序化交易过程中,用户可随时点击【监控】,观察系统运行情况,并可在信心爆棚时,手工加减仓干预。
如图7.5程序化交易明细
1.43程序化交易明细
1.5后台程序化的调试
如前文所述,后台程序化需要用户对金字塔的后台交易系统工作机理有比较深的了解,并且要对自己的公式系统有清晰的认识,现在,我们就将讲解的后台自动交易的调试内容,这是每个后台自动交易编写用户所必须掌握的基本的能力要求,只有用户掌握了调试技巧,才能在金字塔的平台上做出有效而又符合要求的后台自动化交易模型。
供后台调试金字塔提供了两个函数DEBUGOUT和DEBUGFILE,其中DEBUGOUT是只针对程序化交易使用,在Ctrl+A预警设置窗口点击“监控”按钮后的程序化交易监控窗口,将显示出当前每个品种的监控过程以及下单动作。
图1.5
DEBUGOUT函数的描述如下:
DEBUGOUT(STR,NUM),STR为用户指定输出的一个行文字,NUM为用户指定的一个监控数字.
例如:
DEBUGOUT('当前资产为%.2f',TASSET),将在程序化交易的监控部分打印出来"当前资产为1234.00",(假设当前的资产为1234)
"%.2f"为一个打印的控制符号,系统会将他替换为指定的一个数字输出,%.2f为显示两位小数,%.0f则表示不显示小数.
用户最常见的问题就是,从图表上看明明应该某个时间段应该是开平仓了,但是结果确没有反应,后台并没有按预计发出交易指令,这种情况用户一般需要基于下面原因考虑:
(1)用于交易的品种历史数据是否补齐,因为金字塔的历史数据是基于点播模式补充的,处于后台交易的品种如果缺失数据将会导致交易信号出现不可预料的情况。
(2)用户所选择的交易系统周期是否合理,预警监控间隔时间是否合理,甚至用户是否选中了“允许程序化交易”复选框。
(3)用户的TBUY等交易指令在多帐户交易时,市价委托是否指定了交易价格,常见错误是用户认为指定MKT指令后就不用填写价格了,应该填0补充。
比如:
MA3:
MA(C,3);
MA5:
MA(C,5);
开多条件:
=CROSS(MA3,MA5);
平多条件:
=CROSS(MA5,MA3);
TBUY(开多条件,1,LMT,C);//按照最新价限价开多
TSELL(平多条件,0,LMT,C);//按照最新价限价平多,0表示平掉全部持仓
这样一个简单的公式,是否出现交易信号,完全取觉于BK和平多条件这两个变量的计算结果,只要这样
MA3:
MA(C,3);
MA5:
MA(C,5);
开多条件:
=CROSS(MA3,MA5);
平多条件:
=CROSS(MA5,MA3);
DEBUGOUT(‘开多条件=%.0f’,开多条件);
DEBUGOUT(‘平多条件=%.0f’,平多条件);
TBUY(开多条件,1,LMT,C);//按照最新价限价开多
TSELL(平多条件,0,LMT,C);//按照最新价限价平多,0表示平掉全部持仓
这样用户就可以一直在程序化交易监控窗口看到整个变量在不断循环中的值变化了,给用户带来了调试的机会。
但是上述的只表达了开多条件,平多条件这两个信号,可能并不能让用户最终找到问题原因,要找到,用户可能还得将MA3,MA5的变量值变化也打印输出,只要一直这样往上逐个筛选每个结果数据,就能最终找到问题的原因。
金字塔的另一个非常重要函数DEBUGFILE,可以将调试日志记录文件中,方便用户查询更长的历史记录,如果用户不习惯使用DEBUGOUT的窗口输出模式,可以使用DEBUGFILE做输出,使用其他文本工具打开。
另外,DEBUGFILE与DEBUGOUT不同之处在于他不限于一定运行在后台程序化交易环境中,DEBUGFILE描述如下:
用法:
DEBUGFILE(PATH,STR,NUM),PATH为用户的本地计算机路径,STR为用户指定输出的一个行文字,NUM为用户指定的一个监控数字.
例如:
DEBUGFILE('D:
\TEST.TXT','当前资产为%.2f',1234),将在程序化交易的监控部分输出到D:
\TEST.TXT文件,"当前资产为1234.00","%.2f"为一个打印的控制符号,系统会将他替换为指定的一个数字输出,%.2f为显示两位小数,%.0f则表示不显示小数。
此外金字塔提供的另一个MSGOUT函数,通过在消息窗口自行输出字符串信息,也可以起到很好的调试作用。
最后我们讲一下日志记录功能,此功能会记录下您本地所有的下单情况。
如何启动记录日志:
选择“交易”菜单->下单设置->程序化交易->将“记录下单日志”打勾。
打勾的同时,会提醒您日志所保存的文件路径。
在图表交易和后台自动交易的甚至手工下单的过程中,金字塔会将与交易有关的动作记录在内,便于用户查找和分析问题原因。
1.6后台程序化注意事项
(1)图表BUY等显示函数是不能放在后台做监控交易的,但是将"允许程序化交易"勾去掉后单独做预警是可以的。
(2)只有少数的带T的后台交易函数允许使用在BUY前台图表交易策略中.Tholding,TAVGENTERPRICE,Taccount,Tasset,但是金字塔强烈不建议使用,因为这样会造成图表上的交易信号与实际的下单记录不符。
(3)金字塔的后台交易部分,使用手工闪电下单的记录,将无法通过比如TENTERPRICE等与交易记录有关函数中得到结果,但可以通过程序化交易监控中的手工下单干预功能完成此项目的。
(4)金字塔的后台交易,查询持仓和资产均为用户当前的实际数值,如果多个策略同时多一个品种或通一个帐户进行操作会产生相互干扰现象,解决办法就是通过使用交易系统使用虚拟持仓和资金,这样就完全可以避免这种共振现象,但是推荐高级用户使用,因为需要很多技巧需要处理。
(5)用以图表显示的交易系统和后台程序化交易的交易指令函数,参数有明显的不同,用户不能简单的将BUY函数加个T就可以直接后台交易,使用前应该将鼠标放在TBUY函数上认真看看函数说明。
同名交易系统函数与程序化交易函数的差别:
函数意义
前台图表交易模型
后台交易系统
开多
BUY
TBUY
平多
SELL
TSELL
开空
BUYSHORT
TBUYSHORT
平空
SELLSHORT
TSELLSHORT
其中TYPE:
次周期限价
LIMIT
REF(条件,1),LMT
TYPE:
本周期限价
LIMITR
LMT
TYPE:
次周期停损
STOP
REF(条件,1),STP
TYPE:
本周期停损
STOPR
STP
TYPE:
次周期市价
MARKET
REF(条件,1),MKT
TYPE:
本周期市价
MARKETR
MKT
开仓百分比
30%
KCS:
=intpart(tasset*0.3/MULTIPLIER/close);
语句
语句
T语句
函数
可在图表上显示
不能在图表上显示
总之,通过函数列表,了解他们的细微差别。
第二章图表交易和后台交易的主要区别和联系
2.1图表、交易函数的区别
2.11图表交易函数
BUY开多
BUYSHORT开空
SELL平多
SELLSHORT平空
适用于图表程序式交易模式,本函数中可以设置下单条件、下单手数、下单价格等参数。
这种交易函数优点在于可以将本交易函数套用到若干个循环逻辑判断语句中,对下单手数灵活设置,对下单价格灵活的掌控,与之配套使用的各类函数较多,因此能够用于实现较为复杂的交易模型;缺点是没有参数设置账户名、下单品种、只能运行在逐K线模式等。
例2.1:
BUY(vol/ref(vol,1)>3ANDCLOSE>OPEN