开拓者期货期权程序化系统交易论坛

标题: 请问老师,在TBQuant 中如何将公式修改成不重复开仓,谢谢! [打印本页]

作者: china704321    时间: 2020-6-12 19:12:44     标题: 请问老师,在TBQuant 中如何将公式修改成不重复开仓,谢谢!

老师好!

下面是照猫画虎地将文华的公式转换成开拓者的公式,但在满足条件后的每个bar都加开仓。请问如何使其只在满足条件的第一个BAR开仓一次?可以帮着修改吗?

多谢


Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
        Numeric LEFast(21);       
        Numeric LESlow(34);       
                   

Vars   
        Series<Numeric> MACDValue;
        Series<Numeric> AvgMACD;
        Series<Numeric> MACDDiff;
        Series<Numeric> MACDDValueD;
        Series<Numeric> EMALEFast;       
        Series<Numeric> EMALESlow;
                   
        Bool ConCrossOver;                               
        Bool ConCrossUnder;
                                        


Events
         
        OnBar(ArrayRef<Integer> indexs)
        {
               
               
               
                EMALEFast = XAverage(Close, LEFast);
                EMALESlow = XAverage(Close, LESlow);
                PlotNumeric("EMALEFast",EMALEFast);
                PlotNumeric("EMALESlow",EMALESlow);
               
                ConCrossOver = EMALEFast > EMALESlow;
                ConCrossUnder = EMALEFast < EMALESlow;
        
        MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;       
                AvgMACD = XAverage(MACDDiff,MACDLength);
                MACDValue = MACDDiff - AvgMACD;
                MACDDValueD = MACDValue - MACDValue[1];
        
                        
        If(ConCrossOver AND MACDDValueD>0)

         {
                 BuyToCover(13,CLOSE);
                 Buy(13,CLOSE);
         }

         If(ConCrossUnder AND MACDDValueD<0)

         {
                 SELL(13,CLOSE);
                 SELLSHORT(13,CLOSE);
         }
         
}

作者: china704321    时间: 2020-6-12 20:38:09

将上述公式中的条件
MACDDValueD>0和MACDDValueD<0删除掉,就只有在死叉或金叉时开仓一次了。
请高手看看如何把这个条件加上,同时保持不重复开仓。

多谢




Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
        Numeric LEFast(21);       
            Numeric LESlow(34);       
                   

Vars   
        Series<Numeric> MACDValue;
        Series<Numeric> AvgMACD;
        Series<Numeric> MACDDiff;
        Series<Numeric> EMALEFast;       
            Series<Numeric> EMALESlow;       
            Bool ConCrossOver;                               
            Bool ConCrossUnder;                               


Events
        OnBar(ArrayRef<Integer> indexs)
        {
               
               
               
                EMALEFast = XAverage(Close, LEFast);
                EMALESlow = XAverage(Close, LESlow);
                PlotNumeric("EMALEFast",EMALEFast);
                PlotNumeric("EMALESlow",EMALESlow);
                ConCrossOver = CrossOver(EMALEFast,EMALESlow);
                ConCrossUnder = CrossUnder(EMALEFast,EMALESlow);
        MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;        
        AvgMACD = XAverage(MACDValue, MACDLength);
                 
        If(ConCrossOver)

         {
                 BuyToCover(8,CLOSE);
                 Buy(8,CLOSE);
         }

         If(ConCrossUnder)

         {
                 SELL(8,CLOSE);
                 SELLSHORT(8,CLOSE);
         }
         
}




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2