程序化交易近年来越发越来越多的人投身其中开发各种的程序策略。并且这已成趋势。就不在多说,我们开始将策略开发过程及策略的核心代码写出来。
突破策略一直是古董级的方法。我们现采用一家商业平台来写这个策略。
一, 突破的原理:如果close向上突破openD(0)+atr/2 则做多;
如果close向下突破openD(0)-atr/2 则做空;
openD(0)是指当天期货品种的开盘价,atr算法如下:
tr[i]=maxlist(value1,value2,value3);// tr[i]为二维数组。
if i=atrlen-1 then begin
for i=0 to (atrlen-1) begin
trx=trx+tr[j];
end;
atr=trx/atrlen;//atrlen是个数值型参数,一般笔者也就是在1到200之间。
end;
如果你照抄上面几句运行,会发现有问题,i,有的软件比如TB ,MC, python ,matlab等对有些关键词已定义,如果发现有问题可以将i改写成j或其它你喜欢的字符。所以我是全改成了j,如下:
二,过滤,上面几句简单的写完,你会发现跟没打理的菜地一个样,无效成交很多,一回测绩效亏得很大,心情很郁闷,很失望,这很正常,我们还要将过滤添加上去,你可以理解成菜地的日常打理除草。韭菜边上长棵小麦,将小麦炒了吃,味道应当不会太好。过滤常见的有那么几种ADX,布林线等。读者可以去做个归纳。当然,我们这里呢还对K线进行了数据处理。
核心语句就下面几句:
buy:做多
sellshort:做空
上述各condition语句是各种过滤条件等。
以上写完编绎代码看有无语法上的问题bug什么的。编绎成功后说明语法是没问题了。
下面我进入下一步,对样本内数值进行优化参数:
我们选个品种,最近油很是火热,商品期货我们用燃油(5分钟周期)。先看2018年4月到2019年4月经过优化后的测试结果:
样本内数据看起来很普通,年化64%,回撤17%,胜率43.9%,盈亏比1.8:1;
没关系,我们看下样本外数据(2019年4月到2020年4月)如何:
我们看下主要指标,年化150%,平仓交易最大亏损17%,平均每月盈利12.7%,全年成交71次,平均每周成交1次半,胜率46.48%,盈亏比2.97:1,这些数据都相当不错。注意,是样本外数据。而且我们代码中没有任何的未来函数(程序中交易要么是限价,要么就是next bar )
限价的意思,如上菜场买菜(笔者经常去买),商家规定排骨50一斤,摆出爱买不买样子,小编我也无奈,按这价买吧。
next bar :就是下个K线要成交。接上句,如果50块一斤不买,就去下个商家,结果这家没排骨了,只有小白菜,无奈,买点回去炒了再说。必须在这里成交,不管是什么价什么东西。没有下一个商家。
这个突破策略还是相当可以的,至少满足了目前的热点。成交语句也少,而且相关语句我是有在实盘的,只是稍做修改。实盘问题不大,当然,我们还是要走个仿真测试的流程,万一出了bug呢。
2020年4月24日 深圳