全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
为什么出场信号不执行
2022-02-28 15:30

是不

ls_20211210

回测的时候只在第一个止损位置出场,后面给你出场信号出现了都没有,只在第一个止损位置出场

 

2022-02-28 15:32
kyover

建议贴代码,不是发截图。如果想给你复现一下问题还要自己重新输入一遍,那不是很浪费时间吗

2022-02-28 15:34
ls_20211210

Params
    Numeric nEntries(3);                    // 最大建仓次数
    Numeric RiskRatio(1);                    // % Risk Per N ( 0 - 100)
    Numeric yha(2);                            // 
    Numeric yhb(20);                    // 
    Numeric yhc(21);                    // 
    Numeric yhd(42);                    // 
    Numeric bla(1);                            // 
    Numeric blb(2);                    // 
    Numeric blc(3);                    // 
    Numeric bld(13);
    Numeric teLength(10);                    // 
        
Vars
    Numeric MinPoint;                        // 最小变动单位
    Series<Numeric> AvgTR;                    // ATR
    Numeric N;                                // N 值
     Numeric TotalEquity;                    // 按最新收盘价计算出的总资产
    Numeric TurtleUnits;                    // 交易单位
    Series<Numeric> YA;                // 
    Series<Numeric> YB;                // 
    Series<Numeric>BA ;            // 
    Series<Numeric>BB;        
    Series<Numeric>BC;            // 
    Series<Numeric>BD;
    Series<Numeric>BE;
    Series<Numeric>BF;
    Series<Numeric>BG;
    Series<Numeric> DonchianLo;                // 唐奇安通道下轨,延后1个Bar    
        
    Numeric BE1;
    Numeric BE2;
    Series<Numeric>RHbar;
    Series<Numeric>Hbar;
    
    Series<Numeric>ls1;
    Series<Numeric>A1;
    Series<Numeric>A2;
    Series<Numeric>A3;
    Series<Numeric>A4;
    Series<Numeric>ls2;
          Numeric ls3;
          Numeric rc;
    Series<Numeric>ls4;      
    Series<Numeric>ls5;      
           Numeric ls6;
          
    Array<Array<String>> rvalue;
    Numeric ls;
    Numeric myEntryPrice;                    // 开仓价格
    Numeric myExitPrice;                    // 平仓价格
    Bool SendOrderThisBar(False);            // 当前Bar有过交易
    Series<Numeric> preEntryPrice(0);        // 前一次开仓的价格
    Series<Bool> PreBreakoutFailure(false);    // 前一次突破是否失败
Events
    OnBar(ArrayRef<Integer> indexs)
    {
        
        If(BarStatus == 0)
        {
            preEntryPrice = InvalidNumeric;
            PreBreakoutFailure = false;
        }
        MinPoint = MinMove*PriceScale;
        
        AvgTR = XAverage(TrueRange,yhb);
        N = AvgTR[1];
        TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
        TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
        TurtleUnits = IntPart(TurtleUnits); // 对小数取整
        
        
        
        // 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作*/
        DonchianLo = LowestFC(Low[1],teLength);
        PlotNumeric("10日最低",DonchianLo);
        YA=XAverage(CLOSE,yha);
        YB=XAverage(((LinearRegSlope(close,yhc)*yhb)+close),yhd);
        BA=(blb*CLOSE+HIGH+LOW)/blc;
        BB=XAverage(BA,blc);
        BC=XAverage(BB,blc);
        BD=XAverage(BC,blc);
        BE=(BD-BD[1])/BD[1]*100;
        BF=Average(BE,bla);
        BG=Average(BE,blb);
        ReadCSVFile("e://ls.csv", rvalue);
        ls=IIF((rvalue[0][0] == "1" and rvalue[0][1] == "1")  ,1,0);
        
        bool cond1 = (CrossOver(BF[1],BG[1]) and be[1]<0);
        bool cond2 = CrossUnder(BF[1],BG[1]);
        Integer barOffset = nthcon(cond1,1);
        Commentary("barOffset="+Text(barOffset));
        bool cond3 = (CrossUnder(BF[1],BG[1]) and be[1]>0);
        bool cond4 = CrossOver(BF[1],BG[1]);
        Integer barOffset1 = nthcon(cond3,1);
        Commentary("barOffset1="+Text(barOffset1));
        

        if(barOffset==0)
        {
            A1=BE[1];
        }
        Commentary("A1="+text(A1));
        if(cond1)
        {
        ls1=1;    
        ls2=0;    
        }
        Commentary("ls1="+text(ls1));
        if(cond2)
        {
    
        ls2=1;    
        }
        
        Commentary("ls2="+text(ls2));
        ls3=(ls1[1]+ls2[1])-(ls1+ls2);
        Commentary("ls3="+text(ls3));
        
        
         if(barOffset1==0)
        {
            A3=BE[1];
        }
        Commentary("A3="+text(A3));
        if(cond3)
        {
        ls4=1;    
        ls5=0;    
        }
        Commentary("ls4="+text(ls4));
        if(cond4)
        {
    
        ls5=1;    
        }
        
        Commentary("ls5="+text(ls5));
        ls6=(ls4[1]+ls5[1])-(ls4+ls5);
        Commentary("ls6="+text(ls6));
                        
        Commentary("ls="+text(ls));
        Commentary("YA = " + Text(YA));
        Commentary("YB = " + Text(YB));
        Commentary("BE = " + Text(BE));
        Commentary("N="+Text(N));
        Commentary("preEntryPrice="+Text(preEntryPrice));
        Commentary("快="+Text(BF));
        Commentary("慢="+Text(BG));
        range[1:1]
        {
            DonchianLo = LowestFC(Low[1],teLength);
            
            PlotNumeric("10日最低",DonchianLo);
                            
        }
        
        range[2:2]
        {
            BA=(blb*CLOSE+HIGH+LOW)/blc;
            BB=XAverage(BA,blc);
            BC=XAverage(BB,blc);
            BD=XAverage(BC,blc);
            BE=(BD-BD[1])/BD[1]*100;
            BF=Average(BE,bla);
            BG=Average(BE,blb);
            Commentary("快="+Text(BF));
            Commentary("慢="+Text(BG));
        }
        
        If(MarketPosition == 0)//&&ls==1)
        {
            // 突破开仓
            If(ls3==1 and A1>A1[1] &&TurtleUnits >= 1 )
            {
                // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交&& data2.BF[1]>data2.bg[1]
                rc=close[1];
                if(rc>data1.DonchianLo && open>data1.DonchianLo)
                {myEntryPrice =rc;
                 myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
                preEntryPrice = myEntryPrice;
                Buy(TurtleUnits,myEntryPrice);
                SendOrderThisBar = True;
                Commentary("preEntryPrice="+Text(preEntryPrice));
                }
             }
            
        }
        
        If(MarketPosition == 1) // 有多仓的情况
        {  
            If(LOW<Data1.DonchianLo) //底仓止损点
            {
                            
                myExitPrice = max(Low, Data1.DonchianLo- MinPoint);
                myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
                Sell(0,myExitPrice);    // 数量用0的情况下将全部平仓
                Commentary("myExitPrice="+Text(myExitPrice));
                
            }Else If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
            
                
                {
                    If(Open >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                    {
                        myEntryPrice = Open;
                        preEntryPrice = myEntryPrice;
                        Buy(TurtleUnits,myEntryPrice);
                        SendOrderThisBar = True;
                    }
                    while(High >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) // 以最高价为标准,判断能进行几次增仓
                    {
                        myEntryPrice = preEntryPrice + 0.5 * N;
                        preEntryPrice = myEntryPrice;
                        if(False == Buy(TurtleUnits,myEntryPrice))
                        {
                            break;
                        }
                        SendOrderThisBar = True;
                    }
                }
                  If(ls6==1 and A2<A2[1]) //出场信号
                
                {
                    myExitPrice = CLOSE[1];
                    myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
                    Sell(0,myExitPrice);    // 数量用0的情况下将全部平仓
                    
                    Commentary("myExitPrice="+Text(myExitPrice));
                }
            
                  
        }
        Commentary("CurrentEntries = " + Text(CurrentEntries));
    }
 

2022-02-28 15:40
kyover
@ls_20211210

你的问题是什么,如果是不开仓,你就把你的开仓信号全都诊断一下,看看哪个写错了

2022-02-28 15:40
ls_20211210
@kyover

下面出场信号写错了,已经好了,谢谢

2022-02-28 15:58
您未登录,请先 登录注册 后发表评论
顶部