如何优化你的交易策略文华财经研究部课程内容一、如何优化交易策略二、拓展思路一、如何优化交易策略1、减少盘整行情中的交易次数2、优化进出场点3、及时进行止损1、减少盘整行情中的交易次数很多趋势模型,在行情出现趋势的时候,都可以很好的抓住趋势,实现盈利,但长期运行下来,最终的结果却是小赚甚至亏钱,问题出在哪里?原因在于,盘整行情中模型在不断的反复交易,而盘整中的交易都是不盈利甚至亏损的,行情中绝大部分又都是盘整行情,长时间的连续小亏损导致之前的利润全部回吐注:图片经过反色处理,并非白色时尚风格PANZHENG判断当前行情是否为盘整注:返回1:表示盘整,返回0:表示不是盘整。作用一:增加收益率简单的均线模型MA1:=MA(C,5);MA2:=MA(C,10);CROSS(MA1,MA2),BPK;CROSS(MA2,MA1),SPK;AUTOFILTER;这段行情中实现盈利77040元加入PANZHENG函数,在盘整行情中不开仓做多代码如下:MA1:=MA(C,5);MA2:=MA(C,10);CROSS(MA1,MA2)&&PANZHENG=0,BK;CROSS(MA2,MA1),SP;AUTOFILTER;做多实现盈利179580元,加入PANZHENG函数,在盘整行情中不开仓做空代码如下:MA1:=MA(C,5);MA2:=MA(C,10);CROSS(MA2,MA1)&&PANZHENG=0,SK;CROSS(MA1,MA2),BP;AUTOFILTER;加入盘整函数后,做空亏损44100元未加入盘整函数前,这段行情中多空共实现盈利77040元加入盘整函数后,做多实现盈利179580元,做空亏损44100元这段行情中多空共实现盈利135480元加入盘整函数后,盘整行情交易次数大量减少,从而减少了亏损总盈利提升76%作用二:减小最大回撤均线模型,PTA指数,2010.1.1至今的测试结果代码如下:MA10:=MA(C,10);CMA10,BPK;//价格大于10周期均线,做多CMA10,SPK;//价格小于10周期均线,做空AUTOFILTER;模型虽然有年化55%的收益率,但也有65%的权益最大回撤,如此大的回撤导致模型的实际可用性大大降低加入PANZHENG函数后,代码如下MA10:=MA(C,10);CMA10&&PANZHENG=0,BPK;//非盘整行情中,价格大于10周期均线,做多CMA10&&PANZHENG=0,SPK;//非盘整行情中,价格小于10周期均线,做空AUTOFILTER;胜率提升14%盈利率提升37%最大回撤减少45%年化盈利率提升21%单次交易盈利能力提升40%减少盘整行情中的交易次数后,不仅仅盈利能力得到提升,模型的稳定性同时也得到大幅度提升,大大提高了模型的可执行性2、优化进出场大部分趋势模型采用趋势突破或者趋势跟踪的方法捕捉趋势,通常情况下,信号都出现在一根较长的k线上,如果使用收盘价模型,入场点在下根k线的开盘价上,因此会错过突破这根长k线的最佳入场时间,无形中损失掉很大一笔到手的利润;出场时也是如此,那么怎么才能以最优的价格进出场,得到更多的利润呢?如何实现在k线没有走完之前进出场呢?指令价模型收盘价模型红圈位置,由于k线当根涨幅较大或者第二根跳空,损失较多利润甚至盈利变为亏损指令价模型具有明显的进出场优势红线为买开仓价绿线为卖平仓价如何实现更具有优势的价格进场---CHECKSIG模型中加入CHECKSIG函数,可以实现出信号立即发出委托。信号复核的意义:指令价模型,如果策略设计思路不够严谨,可能会产生信号出现后,再次消失的情况,称之为信号忽闪,即开错仓或者平错仓,这时可以使用信号复核进行恢复持仓的操作。CHECKSIG_SEC设置信号复核确认方式(基础数据为TICK数据)CHECKSIG_MIN设置信号复核确认方式(基础数据为1分钟数据)用法:CHECKSIG_SEC(SIG,MODE1,TIME1,MODE2,TIME2);SIG为信号,MODE1为信号确认方式,TIME1信号确认时间,MODE2信号复核方式,TIME2信号复核时间。几种典型的信号复核确认方式对应的写法举例:CHECKSIG_SEC(SIG,'A',0,'D',0);//出信号立即下单,K线走完复核CHECKSIG_SEC(SIG,'A',N,'D',0);//出信号N秒确认信号下单,K线走完复核CHECKSIG_SEC(SIG,'A',N,'C',0);//出信号N秒确认信号下单,不进行复核CHECKSIG_SEC(SIG,'B',N,'D',0);//K线走完前N秒确认信号下单,K线走完复核CHECKSIG_SEC(SIG,'B',N,'C',0);//K线走完前N秒确认信号下单,不复核模型中加入CHECKSIG,在实现指令价模型的同时,可以针对不同指令实现不同的信号复核方式,让交易策略的实现更加灵活。如:CHECKSIG_SEC(BK,'A',0,'D',0);//出信号立即下单,K线走完复核买开仓信号出现,立即发出委托,K线走完如果信号存在,则无需进行处理。如果K线走完信号消失,则恢复原状,即平掉多单。例:交易中开仓多采用k线走完前N秒下单,以保证进场准确性,避免因行情波动而频繁开平仓。从而增加交易成本平仓多采用出信号立即下单执行,保证单子能够及时出场,避免持仓过久导致无法及时止损和降低盈利空间。源码:MA5^^MA(C,5);MA10^^MA(C,10);RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;K:=SMA(RSV,3,1);D:=SMA(K,3,1);EVERY(MA5MA10,5)&&CROSSUP(K,D),BK;EVERY(MA5MA10,5)&&CROSSDOWN(K,D),SK;BARSBK2&&C=BKHIGH-10*MINPRICE,SP;BARSSK2&&C=SKLOW+10*MINPRICE,BP;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信号的信号执行方式为:出信号立即下单,不进行复核CHECKSIG_MIN(BP,‘A’,0,‘C’,0);//设置BP信号的信号执行方式为:出信号立即下单,不进行复核AUTOFILTER;如何实现指令价模型模型中加入CHECKSIG根据MIN或SEC基础数据,补充数据补充1分钟数据或tick数据基础数据为1分钟,在k线图上点击右键,补充1分钟数据加载回测Tick数据默认后台自动下载是不是所有的模型用指令价效果都要优于收盘价呢?答案是否定的。究竟用指令价效果好还是收盘价效果好,还要根据交易策略决定。一些交易逻辑简单的模型,指令价或者收盘价效果区别较小。但收盘价模型无法处理更加细致的交易逻辑,就需要采用指令价了。指令价优于收盘价的模型收盘价优于指令价的模型历史回测:LL数值为2585.8价格为2585.6时满足SP信号条件,但盘中价格断档,所以回测结果为9:37:24时的价格2585.4。Wh8.2是国内程序化平台中唯一提供指令价模型tick回测的程序化交易软件。是历史回测最精准的程序化交易软件。是否支持指令价委托并不重要,重要的是是否支持回测程序化交易平台是否支持回测是否支持指令价委托是否支持信号消失自动处理赢智wh8.1价格估算是是赢智wh8.2Tick回测是是其他程序化交易平台否是否3、及时止损期货价格瞬息万变,经常会出现价格瞬间拉升,接着就瞬间回吐的情况。拉升时模型出现开仓信号,如果遇到秒杀行情,不能够及时平仓,往往会带来较大的亏损。能否处理好秒杀行情,已经成为重点解决的问题。如何才能做到同一根k线开仓后快速止损呢?指令价模型回撤止盈策略在这种秒杀行情中,行情已经逆转,收盘价模型,还在执行上根k线的买开仓指令,显然是错误的,导致亏损。而指令价模型,则可以当根k线同时完成进场和止盈动作,保证既得利润。收盘价模型红线为买开仓价绿线为卖平仓价如何实现在一根k线上更加灵活的进出---MULTSIG模型中加入MULTSIG函数,可以在一根k线上交易多次模型中加入MULTSIG,在实现指令价模型的同时,同时可以实现在一根k线上反复进行交易,实现更精致的交易策略,可以很好的规避掉秒杀行情。CREF(H,1),BK;//价格大于上一根k线最高价,开多仓CBKPRICE-3*MINPRICE,SP;//亏损3点止损MULTSIG_SEC(0,0,3);//开仓信号,出信号立即下单,不复核;平仓信号出信号立即下单,不复核。一根K线上最大信号个数为3。AUTOFILTER;例:开仓当根k线如果满足止损条件,说明行情处于震荡区间,开仓方向判断有误,应当立即止损出场,避免更大亏损。收盘价模型,只能在下一根k线的开盘时止损ST:=ABS(C-O);STMA(ST,20)&&CO,BK;STMA(ST,20)&&CO,SK;CHV(C,3),BP;CLV(C,3),SP;(H-C)(H-O)*0.2,SP;(C-L)(O-L)*0.2,BP;AUTOFILTER;加入MULTSIG函数,实现在同一根k线上开仓后及时止损,亏损变为盈利。ST:=ABS(C-O);STMA(ST,20)&&CO,BK;STMA(ST,20)&&CO,SK;CHV(C,3),BP;CLV(C,3),SP;(H-C)(H-O)*0.2,SP;(C-L)(O-L)*0.2,BP;MULTSIG_MIN(0,0,2);AUTOFILTER;二、拓展思路1、拓展思路--指数交易2、如何解决移仓换月问题3、拓展思路—结合盘口数据研发策略用指数回测本身是没有问题的,因为指数连续性好,能反应某个品种的连续走势。但现实中很多人发现,指数测试效果盈利,但是实盘跑下来确实亏钱的,为什么会出现这种情况呢?导致历史回测和实盘差距较大的一个因素---指数回测并计算交易结果指数本身并不能交易,指数的价格并不是当时交易合约的价格,就会导致与实际交易不符的情况我们能不能测试出指数和实际交易差别的真实情况呢?1、拓展思路--指数交易TRADE_OTHER('CODE')指定CODE合约为交易合约,CODE为合约代码。注:1、回测时:信号价格取值为该函数定义的交易合约的信号价格。模组加载时:数据合约为加载模组时选择的数据合约,交易合约为该函数指定的合约。不写入该函数时,交易和数据合约一致。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函数连用。5、(1)CODE位置写为'AUTO'时:该函数可以加载到主连上,不可以加载到指数、主指和其他具体合约上。(2)CODE位置为具体合约时:该函数可以加载到到所有合约上。6、该函数必须在有信号的模型中使用。7、TRADE_OTHER函数不支持加载到副图中。8、CODE位置写为合约代码时,该函数不支持加载到TICK周期,量能周期,秒周期上使用;CODE位置写为'AUTO'时,该函数不支持加载到日线以上周期使用。9、CODE位置不支持写入文华码。10、CODE写为'AUTO'时,不支持加载到页面盒子中。一个均线模