全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
我的公式有什么问题?
2022-07-29 16:31

Params
    Numeric AA(20000);
    Numeric BB(0.07);
    Numeric CC(0.16);
Vars
    Bool VAR1(False); 
    Bool VAR2(False); 
    Bool VAR3(False); 
    Bool VAR4(False); 
    Bool VAR5(False); 
    Bool VAR6(False); 
    Bool VAR7(False); 
    Bool VAR8(False); 
    Bool VAR9(False);
    Numeric Minpoint;
    Numeric UPLOTS1;
    Numeric DNLOTS1;
    Numeric UPLOTS2;
    Numeric DNLOTS2;
    Series<Numeric> KZS; 
    Series<Numeric> DZS;
    Series<Numeric> COdiff1; 
    Series<Numeric> COdiff2;
    Bool UpTrend(False); 
    Bool DownTrend(False);  
Events
    OnBar(ArrayRef<Integer> indexs)
    {
        

        // 集合竞价过滤
        If(BarStatus == 2 && Time == 0.090000 && CurrentTime < 0.090000) Return;
        If(BarStatus == 2 && Time == 0.210000 && CurrentTime < 0.210000) Return;
        If(BarStatus == 2 && Time == 0.103000 && CurrentTime < 0.103000) Return;
        If(BarStatus == 2 && Time == 0.133000 && CurrentTime < 0.133000) Return;
        //涨跌停板过滤
        If((Close==Q_LowerLimit) or (Close==Q_UpperLimit)) Return;
           
        COdiff1 = Close[1]-Open[1];
        COdiff2 = Close[2]-Open[2];
           
        If(COdiff1>0 && COdiff2>0)
            {
                UpTrend = True;
            }
        Else If(COdiff1<-0 && COdiff2<-0)
            {
                DownTrend = True;
            }
        Range[0:DataSourceSize() - 1]
        {
            
            VAR4 = data0.L>=data0.L[1] AND data0.H>=data0.H[1]+1;
            VAR5 = data0.H<=data0.H[1] AND data0.L<=data0.L[1]-1;
            VAR6 = data1.L>=data1.L[1] AND data1.H>=data1.H[1]+1;
            VAR7 = data1.H<=data1.H[1] AND data1.L<=data1.L[1]-1;
            VAR8 = (Time>=0.090500 And Time<=0.101000) Or (Time>=0.103000 And Time<=0.145500) Or (Time>=0.210500 And Time<=0.225500);
            VAR9 = (Time==0.093000 And CurrentTime<=0.095800) OR  (Time==0.100000 And CurrentTime<=0.101300) OR (Time==0.110000 And CurrentTime<=0.112800) OR (Time==0.133000 And CurrentTime<=0.135800) OR (Time==0.140000 And CurrentTime<=0.142800) OR (Time==0.143000 And CurrentTime<=0.145800) OR (Time==0.213000 And CurrentTime<=0.215800) OR (Time==0.220000 And CurrentTime<=0.222800) OR (Time==0.223000 And CurrentTime<=0.225800);
            //KZS = L[BarsSinceEntry];
                    //PlotNumeric("MA1",KZS);
    If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.H[1]+1)*(BB+0.01))<0.03)
     {
         UPLOTS1=IntPart((AA*0.8)/((data0.H[1]+1)*5*(BB+0.01)));
     }
    If(((Data0.H[1]-data0.L[1]+2)*0.8)/((data0.H[1]+1)*(BB+0.01))>=0.03)
     {
         UPLOTS1=IntPart((AA*0.03)/((data0.H[1]-data0.L[1]+2)*5));
     }
    If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.L[1]-1)*(BB+0.01))<0.03 )
     {
         DNLOTS1=IntPart((AA*0.8)/((data0.L[1]-1)*5*(BB+0.01)));
     }
    If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.L[1]-1)*(BB+0.01))>=0.03 )
     {
         DNLOTS1=IntPart((AA*0.03)/((data0.H[1]-data0.L[1]+2)*5));
     }
    If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.H[1]+1)*(BB+0.01))<0.03)
     {
         UPLOTS2=IntPart((AA*0.8)/((data1.H[1]+1)*5*(BB+0.01)));
     }
    If(((Data1.H[1]-data1.L[1]+2)*0.8)/((data1.H[1]+1)*(BB+0.01))>=0.03)
     {
         UPLOTS2=IntPart((AA*0.03)/((data1.H[1]-data1.L[1]+2)*5));
     }
    If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.L[1]-1)*(BB+0.01))<0.03)
     {
         DNLOTS2=IntPart((AA*0.8)/((data1.L[1]-1)*5*(BB+0.01)));
     }
    If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.L[1]-1)*(BB+0.01))>=0.03)
     {
         DNLOTS2=IntPart((AA*0.03)/((data1.H[1]-data1.L[1]+2)*5));
     }

//开多1
    
    If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR4 AND VAR8 and data0.MarketPosition==0)
    {
            data0.Buy(1,data0.H[1]);
    }
            

//开空1
    
    If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR5 AND VAR8 and data0.MarketPosition==0)                        
    {
            data0.SellShort(1,data0.L[1]);
    }

//开多2
    
    If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR6 AND VAR8 and data1.MarketPosition==0)
    {
            data1.Buy(2,data1.H[1]);
    }
            

//开空2
    
    If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR7 AND VAR8 and data1.MarketPosition==0)                        
    {
            data1.SellShort(2,data1.L[1]);
    }

//开多3
    
    If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR6 AND VAR8 and data1.MarketPosition==0)
    {
            data1.Buy(3,data1.H[1]);
    }
            

//开空3
    
    If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR7 AND VAR8 and data1.MarketPosition==0)                        
    {
            data1.SellShort(3,data1.L[1]);
    }
//开多4
    
    If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR4 AND VAR8 and data0.MarketPosition==0)
    {
            data0.Buy(4,data0.H[1]);
    }
            

//开空4
    
    If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR5 AND VAR8 and data0.MarketPosition==0)                        
    {
            data0.SellShort(4,data0.L[1]);
    }                                
        }
    }
为什么将公式进行模拟交易的时候空仓时也不能开仓?如何修改才能保证条件满足后开一次仓,而不是频繁开仓?将marketposition==0这个条件去掉后,能开仓,但发出两个相同的委托单.

wangkaiming

不能开仓先检查每个条件是否满足,另外你的图表看上去有多个图层,加载的内容各是什么

2022-08-01 08:22
mikeniker
@wangkaiming

加载的内容为两个品种的五分钟K线。我去掉marketposition==0这个限定条件后,能正常开仓,说明那一大串限定条件没问题,可是这样的话系统发出两个相同的委托单,比如公式中为发5手的委托单,系统会发出两个5手的委托单,我觉得问题出在marketposition==0上,是不是不能用这个函数?

2022-08-01 10:11
mikeniker
@wangkaiming

是不是A函数和Q函数的问题?

2022-08-01 10:34
您未登录,请先 登录注册 后发表评论
顶部