pituo 发表于 2019-1-4 17:25:12

请各位高手帮我看看模型能否用于实盘

我的模型代码如下,原版来自一个高手的公开模型,自己改了一些内容,想用于实盘。经过回测感觉还可以,但是问题是感觉有点太通用了。自己的开仓条件也不知道是否是正确,也就是这样的开仓条件是否真能买到。请各位高手帮忙看看,谢谢啦。
                 
//------------------------------------------------------------------------
Params
        Numeric length_B(55);
        Numeric MaLength(55);
        Numeric EarnAtrRatio(5);
       
       
Vars

        Numeric Minpoint;
        NumericSeries atr;
        Numeric N;
        Numeric Lots;
        Numeric myasset(1000000);
        numeric RiskRatio(1);
        NumericSeries Hline_B;
        NumericSeries Lline_B;
        NumericSeries AveMa;
        NumericSeries ExistHline;
        NumericSeries ExistLline;
        NumericSeries Profit;
    NumericSeries Fristprice;
    NumericSeries myEntryPrice;
       
Begin
// 集合竞价过滤和本BAR价格异常过滤
        If(!CallAuctionFilter()) Return;
        If(date!=date and high==low) Return;
         
// 0. 准备工作------------------------------------------------------------------------
        Minpoint = MinMove*PriceScale;
        atr = AvgTrueRange(length_B);
        N  = atr;
        Lots = (myasset*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
        Lots = IntPart(Lots); // 对小数取整
       
        Hline_B = Highest(H,length_B);                // 通道上轨
        Lline_B = Lowest(L,length_B);                // 通道下轨
        PlotNumeric("Hline_B",Hline_B);
        PlotNumeric("Lline_B",Lline_B);

        AveMa=Average(Close,MaLength);        // 均线
        PlotNumeric("AveMa",AveMa);         
         
// 1. 策略入场------------------------------------------------------------------------
        If( MarketPosition==0 AND Close>Hline_B  AND Close>(Close+2*atr))
        {
                        myEntryPrice==Min(High,Hline_B+Minpoint);
                        myEntryPrice==IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
                        Buy(Lots,myEntryPrice);
                        Fristprice==myEntryPrice;
        }       
        If(MarketPosition == 1 ) // 有多仓的情况
         {
             If(Fristprice!=InvalidNumeric && Lots >= 1)
               {
                       
                    If(Open >= Fristprice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                  {
                    myEntryPrice = Open;
                    Fristprice = myEntryPrice;
                    Buy(Lots,myEntryPrice);   
                   }

                   while(CurrentEntries<5 && High >= Fristprice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
                  {
                    myEntryPrice = Fristprice + 0.5*N;
                    Fristprice = myEntryPrice;
                    Buy(Lots,myEntryPrice);                                                               
                   }

                }
          }
        If( MarketPosition==0 AND close<Lline_B  AND Close<(Close-2*atr))
        {
            // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = max(low,Lline_B - MinPoint);
            myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            Fristprice = myEntryPrice;
            SellShort(Lots,myEntryPrice);
         }
        If(MarketPosition ==-1) // 有空仓的情况
         {
               If(Fristprice!=InvalidNumeric && Lots >= 1)
              {
                  If(Open <= Fristprice - 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                  {
                    myEntryPrice = Open;
                    Fristprice = myEntryPrice;
                    SellShort(Lots,myEntryPrice);
                                       
                  }

                 while(CurrentEntries<5 && Low <= Fristprice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
                 {
                    myEntryPrice = Fristprice - 0.5 * N;
                    Fristprice = myEntryPrice;
                    SellShort(Lots,myEntryPrice);
                                       
                 }
               }
         }
        


       
// 初始止损------------------------------------------------------------------------
       
If(MarketPosition==1 and BarsSinceEntry>0 )
{
        If( Low<LastEntryPrice - 2*N )
        {
                Sell(0,Min(Open,LastEntryPrice - 2*N  ) - Minpoint );
        }
}

If(MarketPosition==-1 and BarsSinceEntry>0 )
{
        If( High>LastEntryPrice + 2*N )
        {
                BuyToCover(0,Max(Open, LastEntryPrice + 2*N ) + Minpoint );
        }
}
       
// 均线跟踪止损------------------------------------------------------------------------

        If(MarketPosition==1  AND BarsSinceEntry>0 )
        {
                If( MarketPosition==1 AND Close<AveMa AND BarsSinceEntry>=5 )
                {
                        Sell(0,Open);
                }
               
        }

        If(MarketPosition==-1 AND BarsSinceEntry>0 )
        {
                If( MarketPosition==-1 and Close>AveMa AND BarsSinceEntry>=5 )  
                {
                        BuyToCover(0,Open);
                }
        }

// ATR跟踪止损------------------------------------------------------------------------

        ExistHline = CloseD(1) + 1*N;
        ExistLline = CloseD(1) - 1*N;

        If(MarketPosition==1)
        {
                Profit = (High-AvgEntryPrice)/N;
        }
        If(MarketPosition==-1)
        {
                Profit = (-1)*(Low-AvgEntryPrice)/N;       
        }

        If(Profit>EarnAtrRatio)
        {
                PlotBool("Hello ",True);
        }
       
        If(MarketPosition==1 AND Profit>EarnAtrRatio and Close<ExistLline   )
        {
         Sell(0,Open);
        }

        If(MarketPosition==-1 AND Profit>EarnAtrRatio and Close>ExistHline  )
        {
         BuyToCover(0,Open);
        }                 

   
End


//------------------------------------------------------------------------

jyz2709 发表于 2019-2-1 12:14:01

通用不是坏事哦

89578251 发表于 2019-2-1 14:50:03

// 1. 策略入场------------------------------------------------------------------------
        If( MarketPosition==0 AND Close>Hline_B  AND Close>(Close+2*atr))
这里用Close,信号会闪烁吧?

gxqh000460 发表于 2019-2-2 14:03:13

把上面的代码修改了一下,如下,
            
//------------------------------------------------------------------------
Params
        Numeric length_B(55);
        Numeric MaLength(55);
        Numeric EarnAtrRatio(5);
        
        
Vars

        Numeric Minpoint;
        NumericSeries atr;
        Numeric N;
        Numeric Lots;
        Numeric myasset(1000000);
        numeric RiskRatio(1);
        NumericSeries Hline_B;
        NumericSeries Lline_B;
        NumericSeries AveMa;
        NumericSeries ExistHline;
        NumericSeries ExistLline;
        NumericSeries Profit;
    NumericSeries Fristprice;
    NumericSeries myEntryPrice;
        
Begin
// 集合竞价过滤和本BAR价格异常过滤
        If(!CallAuctionFilter()) Return;
        If(date!=date and high==low) Return;
         
// 0. 准备工作------------------------------------------------------------------------
        Minpoint = MinMove*PriceScale;
        atr = AvgTrueRange(length_B);
        N  = atr;
       // Lots = (myasset*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
        Lots = 1; //IntPart(Lots); // 对小数取整
        
        Hline_B = Highest(H,length_B);                // 通道上轨
        Lline_B = Lowest(L,length_B);                // 通道下轨
        PlotNumeric("Hline_B",Hline_B);
        PlotNumeric("Lline_B",Lline_B);

        AveMa=Average(Close,MaLength);        // 均线
        PlotNumeric("AveMa",AveMa);         
         
                 If(BarStatus == 0)
                 {
                        Fristprice = InvalidNumeric;
                 }
                 
// 1. 策略入场------------------------------------------------------------------------
        If( MarketPosition==0 AND High > Hline_B  AND High > (Close+2*N) )
        {
                        //myEntryPrice==Min(High,Hline_B+Minpoint);
                        //myEntryPrice==IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
                        Buy(Lots,Max(Open,Max(Hline_B,(Close+2*N))));
                        Fristprice = Max(Open,Max(Hline_B,(Close+2*N)));
                                               
        }        

        If( MarketPosition==0 AND Low <Lline_B  AND Low<(Close-2*N))
        {
            // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
            //myEntryPrice = max(low,Lline_B - MinPoint);
            //myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            Fristprice = Min(Open,Min(Lline_B,(Close-2*N)));
            SellShort(Lots,Min(Open,Min(Lline_B,(Close-2*N))));
         }
                 
                 
                 
                 
/*

                 If(MarketPosition ==-1) // 有空仓的情况
         {
               If(Fristprice!=InvalidNumeric && Lots >= 1)
              {
                  If(Open <= Fristprice - 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                  {
                    myEntryPrice = Open;
                    Fristprice = myEntryPrice;
                    SellShort(Lots,myEntryPrice);
                                       
                  }

                 while(CurrentEntries<5 && Low <= Fristprice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
                 {
                    myEntryPrice = Fristprice - 0.5 * N;
                    Fristprice = myEntryPrice;
                    SellShort(Lots,myEntryPrice);
                                       
                 }
               }
         }
        
               
               
               
               
                If(MarketPosition == 1 ) // 有多仓的情况
         {
             If(Fristprice!=InvalidNumeric && Lots >= 1)
               {
                       
                    If(Open >= Fristprice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                  {
                    myEntryPrice = Open;
                    Fristprice = myEntryPrice;
                    Buy(Lots,myEntryPrice);   
                   }

                   while(CurrentEntries<5 && High >= Fristprice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
                  {
                    myEntryPrice = Fristprice + 0.5*N;
                    Fristprice = myEntryPrice;
                    Buy(Lots,myEntryPrice);                                                               
                   }

                }
          }
*/

        
// 初始止损------------------------------------------------------------------------
        
If(MarketPosition==1 and BarsSinceEntry>0 )
{
        If( Low<Fristprice - 2*N )
        {
                Sell(0,Min(Open,Fristprice - 2*N  ) - Minpoint );
        }
}

If(MarketPosition==-1 and BarsSinceEntry>0 )
{
        If( High>Fristprice + 2*N )
        {
                BuyToCover(0,Max(Open, Fristprice + 2*N ) + Minpoint );
        }
}
        
// 均线跟踪止损------------------------------------------------------------------------

        If(MarketPosition==1  AND BarsSinceEntry>0 )
        {
                If( MarketPosition==1 AND Low<AveMa AND BarsSinceEntry>=5 )
                {
                        Sell(0,Min(Open,Low));
                }
               
        }

        If(MarketPosition==-1 AND BarsSinceEntry>0 )
        {
                If( MarketPosition==-1 and High>AveMa AND BarsSinceEntry>=5 )  
                {
                        BuyToCover(0,Max(Open,High));
                }
        }

// ATR跟踪止损------------------------------------------------------------------------

        ExistHline = CloseD(1) + 1*N;
        ExistLline = CloseD(1) - 1*N;

        If(MarketPosition==1)
        {
                Profit = (High-Fristprice)/N;
        }
        If(MarketPosition==-1)
        {
                Profit = (-1)*(Low-Fristprice)/N;        
        }

        If(Profit > EarnAtrRatio)
        {
                PlotBool("Hello ",True);
        }
        
        If(MarketPosition==1 AND Profit > EarnAtrRatio and Low<ExistLline   )
        {
         Sell(0,Min(Open,low));
        }

        If(MarketPosition==-1 AND Profit>EarnAtrRatio and High>ExistHline  )
        {
         BuyToCover(0,Max(Open,high));
        }                 
End
取消了增仓的代码,固定只开一手单,5分钟周期回测出来的图形不好看。还不如DualThrust来得好。
页: [1]
查看完整版本: 请各位高手帮我看看模型能否用于实盘