查看: 697|回复: 0

TB均线上下轨突破,已加过滤

[复制链接]

507

主题

571

帖子

6649

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6649
星辰 发表于 2018-7-10 10:19:47 | 显示全部楼层 |阅读模式

Params
        Numeric PercentOfRange(0.55);//突破参数N
        Numeric Length1(12);
        Numeric Length2(13);
        Numeric L_StopLossSet(1.7);//多头止损比例
        Numeric S_StopLossSet(1.4);//空头止损比例
        Numeric L_TrailingStart(2.4);//多头止盈启动比例
        Numeric L_TrailingStop(0.9);//多头止盈回撤比例
        Numeric S_TrailingStart(1.2);//空头止盈启动比例
        Numeric S_TrailingStop(0.7);//空头止盈回撤比例
        Numeric Period(7);
        Numeric EfratioFliter(0.7);
        Numeric Lots(1);
        Numeric TradeLimit(2);//每天交易次数限制
Vars
        NumericSeries DayOpen;
        NumericSeries preDayRange;
        Numeric preDayHigh;
        Numeric preDayLow;
        Numeric UpperBand;
        Numeric LowerBand;
        NumericSeries Ma1;
        NumericSeries Ma2;
        NumericSeries HigherAfterEntry;
        NumericSeries LowerAfterEntry;
        Bool Ma_Long_Fliter;//均线多头过滤
        Bool Ma_Short_Fliter;//均线空头过滤
        BoolSeries EntCondL;
        BoolSeries EntCondS;
//=============计算市场效率值的变量============//       
        Numeric Noise(0);
        NumericSeries Signal(0);
        NumericSeries Diff(0);
        NumericSeries Efratio(0);
//===========================================//       
        Bool EFliterCondL;
        Bool EFliterCondS;
       
        Numeric MyPrice;
       
       
        NumericSeries TradeCountS;//交易次数
        Numeric EndTime(14.30);
        Numeric BeginTime(9.00);
        Bool TimeCond;
Begin
///////////////////////均线交叉过滤////////////////////////////////////
//均线金叉不做空 ,均线死叉不做多  且小均线在大均线才开多仓,反之才开空仓
          Ma1=Average(Close,Length1);
          Ma2=Average(Close,Length2);
          //PlotNumeric("Ma1",Ma1);
          //PlotNumeric("Ma2",Ma2);
          EntCondL=Ma1[1]>Ma2[1];
          EntCondS=Ma1[1]<Ma2[1];
          If(Ma1[1]<=Ma2[1]&&Ma1[2]>=Ma2[2]&&Ma1[1]<=Ma1[2]&&Ma2[1]<=Ma2[2])
        {
                Ma_Long_Fliter=False;
        }
          If(Ma1[1]>=Ma2[1]&&Ma1[2]<=Ma2[2]&&Ma1[1]>=Ma1[2]&&Ma2[1]>=Ma2[2])
        {
                Ma_Short_Fliter=False;
        }
//=======================计算市场效率=====================================
        Diff=Abs(Close-Close[1]);
        If(CurrentBar<=Period)
        {
                Return;
        }
        Else
        {
                Signal=Abs(Close-Close[Period]);
                Noise=Summation(Diff,Period);
                Efratio=Signal/Noise;
        }
        Commentary("Signal="+Text(Signal));
        Commentary("Noise="+Text(Noise));
        Commentary("Efratio="+Text(Efratio));
        EFliterCondL=Efratio[1]>=EfratioFliter;
        EFliterCondS=Efratio[1]>=EfratioFliter;
//////////////计算上下轨///////////////////////////////////////////////////////////////               
      preDayHigh=HighD(1);
      preDayLow=LowD(1);
      //preDayRange=HighD(1)-LowD(1);
     If(Date!=Date[1])
     {
          DayOpen=Open;
          TradeCountS=0;
      preDayRange=preDayHigh-preDayLow;
      /*If(preDayRange<DayOpen*MinRange*0.01)
         PreDayRange=DayOpen*MinRange*0.01;
          If(preDayRange>DayOpen*MaxRange*0.01)
                preDayRange=DayOpen*MaxRange*0.01;
                 */
      }
          Else
      {
       DayOpen=DayOpen[1];
       preDayRange=preDayRange[1];
           TradeCountS=TradeCountS[1];
          }
          UpperBand=DayOpen+preDayRange*PercentOfRange;
      LowerBand=Dayopen-preDayRange*PercentOfRange;
          PlotNumeric("上轨",UpperBand);
          PlotNumeric("下轨",LowerBand);

          TimeCond=Time>=BeginTime/100&&Time<=EndTime/100;//交易时间限制
          
///////////////////////////////进场//////////////////////////////////////////////////////                  
     If(MarketPosition==0&&High>=UpperBand&&EntCondL&&TimeCond&&TradeCountS<TradeLimit&&EFliterCondL)
     {
              Myprice=UpperBand;
              If(Open>Myprice)Myprice=Open;
              Buy(Lots,Myprice);
                          TradeCountS=TradeCountS+1;
                          Commentary("TradeCounts="+Text(TradeCountS));
                          Commentary("做多条件");
               
      }
      If(MarketPosition==0&&Low<=LowerBand&&EntCondS&&TimeCond&&TradeCountS<TradeLimit&&EFliterCondS)
     {
              Myprice=LowerBand;
              If(Open<Myprice)Myprice=Open;
              Sellshort(Lots,Myprice);
                          TradeCountS=TradeCountS+1;
              Commentary("TradeCounts="+Text(TradeCountS));
                          Commentary("做多条件");
               
      }
//============================================================================
//要实现跟踪止盈(这里采用回撤值的方法),需要记录建仓后的出现的最高价、最低价
//============================================================================
        If(MarketPosition!=0 And barssinceentry==0)
        {
           HigherAfterEntry=High;
           LowerAfterEntry=Low;
         }
        If(MarketPosition!=0 And barssinceentry>0)
         {
           HigherAfterEntry=Max(HigherAfterEntry[1],High);
           LowerAfterEntry=Min(LowerAfterEntry[1],Low);
         }
           Commentary("HigherAfterEntry="+Text(HigherAfterEntry));
           Commentary("lowerAfterEntry="+Text(LowerAfterEntry));
//============================================================================
//跟踪止盈 、止损
//=========================================================================
        If(MarketPosition==1 And BarsSinceEntry>0)
{
       
         If(EntryPrice-Low>=L_StopLossSet*EntryPrice/100)
        {
                Myprice=Min(Open,EntryPrice-L_StopLossSet*EntryPrice/100);
                Sell(Lots,Myprice);
                Commentary("多头止损离场");
        }
       
        Else If(HigherAfterEntry[1]>=EntryPrice+L_TrailingStart*EntryPrice/100)//多头跟踪止盈启动
        {
                If(Low<=HigherAfterEntry[1]-L_TrailingStop*EntryPrice/100)
                {
                   MyPrice=Min(open,HigherAfterEntry[1]-L_TrailingStop*EntryPrice/100);
                   Sell(Lots,MyPrice);
                   Commentary("多头回撤止盈");
                }
        }
}
        If(MarketPosition==-1 And BarsSinceEntry>0)  
{
       
         If(High-EntryPrice>=S_StopLossSet*EntryPrice/100)
        {
                Myprice=Max(Open,EntryPrice+S_StopLossSet*EntryPrice/100);
                BuyToCover(lots,Myprice);
                Commentary("空头止损离场");
        }
        Else If(LowerAfterEntry[1]<=EntryPrice-S_TrailingStart*EntryPrice/100)//空头跟踪止盈启动
        {
                If(High>=LowerAfterEntry[1]+S_TrailingStop*EntryPrice/100)
                {
                        MyPrice = Max(open,LowerAfterEntry[1]+S_TrailingStop*EntryPrice/100);
                        BuyToCover(Lots,MyPrice);
                        Commentary("空头回撤止盈");
                        }
        }
}
End



回复

使用道具 举报

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

本版积分规则

发表主题
    6649
    积分
    571
    帖子
    507
    主题
快速回复 返回顶部 返回列表