1、 注:此教程 适用于 赢智 Wh8。 目录 第一章 如何优化你的交易策略 1 1.1 PANZHENG 函数,减少盘整行情中的交易次数 . 1 1.2 CHECKSIG 函数, 实现更具有优势进场价格 . 7 1.3 MULTSIG 函数, 在一根 k 线上灵活进出 .12 1.4 TRADE_OTHER 函数,在指数交易中的应用 .17 1.5 拓展思路 结合盘口数据研发策略 .26 第二章 多模型组合回测 34 2.1 回测一篮子合约 34 2.2 多模型组合回测 37 2.3 段落式交易回测 41 第三章 编写资金管理模型 44 3.1 加码模型 44 3.2 回撤控制模型 46 3.3
2、 资金曲线跟随模型 47 第四章 盘口模型的基本结构与应用 .48 4.1 盘口模型的分类 48 4.2 盘口模型使用的函数类型和运行机制 .49 4.3 盘口模型的语法及编写规则 .49 4.4 盘口模型的加载流程 53 第五章 盘口高频模型的编写 55 5.1 什么是高频交易 55 5.2 盘口高频模型的编写 追涨高频策略 .56 5.3 盘口高频模型的编写 辅助判断趋势策略 60 5.4 盘口高频模型的编写 基差策略 .61 第六章 盘口模型控制滑点 62 6.1 了解滑点的产生 62 6.2 盘口模型控制滑点的原理 .63 6.3 盘口模型控制滑 点策略编写 .63 第七章 后台程序化
3、 70 7.1 运行模组 70 7.2 盘口模型运行池 79 第八章 远程监控 .85 8.1 设置运行模式 85 8.2 日志邮件 87 附录:麦语言盘口模型函数列表 89 1 第一章 如何优化你的交易策略 1.1 PANZHENG 函数,减少盘整行情中的交易次数 很多趋势模型,在行情出现趋势的时候,都可以很好的抓住趋势,实现盈利,但长期运行下来,最终的结果却是小赚甚至亏钱,问题出在哪里? 原因在于,盘整行情中模型在不断的反复交易,而盘整中的交易都是不盈利甚至亏损的,行情中绝大部分又都是盘整行情,长时间的连续小亏损导致之前的利润全部回吐 关键函数: PANZHENG, 判断当前行情是否为盘整
4、 注:返回 1:表示盘整,返回 0:表示不是盘整。 2 作用一:增加收益率 简单的均线模型 MA1:=MA(C,5); MA2:=MA(C,10); CROSS(MA1,MA2),BPK; CROSS(MA2,MA1),SPK; AUTOFILTER; 上面的模型在这段行情中实现盈利 77040 元,如下图所示 3 (增加阅读软件的页面放大率可查看清晰图片) 加入 PANZHENG 函数,在盘整行情中不开仓 做多代码如下: MA1:=MA(C,5); MA2:=MA(C,10); CROSS(MA1,MA2) CROSS(MA2,MA1),SP; AUTOFILTER; 做多实现盈利 1795
5、80 元,如下图所示 4 (增加阅读软件的页面放大率可查看清晰图片) 做空代码如下: MA1:=MA(C,5); MA2:=MA(C,10); CROSS(MA2,MA1) CROSS(MA1,MA2),BP; AUTOFILTER; 加入盘整函数后,做空亏损 44100元 ,如下图所示 5 (增加阅读软件的页面放大率可查看清晰图片) 总结: 未加入盘整函数前,这段行情中多空共实现盈利 77040 元,加入盘整函数后,做多实现盈利 179580 元,做空亏损 44100 元,这段行情中多空共实现盈利 135480 元,加入盘整函数后,盘整行情交易次数大量减少,从而减少了亏损,总盈利提升 76%
6、。 作用二:减小最大回撤 均线模型, PTA 指数, 2010.1.1 至今的测试结果 代码如下: MA10:=MA(C,10); CMA10,BPK;/价格大于 10 周期均线,做多 CMA10/非盘整行情中,价格大于 10 周期均线,做多 CMA10,5) EVERY(MA52 CHECKSIG_MIN(BK,B,1,C,0); / BK 信号的执行方式为: K 线走完前 1秒下单,不进行复核 CHECKSIG_MIN(SK,B,1,C,0); /SK 信号的执行方式为: K 线走完前 1 秒下单,不进行复核 CHECKSIG_MIN(SP, A ,0, C ,0); /SP信号的执行方式
7、为:出信号立即下单,不进行复核 CHECKSIG_MIN(BP, A ,0, C ,0); /BP信号的 执行方式为:出信号立即下单,不进行复核 AUTOFILTER; 如何实现指令价模型 是不是所有的模型用指令价效果都要优于收盘价呢? 答案是否定的。 究竟用指令价效果好还是收盘价效果好,还要根据交易策略决定。一些交易逻辑简单的模型,指令价或者收盘价效果区别较小。但收盘价模型无法处理更加细致的交易逻辑,就需要采用指令价了。 Wh8.2 是国内程序化平台中唯一提供指令价模型 tick 回测的程序化交易软件。 是历史回测最精准的程序化交易软件。 12 是否支持指令价委托并不重要,重要的是 是否支持
8、回测 程序化交易平台 是否支持回测 是否支持指令价委托 是否支持信号消失自动处理 赢智 wh8.1 价格估算 是 是 赢智 wh8.2 Tick 回测 是 是 其他程序化交 易平台 否 是 否 如何设置模型回测精度 在并不需要用每笔 TICK 数据进行回测的情况 下 ,可以通过调整 CHECKSIG 函数的 INTERVAL参数值来调整模型的回测精度 。 使用 CHECKSIG函数 , CHECKSIG (SIG,MODE1,TIME1,MODE2,TIME2,INTERVAL) INTERVAL 代表数据时间间隔 1)支持 0、 3、 5、 10 四个值。 2)回测中,当参数为 0 时等同于
9、 CHECKSIG_SEC,使用 Tick 逐笔函数做计算;当参数为 3、 5、10 分别代表用每隔 3 秒、 5 秒、 10秒,计算一次模型 3)回测中,当参数为 0 回测精准,但是计算量大,每一天就要计算几万笔,速度会慢很多,回测精准;当参数为 3、 5、 10 ,回测速度可提升 3-10 倍,回测精度稍差 4)实盘运行中,不管参数设置为任何值,等同于 CHECKSIG_SEC,每笔 Tick 计算模型 5)一个模型中只能写入一个 INTERVAL 值 例: CO,BK; CREF(H,1),BK;/价格大于上一根 k 线最高价,开多仓 CMA(ST,20) STMA(ST,20) C(H
10、-O)*0.2,SP; (C-L)(O-L)*0.2,BP; AUTOFILTER; 16 (增加阅读软件的页面放大率可查看清晰图片) 加入 MULTSIG 函数,实现在同一根 k线上开仓后及时止损,亏损变为盈利 ST:=ABS(C-O); STMA(ST,20) STMA(ST,20) C(H-O)*0.2,SP; (C-L)(O-L)*0.2,BP; MULTSIG_MIN(0,0,2); AUTOFILTER; 17 (增加阅读软件的页面放大率可查看清晰图片) 1.4 TRADE_OTHER 函数, 在指数交易中的应用 1.4.1 拓展思路 -指数交易 用指数回测本身是没有问题的,因为指
11、数连续性好,能反应某个品种的连续走势。但现实中很多人发现,指数测试效果 是盈利,但是实盘跑下来却是 亏钱的,为什么会出现这种情况呢? 导致历史回测和实盘差距较大的一个因素 指数回测并 参与 计算交易结果 ,但 指数本身并不能交易,指数的价格并不是当时交易合约的价格,就会导致与实际交易不符的情况。 我们能不能测试出指数和实际交易差别的真实情况呢? 关键函数: TRADE_OTHER(CODE) 指定 CODE 合约为交易合约, CODE 为合约代码。 注: 1、回测时:信号价格取值为该函数定义的交易合约的信号价格。 模组加载时:数据合约为加载模组时选择的数据合约,交易合约为该函数指定的合约。不写
12、入该函数时,交易和数据合约一致。 2、该函数写为 TRADE_OTHER(AUTO)时,可以加载到主连合约,实现自动换月移仓。 3、从数据合约的数据和指定交易合约的数据对齐的位置开始计算信号。 4、( 1) CODE 位置写为 AUTO时:该函数可以和 CHECKSIG_SEC,CHECKSIG_MIN,MULTSIG_SEC、MULTSIG_MIN, CLOSEKLINE_MIN 函数连用。 ( 2) CODE 位置为具体合约时:该函数可以和 CLOSEKLINE_MIN,CHECKSIG_MIN,MULTSIG_MIN 函数连用;不支持和 CHECKSIG_SEC,MULTSIG_SEC
13、函数连用。 18 5、( 1) CODE 位置写为 AUTO时:该函数可以加载到主连上,不可以加载到指数、主指和其他具 体合约上。 ( 2) CODE 位置为具体 合约时:该函数可以加载到到所有合约上。 6、该函数必须在有信号的模型中使用。 7、 TRADE_OTHER 函数不支持加载到副图中。 8、 CODE 位置写为合约代码时,该函数不支持加载到 TICK 周期,量能周期,秒周期上使用; CODE位置写为 AUTO时,该函数不支持加载到日线以上周期使用。 9、 CODE 位置不支持写入文华码。 10、 CODE 写为 AUTO时,不支持加载到页面盒子中。 一个均线模型,在未指定交易合约的时
14、候,测试结果如下: 模型源码: MA10:=MA(C,10); MA30:=MA(C,30); EVERY(CMA10,4) EVERY(CMA10,4),BP; EVERY(CMA10,4) EVERY(CMA10,4),BP; EVERY(CMA10,4) EVERY(C500000,SK; EVERY(CMA10,4),BP; EVERY(CMA10,4) EVERY(CMA10,4),BP; EVERY(CMA10,4) EVERY(C500000,SK; EVERY(CMA10,4),BP; EVERY(CMA10,4) 24 EVERY(C500000,SK; EVERY(CMA10,4),BP; EVERY(CMA10,4) EVERY(C500000,SK; EVERY(CMA10,4),BP; EVERY(CMA10,4) EVERY(C500000,SK; EVERY(CMA10,4),BP; EVERY(CMA(A,30),BK; RISING(60)=0 BHE=4