技术分析网-股票群_技术指标公式_期货程序化交易
文章详情

金字塔编写技巧一:“混合模式”编写方法

分享到:
文章来源: 沪深300指数       发布时间:2013-02-15

      把“K线走完模式”转换成“固定轮询模式”或者“混合模式”的方法,以便把各个模型放在同一个框架内进行图表程序化交易。

      举例,均线交叉模型(K线走完模型):

      runmode:0;

      ma5:=ma(c,5);

      ma20:=ma(c,20);

      entertime:=time>100000 and time<144500;

      if holding>0 and ma5<ma20 then sell(1,1,market);

      if holding<0 and ma5>ma20 then sellshort(1,1,market);

      if holding=0 and ma5>ma20 and entertime then buy(1,1,market);

      if holding=0 and ma5<ma20 and entertime then buyshort(1,1,market);

      if time>=150000 then begin

       sell(1,1,market);

       sellshort(1,1,market);

      end

      简单的改法,自然是把各个条件“过去化”,如:ma5 改为 ref(ma(c,5),1);但这种方法碰到大型的、复杂的模型时,容易出错。

      可采用这种方法,把holding用全局变量cc替换,然后加入红色部分代码,红色部分代码要放在信号语句的前面:

      runmode:0;

      variable:cc=0;

      ma5:=ma(c,5);

      ma20:=ma(c,20);

      entertime:=time>100000 and time<144500;

      if holding>0 and cc<=0 then sell(1,1,limitr,o);

      if holding<0 and cc>=0 then sellshort(1,1,limitr,o);

      if holding=0 and cc>0 then buy(1,1,limitr,o);

      if holding=0 and cc<0 then buyshort(1,1,limitr,o);

      if cc>0 and ma5<ma20 then cc:=0;

      if cc<0 and ma5>ma20 then cc:=0;

      if cc=0 and ma5>ma20 and entertime then cc:=1;

      if cc=0 and ma5<ma20 and entertime then cc:=-1;

      if time>=150000 then begin

       cc:=0;

      end

      那么,如果是 K线走完模式和盘中模式并存,怎么做呢?也简单,就是在“开盘价下单语句”后面加入蓝色部分的“盘中下单语句”就行了。

      如下:

      runmode:0;

      variable:zs=0,cc=0;

      ma5:=ma(c,5);

      ma20:=ma(c,20);

      entertime:=time>100000 and time<144500;

      if holding>0 and cc<=0 then sell(1,1,limitr,o);

      if holding<0 and cc>=0 then sellshort(1,1,limitr,o);

      if holding=0 and cc>0 then buy(1,1,limitr,o);

      if holding=0 and cc<0 then buyshort(1,1,limitr,o);

      if cc>0 and l<zs then begin

       sell(1,1,limitr,min(o,zs-0.6));

       cc:=0;

      end

      if cc<0 and h>zs then begin

       sellshort(1,1,limitr,max(o,zs+0.6));

       cc:=0;

      end

      if cc>0 and ma5<ma20 then cc:=0;

      if cc<0 and ma5>ma20 then cc:=0;

      if cc=0 and ma5>ma20 and entertime then begin

       cc:=1;

       zs:=c-10;

      end

      if cc=0 and ma5<ma20 and entertime then begin

       cc:=-1;

       zs:=c+10;

      end

      if time>=150000 then begin

       cc:=0;

      end

 

(责任编辑:技术分析 jishufenxi.com)