您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 金字塔知识>>正文内容

请教止盈止损后排斥同方向开仓的问题 [金字塔]

  • 咨询内容:

    又来麻烦老师了,实在过意不去。

    以下是30分钟突破的代码和止盈止损。我想在里面加止盈止损后同方向不再开仓的条件(比如在上线多单止损后,今日不再开多单),学生不知如何编写。

    恳请老师指点(_ _)

     

     

    input:ss(1,1,100,1),nmin1(30,1,100,1),nmin2(1,1,100,1),n1(0,0,100,1),,n2(22,1,60,1),n3(13,10,20,1),n4(59,1,80,1);
    N:=barslast(date<>ref(date,1))+1;
    开盘30分钟最高价:=valuewhen(time<=090000+nmin1*100,hhv(h,n));
    开盘30分钟最低价:=valuewhen(time<=090000+nmin1*100,llv(l,n));
    上轨:开盘30分钟最高价+n1*mindiff;
    下轨:开盘30分钟最低价-N1*mindiff;

     

    //条件
    开多条件:=cross(c,上轨);
    开空条件:=cross(下轨,c);
    t1:=time>091500+nmin2*100 and time<151000;
    t2:=time=151300;

     

     

    //交易系统

    VARIABLE:DUOKONG=0;
    TSFS:=0;     {停损反手,1-反手 0-不反手}
    开仓手数:=ss;     {开仓手数}
    ZSDS:=n4/100;     {止损百分比}
    //以下变量用于移动止盈
    VARIABLE:YDZY=1;     {移动止盈总开关,1为开,0为关}
    VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存开仓后的最高价、最低价}
    VARIABLE:DHCDS=n2/100,KHCDS=n2/100;   {多、空单回撤百分比}
    VARIABLE:DYLDS=n3,KYLDS=n3;   {多、空单盈利点数,当盈利点数达到这个标准后,如果回撤达到上面的参数值百分比就平仓}
    VARIABLE:Z3B1:=0;     {赚3保1开关}
    DUOKONG:=1;

    //持有空单
    IF HOLDING<0 THEN BEGIN
     IF t2 THEN BEGIN   //平空单
      空平:SELLSHORT(1,0,market),ORDERQUEUE;
     END
     
     //止损59%
     IF (C-ENTERPRICE)/ENTERPRICE*100>=ZSDS THEN BEGIN
      空损:SELLSHORT(1,0,market),ORDERQUEUE;
     END
     
     //空单移动止盈
     IF YDZY=1 THEN BEGIN
      //每周期判断是否创新低
      IF L<LOWPRICE THEN BEGIN
       LOWPRICE:=L;
      END
     
      //如果盈利超过10点之后回撤达到22%,就平仓,保住盈利
      IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
       IF (L-LOWPRICE)/LOWPRICE*100>=KHCDS THEN BEGIN  //回撤超过的百分比
        空赢:SELLSHORT(1,0,MARKET);
       END
      END
     END
     
     //赚3保1
     IF Z3B1=1 THEN BEGIN
      IF ENTERPRICE-LOWPRICE>=3 THEN BEGIN
       IF ENTERPRICE-L<=1.2 THEN BEGIN
        空保:SELLSHORT(1,0,MARKET);
       END
      END
     END
    END

    //开多单
    IF HOLDING=0 THEN BEGIN
     IF DUOKONG=1 OR DUOKONG=2 THEN BEGIN
      IF 开多条件 and t1 THEN BEGIN
       多开:BUY(1=1,ss,market);
       HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
      END
     END
    END

    //持有多单
    IF HOLDING>0 THEN BEGIN
     IF t2 THEN BEGIN  {平多单}
      多平:SELL(1,0,market),ORDERQUEUE;
     END
     
     //多单管理
     //多单止损
     IF (ENTERPRICE-C)/ENTERPRICE*100>=ZSDS THEN BEGIN
      多损:SELL(1,0,market),ORDERQUEUE;
     END
     
     //多单移动止盈
     IF YDZY=1 THEN BEGIN
      //每周期判断是否创新高
      IF H>HIGHPRICE THEN BEGIN
       HIGHPRICE:=H;
      END
     
      //如果盈利超过10点之后回撤达到22%,就平仓,保住盈利
      IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
       IF (HIGHPRICE-H)/HIGHPRICE*100>=DHCDS THEN BEGIN  //回撤超过22%
        多赢:SELL(1,0,MARKET);
       END
      END
     END
     
     //赚3保1
     IF Z3B1=1 THEN BEGIN
      IF HIGHPRICE-ENTERPRICE>=3 THEN BEGIN
       IF H-ENTERPRICE<=1.2 THEN BEGIN
        多保:SELL(1,0,MARKET);
       END
      END
     END
    END

    //开空单
    IF HOLDING=0 THEN BEGIN
     IF DUOKONG=1 OR DUOKONG=3 THEN BEGIN
      IF 开空条件 and t1 THEN BEGIN
       空开:BUYSHORT(1=1,ss,market);
       LOWPRICE:=ENTERPRICE;
      END
     END
    END

     

     

  • 金字塔客服:

    需要用全局变量来限定开平状态,思路如下:

     

     

    1.策略最开头添加代码

       variable:kaiguan_duo=0;//多头开关

       variable:kaiguan_kong=0;//空头开关

     

    2.所有的止盈止损代码添加对全局变量的赋值以及判断,全局变量的赋值写在平仓语句之后,比如:

      ①

      空头添加开关

      //止损59%
       IF (C-ENTERPRICE)/ENTERPRICE*100>=ZSDS  and kaiguan_kong=0 THEN BEGIN
         空损:SELLSHORT(1,0,market),ORDERQUEUE;

         kaiguan_kong:=1;
       END
      ②

      多头添加开关

      //持有多单
      IF HOLDING>0 and kaiguan_duo=0 THEN BEGIN
        IF t2 THEN BEGIN  {平多单}
          多平:SELL(1,0,market),ORDERQUEUE;

          kaiguan_duo:=1;
      END

     

      其他的多空头止盈止损不做重复的讲解,按照上面的处理即可

     

    3.策略最后面添加代码

      if time=closetime(0) then begin

        kaiguan_duo:=0;

        kaiguan_kong:=0;

      end

    [此贴子已经被作者于2013/10/24 9:49:50编辑过]

     

  • 用户回复:

    还是有点不懂,可以麻烦老师写个简单实例吗?

     

  • 网友回复: 我先摸索一下,多谢老师!

     

  • 网友回复:

    加上去了,测试也通过。非常感谢!

    。。不过又出现个问题,图表的时候线缩得不成样子了。不知道哪里错了,求救!

     

    input:ss(1,1,100,1),nmin1(41,1,100,1),nmin2(1,1,100,1),n1(0,0,100,1),,n2(22,1,60,1),n3(13,10,20,1),n4(59,1,80,1);
    N:=barslast(date<>ref(date,1))+1;
    开盘30分钟最高价:=valuewhen(time<=090000+nmin1*100,hhv(h,n));
    开盘30分钟最低价:=valuewhen(time<=090000+nmin1*100,llv(l,n));
    上轨:开盘30分钟最高价+n1*mindiff;
    下轨:开盘30分钟最低价-N1*mindiff;

     

    //条件
    开多条件:=h>上轨;
    开空条件:=l<下轨;
    t1:=time>091500+nmin2*100 and time<151000;
    t2:=time=151300;

     

    //交易系统

    VARIABLE:DUOKONG=0;
    variable:kaiguan_duo=0;//多头开关
    variable:kaiguan_kong=0;//空头开关

    TSFS:=0;     {停损反手,1-反手 0-不反手}
    开仓手数:=ss;     {开仓手数}
    ZSDS:=n4/100;     {止损百分比}


    //以下变量用于移动止盈
    VARIABLE:YDZY=1;     {移动止盈总开关,1为开,0为关}
    VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存开仓后的最高价、最低价}
    VARIABLE:DHCDS=n2/100,KHCDS=n2/100;   {多、空单回撤百分比}
    VARIABLE:DYLDS=n3,KYLDS=n3;   {多、空单盈利点数,当盈利点数达到这个标准后,如果回撤达到上面的参数值百分比就平仓}
    VARIABLE:Z3B1:=0;     {赚3保1开关}
    DUOKONG:=1;

     

    //持有空单
    IF HOLDING<0 THEN BEGIN
     IF t2 THEN BEGIN   //平空单
      空平:SELLSHORT(1,0,market),ORDERQUEUE;
     END
     
     //止损59%
     IF (C-ENTERPRICE)/ENTERPRICE*100>=ZSDS and kaiguan_kong=0 THEN BEGIN
      空损:SELLSHORT(1,0,market),ORDERQUEUE;
      kaiguan_kong:=1;
     END
     
     //空单移动止盈
     IF YDZY=1 THEN BEGIN
      //每周期判断是否创新低
      IF L<LOWPRICE THEN BEGIN
       LOWPRICE:=L;
      END
     
      //如果盈利超过10点之后回撤达到22%,就平仓,保住盈利
      IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
       IF (L-LOWPRICE)/LOWPRICE*100>=KHCDS THEN BEGIN  //回撤超过的百分比
        空赢:SELLSHORT(1,0,MARKET);
       END
      END
     END
     
     //赚3保1
     IF Z3B1=1 THEN BEGIN
      IF ENTERPRICE-LOWPRICE>=3 THEN BEGIN
       IF ENTERPRICE-L<=1.2 THEN BEGIN
        空保:SELLSHORT(1,0,MARKET);
       END
      END
     END
    END

     

    //开多单
    IF HOLDING=0 THEN BEGIN
     IF DUOKONG=1 OR DUOKONG=2 THEN BEGIN
      IF 开多条件 and t1 THEN BEGIN
       多开:BUY(1=1,ss,market);
       HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
      END
     END
    END

     

    //持有多单
    IF HOLDING>0 THEN BEGIN
     IF t2 THEN BEGIN  {平多单}
      多平:SELL(1,0,market),ORDERQUEUE;
     END
     
     //多单管理
     //多单止损
     IF (ENTERPRICE-C)/ENTERPRICE*100>=ZSDS and kaiguan_duo=0 THEN BEGIN
      多损:SELL(1,0,market),ORDERQUEUE;
      kaiguan_duo=1;
     END
     
     //多单移动止盈
     IF YDZY=1 THEN BEGIN
      //每周期判断是否创新高
      IF H>HIGHPRICE THEN BEGIN
       HIGHPRICE:=H;
      END
     
      //如果盈利超过10点之后回撤达到22%,就平仓,保住盈利
      IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
       IF (HIGHPRICE-H)/HIGHPRICE*100>=DHCDS THEN BEGIN  //回撤超过22%
        多赢:SELL(1,0,MARKET);
       END
      END
     END
     
     //赚3保1
     IF Z3B1=1 THEN BEGIN
      IF HIGHPRICE-ENTERPRICE>=3 THEN BEGIN
       IF H-ENTERPRICE<=1.2 THEN BEGIN
        多保:SELL(1,0,MARKET);
       END
      END
     END
    END

     

    //开空单
    IF HOLDING=0 THEN BEGIN
     IF DUOKONG=1 OR DUOKONG=3 THEN BEGIN
      IF 开空条件 and t1 THEN BEGIN
       空开:BUYSHORT(1=1,ss,market);
       LOWPRICE:=ENTERPRICE;
      END
     END

    END

     

     if time=closetime(0) then begin
        kaiguan_duo:=0;
        kaiguan_kong:=0;
      end


     


    此主题相关图片如下:tm截图未命名.png

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容