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

亏三次加仓,盈三次减仓 [金字塔]

  • 咨询内容: 下面是突破20日高低点交易策略,初始交易手数为ss,  如连续三次盈利后仓位减为一半, 一直到连续三次亏损仓位增加到原仓位,加载后交易明细帐仓位错乱,请问全局变量那错了,麻烦纠正过来?
    input :k(20,5,30,1) input:avglen(30,10,100,5);input : atrlen(20,5,30,1) ;input : ss(2,1,1000,1) ;
    //声明变量nt := 1 ; //调试信息带时间戳buyorderthisbar := 0 ; //当前bar有过交易variable : _debug = 1 ; //是否输出前台交易指令variable : turtleunits=0 ; //交易单位variable : myentryprice1=0; variable : myentryprice2=0; variable : myexitprice=0;variable : n=0;variable : m=0;variable : yk=0; //准备需要计算的变量zhh:ref(high,k);zll:ref(low,k);kqls:=enterbars+1;khh:=hhv(high,kqls);kll:=llv(low,kqls);
    avgtr :=ref(ma(tr,atrlen),1);
    //开始执行时 初始化数据if barpos=1 then begin position :=0 ; posnum:=ss; end 
    //如果当前是没有持仓的状态if position=0 and  barpos>20 and h>l then begin  //建立多头进场条件 long:=high>=zhh ; //多头进场 if long then begin myentryprice1 :=if(open>zhh+0.2 ,open+0.6 ,zhh+0.6); buy( _debug,posnum,limitr,myentryprice1); jqsh:=1;    position := 1 ; turtleunits := 1 ;    n:= avgtr ; buyorderthisbar := 1; end   //建立空头进场条件 short:=low<=zll ; //空头进场 if short and position=0 then begin myentryprice2:= if(open<zll-0.2 ,open-0.6 ,zll-0.6) ; buyshort( _debug,posnum,limitr,myentryprice2); jqsh:=1; position := -1 ; turtleunits := 1 ; n := avgtr ; buyorderthisbar := 1;
     end end
    //如果当前持有多头仓位的状态
    if position=1 and barpos>20 and h>l then begin
    //多头加仓条件 {while (close>myentryprice+0.5*n) and turtleunits<4 and jqsh=1 do begin myentryprice := if(open>myentryprice+0.5*n ,open+0.6 ,myentryprice+0.5*n+0.6 ) ; myentryprice:= ceiling(myentryprice/mindiff)*mindiff ; buy( _debug, posnum, limitr,myentryprice ); turtleunits := turtleunits+1 ; buyorderthisbar := 1; end } //建立多头离场条件 longx1 := low<zll-mindiff;    myexitprice:=zll-mindiff;     if longx1 and buyorderthisbar=0 then begin myexitprice := if(open<myexitprice-0.2 ,open-0.6 ,myexitprice-0.6) ; sell( _debug ,0,limitr,myexitprice); position := 0 ; turtleunits := 0 ; yk:=myexitprice- myentryprice2; end if yk>0 then begin        n:=0;       m:=m+1;       end           if yk<0   then begin       n:=n+1;       m:=0;      end        if n>=3 then posnum:=ss;       if m>=3 then posnum:=0.5*ss;     //建立多头止损条件 longx2 := low<(khh-2*n);    if longx2 and position=1 and buyorderthisbar=0 then begin myexitprice := if(open<khh-2*n ,open-0.6 ,khh-2*n-0.6) ; myexitprice := floor(myexitprice/mindiff)*mindiff ; sell( _debug ,0,limitr,myexitprice); position := 0 ; turtleunits := 0 ; yk:=myexitprice- myentryprice2;   end if yk>0 then begin   n:=0;   m:=m+1;       end    if yk<0   then begin       n:=n+1;       m:=0;      end       if n>=3 then posnum:=ss;       if m>=3 then posnum:=0.5*ss; end  

    //如果当前持有空头仓位的状态
    if position = -1 and barpos>20 and h>l then begin
    //空头加仓条件 {while (close<myentryprice-0.5*n) and turtleunits<4 and jqsh=1 do begin myentryprice := if(open<myentryprice-0.5*n ,open-0.6 ,myentryprice-0.5*n-0.6 ) ; kkj := floor(myentryprice/mindiff)*mindiff ; buyshort( _debug,posnum, limitr,myentryprice ); turtleunits := turtleunits+1 ; buyorderthisbar := 1; end }
       //建立空头离场条件    shortx1 :=  high>zhh+mindiff;        myexitprice:=zhh+mindiff;    if shortx1 and buyorderthisbar=0 then begin myexitprice := if(open>myexitprice,open+0.6, myexitprice+0.6); sellshort( _debug,0,limitr,myexitprice); position := 0 ; turtleunits := 0 ;   yk:=myentryprice2-myexitprice; end    if yk>0 then begin        n:=0;       m:=m+1;      end    if yk<0  then begin       n:=n+1;       m:=0;       end       if n>=3 then posnum:=ss;       if m>=3 then posnum:=0.5*ss;       
    //建立空头止损条件 shortx2 := high>kll+2*n ;    if shortx2 and position = -1 and buyorderthisbar=0  then begin myexitprice:= if(open>kll+2*n ,open+0.6 ,kll+2*n+0.6) ; myexitprice := ceiling(myexitprice/mindiff)*mindiff ; sellshort( _debug,0,limitr,myexitprice); position := 0 ; turtleunits := 0 ; yk:=myentryprice2-myexitprice;  end   if yk>0   then begin       n:=0;      m:=m+1;     end    if yk<0   then begin      n:=n+1;      m:=0;     end     if n>=3 then posnum:=ss;     if m>=3 then posnum:=0.5*ss; end               
      //显示账户状态continueline@ 资产:asset,linethick0;可用现金:cash(0),linethick0;pos:holding,linethick0;交易次数:totaldaytrade, linethick0 ;

     

  • 金字塔客服:

     if shortx1 and buyorderthisbar=0 then begin

    像类似这样平仓语句里面有全局变量操作的,要在平仓条件的if里面加上holding判断

    比如平多就要加holding>0的判断,平空就要加holding<0的判断

     

  • 用户回复:

    加上holding 也还是仓位错乱,麻烦你加载一下,加仓减仓能实现吗?






     

  • 网友回复:

    input :k(20,5,30,1)
    input:avglen(30,10,100,5);
    input : atrlen(20,5,30,1) ;
    input : ss(2,1,1000,1) ;


    //声明变量
    nt := 1 ;   //调试信息带时间戳
    buyorderthisbar := 0 ;   //当前bar有过交易
    variable : _debug = 1 ;   //是否输出前台交易指令
    variable : turtleunits=0 ;   //交易单位
    variable : myentryprice1=0;
    variable : myentryprice2=0;
    variable : myexitprice=0;
    variable : n=0;
    variable : m=0;
    variable : yk=0;
    //准备需要计算的变量
    zhh:ref(high,k);
    zll:ref(low,k);
    kqls:=enterbars+1;
    khh:=hhv(high,kqls);
    kll:=llv(low,kqls);


    avgtr :=ref(ma(tr,atrlen),1);


    //开始执行时 初始化数据
    if barpos=1 then begin
       position :=0 ;
       posnum:=ss;
    end


    //如果当前是没有持仓的状态
    if position=0 and  barpos>20 and h>l then begin
       //建立多头进场条件
       long:=high>=zhh ;
       //多头进场
       if long  and holding=0  then begin
       myentryprice1 :=if(open>zhh+0.2 ,open+0.6 ,zhh+0.6);
       buy( _debug,posnum,limitr,myentryprice1);
       jqsh:=1;
          position := 1 ;
       turtleunits := 1 ;
         // n:= avgtr ;
       buyorderthisbar := 1;
      
       end
       
       //建立空头进场条件
       short:=low<=zll ;
       //空头进场
       if short and position=0 and holding=0 then begin   
       myentryprice2:= if(open<zll-0.2 ,open-0.6 ,zll-0.6) ;
       buyshort( _debug,posnum,limitr,myentryprice2);
       jqsh:=1;
       position := -1 ;
       turtleunits := 1 ;
       //n := avgtr ;
       buyorderthisbar := 1;


        end
     end   


    //如果当前持有多头仓位的状态


    if position=1 and barpos>20 and h>l then begin


       //多头加仓条件
      
       {while (close>myentryprice+0.5*n) and turtleunits<4 and jqsh=1 do begin
       myentryprice := if(open>myentryprice+0.5*n ,open+0.6 ,myentryprice+0.5*n+0.6 ) ;
       myentryprice:= ceiling(myentryprice/mindiff)*mindiff ;   
       buy( _debug, posnum, limitr,myentryprice );
       turtleunits := turtleunits+1 ;
       buyorderthisbar := 1;
       end }
      
       //建立多头离场条件
       longx1 := low<zll-mindiff;
          myexitprice:=zll-mindiff;
         if longx1 and buyorderthisbar=0 and holding>0 then begin
       myexitprice := if(open<myexitprice-0.2 ,open-0.6 ,myexitprice-0.6) ;   
       sell( _debug ,0,limitr,myexitprice);
       position := 0 ;
       turtleunits := 0 ;
       yk:=myexitprice- myentryprice2;
       
       if yk>0 then begin
             n:=0;
             m:=m+1;
             end
           
           if yk<0   then begin
             n:=n+1;
             m:=0;
            end
            // if n>=3 then posnum:=ss;
     end      //  if m>=3 then posnum:=0.5*ss;
       
       //建立多头止损条件
       longx2 := low<(khh-2*n);
        if longx2 and position=1 and buyorderthisbar=0 and holding>0 then begin
       myexitprice := if(open<khh-2*n ,open-0.6 ,khh-2*n-0.6) ;   
       myexitprice := floor(myexitprice/mindiff)*mindiff ;   
       sell( _debug ,0,limitr,myexitprice);
       position := 0 ;
       turtleunits := 0 ;
       yk:=myexitprice- myentryprice2;
       
       if yk>0 then begin
         n:=0;
         m:=m+1;
             end
          if yk<0   then begin
             n:=n+1;
             m:=0;
            end
          
       end 

      end


    //如果当前持有空头仓位的状态


    if position = -1 and barpos>20 and h>l then begin


       //空头加仓条件
      
       {while (close<myentryprice-0.5*n) and turtleunits<4 and jqsh=1 do begin
       myentryprice := if(open<myentryprice-0.5*n ,open-0.6 ,myentryprice-0.5*n-0.6 ) ;   
       kkj := floor(myentryprice/mindiff)*mindiff ;   
       buyshort( _debug,posnum, limitr,myentryprice );
       turtleunits := turtleunits+1 ;
       buyorderthisbar := 1;
       end }   


       //建立空头离场条件
        shortx1 :=  high>zhh+mindiff;
            myexitprice:=zhh+mindiff;
        if shortx1 and buyorderthisbar=0 and holding<0 then begin
       myexitprice := if(open>myexitprice,open+0.6, myexitprice+0.6);   
       sellshort( _debug,0,limitr,myexitprice);
       position := 0 ;
       turtleunits := 0 ;
            yk:=myentryprice2-myexitprice;
       
          if yk>0 then begin
             n:=0;
             m:=m+1;
            end
          if yk<0  then begin
             n:=n+1;
             m:=0;
             end
             //if n>=3 then posnum:=ss;
             //if m>=3 then posnum:=0.5*ss;
            
     end 


       //建立空头止损条件
       shortx2 := high>kll+2*n ;
        if shortx2 and position = -1 and buyorderthisbar=0 and holding<0 then begin
       myexitprice:= if(open>kll+2*n ,open+0.6 ,kll+2*n+0.6) ;   
       myexitprice := ceiling(myexitprice/mindiff)*mindiff ;   
       sellshort( _debug,0,limitr,myexitprice);
       position := 0 ;
       turtleunits := 0 ;
       yk:=myentryprice2-myexitprice;
       
         if yk>0   then begin
            n:=0;
            m:=m+1;
           end
         if yk<0   then begin
            n:=n+1;
            m:=0;
           end
          // if n>=3 then posnum:=ss;
           //if m>=3 then posnum:=0.5*ss;
           end
     end
           
      if n>=3 and ref(n,1)=2 then posnum:=ss;
    if m>=3 and ref(m,1)=2 then posnum:=0.5*ss;    

     

  • 网友回复: 按你的加载还是不行,麻烦你回测一下.全局变量真难用,不知错在哪!

 

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

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


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

相关文章

    没有相关内容