设为首页收藏本站

 找回密码
 注册
查看: 1574|回复: 3

请各位高手帮我看看模型能否用于实盘 [复制链接]

Rank: 1

精华
0
UID
274370
积分
2
帖子
1
主题
1
阅读权限
10
注册时间
2019-1-3
最后登录
2019-1-7
发表于 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[1] and high==low) Return;
         
// 0. 准备工作------------------------------------------------------------------------
        Minpoint = MinMove*PriceScale;
        atr = AvgTrueRange(length_B);
        N  = atr[1];
        Lots = (myasset*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
        Lots = IntPart(Lots); // 对小数取整
       
        Hline_B = Highest(H[1],length_B);                // 通道上轨
        Lline_B = Lowest(L[1],length_B);                // 通道下轨
        PlotNumeric("Hline_B",Hline_B);
        PlotNumeric("Lline_B",Lline_B);

        AveMa=Average(Close[1],MaLength);        // 均线
        PlotNumeric("AveMa",AveMa);         
         
// 1. 策略入场------------------------------------------------------------------------
        If( MarketPosition==0 AND Close>Hline_B  AND Close>(Close[5]+2*atr[1]))
        {
                        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[5]-2*atr[1]))
        {
            // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
            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[1]<AveMa[1] AND BarsSinceEntry>=5 )
                {
                        Sell(0,Open);
                }
               
        }

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

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

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

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

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

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

   
End


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

Rank: 1

精华
0
UID
274945
积分
26
帖子
18
主题
4
阅读权限
10
注册时间
2019-1-19
最后登录
2019-3-21
发表于 2019-2-1 12:14:01 |显示全部楼层
通用不是坏事哦

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
30248
积分
220
帖子
144
主题
23
阅读权限
40
注册时间
2011-3-24
最后登录
2022-2-22
发表于 2019-2-1 14:50:03 |显示全部楼层
// 1. 策略入场------------------------------------------------------------------------
        If( MarketPosition==0 AND Close>Hline_B  AND Close>(Close[5]+2*atr[1]))
这里用Close,信号会闪烁吧?

使用道具 举报

Rank: 4

精华
0
UID
243230
积分
560
帖子
139
主题
61
阅读权限
50
注册时间
2016-11-16
最后登录
2023-5-15
发表于 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[1] and high==low) Return;
         
// 0. 准备工作------------------------------------------------------------------------
        Minpoint = MinMove*PriceScale;
        atr = AvgTrueRange(length_B);
        N  = atr[1];
       // Lots = (myasset*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
        Lots = 1; //IntPart(Lots); // 对小数取整
        
        Hline_B = Highest(H[1],length_B);                // 通道上轨
        Lline_B = Lowest(L[1],length_B);                // 通道下轨
        PlotNumeric("Hline_B",Hline_B);
        PlotNumeric("Lline_B",Lline_B);

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

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

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

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

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

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

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

        If(MarketPosition==-1 AND Profit>EarnAtrRatio and High[1]>ExistHline[1]  )
        {
         BuyToCover(0,Max(Open,high[1]));
        }                 
End
取消了增仓的代码,固定只开一手单,5分钟周期回测出来的图形不好看。还不如DualThrust来得好。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-18 19:41

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部