新浪博客

开拓者TB的RangeBreak交易模型源码[开拓者公式]

2022-03-11 21:21阅读:
  • 日内效果不如隔日来得好
    Params
    Numeric PercentOfRange(0.5); //突破系数
    Numeric ExitOnCloseMins(14.55); //最后交易时间
    Numeric MinRange(0.002); //开盘价的百分比
    Numeric Lots(1); //开仓量
    Vars
    Numeric MyExitPrice;
    Numeric DayOpen;
    Numeric preDayRange;
    Numeric UpperBand; //上轨
    Numeric LowerBand; //下轨
    Numeric MyPrice;
    Begin
    DayOpen = OpenD(0);
    preDayRange = HighD(1)-LowD(1);
//昨日波幅
PreDayRange = Max(PreDayRange,DayOpen*MinRange);
UpperBand = DayOpen+PreDayRange*PercentOfRange; //求出上轨
LowerBand = DayOpen-PreDayRange*PercentOfRange; //求出下轨
PlotNumeric('UpperBand',UpperBand);
PlotNumeric('LowerBand',LowerBand);



If(MarketPosition!=1 && High>=UpperBand && Time
{
MyPrice = Max(UpperBand,Open);
Buy(Lots,MyPrice);
Return;

}
If(MarketPosition!=-1 && Low<=LowerBand &&Time
{
MyPrice = Min(LowerBand,Open);
SellShort(Lots,MyPrice);
Return;
}
If( MarketPosition==1 && Low
{
MyExitPrice=Min(Open,LowerBand);
Sell(Lots,MyExitPrice);
Return;

}
If( MarketPosition==-1 && High>UpperBand) //空头中如果上穿上轨止损
{
MyExitPrice=Max(Open,UpperBand);
BuytoCover(Lots,MyExitPrice);
Return;
}
End


  • 隔日情况下,允许二次开仓,可以提高盈利率
    Params
    Numeric PercentOfRange(0.5);
    Numeric ExitOnCloseMins(14.50);
    Numeric MinRange(0.002);
    Numeric Lots(1);
    Numeric StopPointUpper(1);
    Numeric StopPointLower(1);
    Numeric Length(12);
    Numeric TakeStart(0.1);
    Numeric TakeStop(0.5);
    Vars
    Numeric LastTradeMins(14.00);
    NumericSeries Ma;
    Numeric MyExitPrice;
    Numeric DayOpen;
    Numeric preDayRange;
    Numeric UpperBand;
    Numeric LowerBand;
    Numeric MyPrice;
    Numeric StopLine;
    BoolSeries UpperStoped;
    BoolSeries LowerStoped;
    NumericSeries HigherAfterEntry;
    NumericSeries LowerAfterEntry;
    String BoolSet;
    Begin
    Ma=Average(Close,Length);
    DayOpen = OpenD(0);
    preDayRange = HighD(1)-LowD(1);
    PreDayRange = Max(PreDayRange,DayOpen*MinRange);
    Commentary('DayOpen='+Text(DayOpen));
    Commentary('preDayRange='+Text(preDayRange));
    UpperBand = DayOpen+PreDayRange*PercentOfRange;
    LowerBand = DayOpen-PreDayRange*PercentOfRange;
    Commentary('UpperBand='+Text(DayOpen+PreDayRange*PercentOfRange));
    Commentary('UpperBand='+Text(DayOpen-PreDayRange*PercentOfRange));
    PlotNumeric('UpperBand',UpperBand);
    PlotNumeric('LowerBand',LowerBand);


    If(Date!=Date[1])
    {
    UpperStoped=True;
    LowerStoped=True;
    }

    If(UpperStoped && LowerStoped)
    {
    If(MarketPosition!=1 && High>=UpperBand && Time
    {
    MyPrice = Max(UpperBand,Open);
    Buy(Lots,MyPrice);
    UpperStoped=False;
    Return;

    }
    }
    If(!UpperStoped)
    {
    If(MarketPosition!=1 && High>=UpperBand && High>=HigherAfterEntry && Time
    {
    MyPrice = Max(UpperBand,Open);
    MyPrice = Max(HigherAfterEntry,MyPrice);
    Buy(Lots,MyPrice);
    PlotString('二次建仓','二次建仓');
    Return;
    }

    If(LowerStoped && MarketPosition==1 && Low<=LowerBand && Time
    {
    MyPrice = Min(LowerBand,Open);
    Sell(Lots,MyPrice);
    LowerStoped=False;
    PlotString('反向建仓','反向建仓');
    Return;

    }

    }


    If(UpperStoped && LowerStoped)
    {
    If(MarketPosition!=-1 && Low<=LowerBand &&Time<=ExitOnCloseMins/100)
    {
    MyPrice = Min(LowerBand,Open);
    SellShort(Lots,MyPrice);
    LowerStoped=False;
    Return;

    }
    }
    If(!LowerStoped)
    {
    If(MarketPosition!=-1 && Low<=LowerBand && Low<=LowerAfterEntry &&Time
    {
    MyPrice = Min(LowerBand,Open);
    MyPrice = Min(LowerAfterEntry,MyPrice);
    SellShort(Lots,MyPrice);
    PlotString('二次建仓','二次建仓');
    Return;
    }

    If(UpperStoped && MarketPosition==-1 && High>=UpperBand && Time
    {
    MyPrice = Max(UpperBand,Open);
    BuyToCover(Lots,MyPrice);
    UpperStoped=False;
    PlotString('反向建仓','反向建仓');
    Return;

    }


    }
    End


  • 加入反向平仓和二次建仓 RU000 5分测试效果如图,如果做得更细一些的话会有更好的效果 15分上效果更好一些


  • 加入动态止盈和止损
    Params
    Numeric PercentOfRange(0.5);
    Numeric ExitOnCloseMins(14.50);
    Numeric MinRange(0.002);
    Numeric Lots(1);
    Numeric StopPointUpper(1);
    Numeric StopPointLower(1);
    Numeric Length(12);
    Numeric TakeStart(0.1);
    Numeric TakeStop(0.5);
    Vars
    Numeric LastTradeMins(14.00);
    NumericSeries Ma;
    Numeric MyExitPrice;
    Numeric DayOpen;
    Numeric preDayRange;
    Numeric UpperBand;
    Numeric LowerBand;
    Numeric MyPrice;
    Numeric StopLine;
    BoolSeries UpperStoped;
    BoolSeries LowerStoped;
    NumericSeries HigherAfterEntry;
    NumericSeries LowerAfterEntry;
    String BoolSet;
    Begin
    Ma=Average(Close,Length);
    DayOpen = OpenD(0);
    preDayRange = HighD(1)-LowD(1);
    PreDayRange = Max(PreDayRange,DayOpen*MinRange);
    Commentary('DayOpen='+Text(DayOpen));
    Commentary('preDayRange='+Text(preDayRange));
    UpperBand = DayOpen+PreDayRange*PercentOfRange;
    LowerBand = DayOpen-PreDayRange*PercentOfRange;
    Commentary('UpperBand='+Text(DayOpen+PreDayRange*PercentOfRange));
    Commentary('UpperBand='+Text(DayOpen-PreDayRange*PercentOfRange));
    PlotNumeric('UpperBand',UpperBand);
    PlotNumeric('LowerBand',LowerBand);


    If(Date!=Date[1])
    {
    UpperStoped=True;
    LowerStoped=True;
    }

    If(UpperStoped && LowerStoped)
    {
    If(MarketPosition!=1 && High>=UpperBand && Time
    {
    MyPrice = Max(UpperBand,Open);
    Buy(Lots,MyPrice);
    UpperStoped=False;
    Return;

    }
    }
    If(!UpperStoped)
    {
    If(MarketPosition!=1 && High>=UpperBand && High>=HigherAfterEntry && Time
    {
    MyPrice = Max(UpperBand,Open);
    MyPrice = Max(HigherAfterEntry,MyPrice);
    Buy(Lots,MyPrice);
    PlotString('二次建仓','二次建仓');
    Return;
    }

    If(LowerStoped && MarketPosition==1 && Low<=LowerBand && Time
    {
    MyPrice = Min(LowerBand,Open);
    Sell(Lots,MyPrice);
    LowerStoped=False;
    PlotString('反向建仓','反向建仓');
    Return;

    }

    }


    If(UpperStoped && LowerStoped)
    {
    If(MarketPosition!=-1 && Low<=LowerBand &&Time<=ExitOnCloseMins/100)
    {
    MyPrice = Min(LowerBand,Open);
    SellShort(Lots,MyPrice);
    LowerStoped=False;
    Return;

    }
    }
    If(!LowerStoped)
    {
    If(MarketPosition!=-1 && Low<=LowerBand && Low<=LowerAfterEntry &&Time
    {
    MyPrice = Min(LowerBand,Open);
    MyPrice = Min(LowerAfterEntry,MyPrice);
    SellShort(Lots,MyPrice);
    PlotString('二次建仓','二次建仓');
    Return;
    }

    If(UpperStoped && MarketPosition==-1 && High>=UpperBand && Time
    {
    MyPrice = Max(UpperBand,Open);
    BuyToCover(Lots,MyPrice);
    UpperStoped=False;
    PlotString('反向建仓','反向建仓');
    Return;

    }


    }
    If(MarketPosition<>0 && BarsSinceEntry==1)
    {
    HigherAfterEntry=AvgEntryPrice;
    LowerAfterEntry=AvgEntryPrice;
    }
    Else If(BarsSinceEntry>1)
    {
    HigherAfterEntry=Max(HigherAfterEntry,High[1]);
    LowerAfterEntry=Min(LowerAfterEntry,Low[1]);
    }
    Commentary('HigherAfterEntry'+Text(HigherAfterEntry));
    Commentary('LowerAfterEntry'+Text(LowerAfterEntry));
    If(MarketPosition==1)
    {
    If(HigherAfterEntry>=AvgEntryPrice+DayOpen*TakeStart*0.01)
    {

    StopLine=HigherAfterEntry-DayOpen*TakeStop*0.01;
    Commentary('StopLineHigherAftetEntry'+Text(StopLine));
    }
    Else

    {

    StopLine=UpperBand-DayOpen*StopPointUpper*0.01;
    Commentary('StopLine'+Text(StopLine));
    }

    If(Low<=StopLine)
    {
    MyExitPrice=Min(StopLine,Open);
    Sell(Lots,MyExitPrice);

    }


    }




    If(MarketPosition==-1)
    {
    If(LowerAfterEntry<=AvgEntryPrice-DayOpen*TakeStart*0.01)
    {
    StopLine=LowerAfterEntry+DayOpen*TakeStop*0.01;
    Commentary('StopLineLowerAfterEntry'+Text(StopLine));
    }
    Else
    {
    StopLine=LowerBand+DayOpen*StopPointLower*0.01;
    Commentary('StopLine'+Text(StopLine));
    }
    If(High>=StopLine)
    {
    MyExitPrice=Max(StopLine,Open);
    BuyToCover(Lots,MyExitPrice);
    }

    }
    End

我的更多文章

下载客户端阅读体验更佳

APP专享