jiujiuwang 发表于 2020-7-14 11:39:14

原始跟踪止损止盈策略有个问题,想咨询下

Vars
    Numeric MinPoint;           // 一个最小变动单位,也就是一跳
    Numeric MyEntryPrice;       // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
    Numeric TrailingStart1(50); // 跟踪止损启动设置1
    Numeric TrailingStart2(80); // 跟踪止损启动设置2
    Numeric TrailingStop1(30);  // 跟踪止损设置1
    Numeric TrailingStop2(20);  // 跟踪止损设置2
    Numeric StopLossSet(50);    // 止损设置
    Numeric MyExitPrice;        // 平仓价格
    NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
    NumericSeries LowestAfterEntry;         // 开仓后出现的最低价
Begin
    ...
    If(BarsSinceentry == 0)
    {
        HighestAfterEntry = Close;
        LowestAfterEntry = Close;
        If(MarketPosition <> 0)
        {
            HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);   // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
            LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);     // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
        }
    }else
    {
        HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
        LowestAfterEntry = Min(LowestAfterEntry,Low);    // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
    }
    Commentary("HighestAfterEntry="+Text(HighestAfterEntry));
    Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
    MinPoint = MinMove*PriceScale;
    MyEntryPrice = AvgEntryPrice;
    If(MarketPosition==1) // 有多仓的情况
    {
        If(HighestAfterEntry >= MyEntryPrice + TrailingStart2*MinPoint)   // 第二级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry - TrailingStop2*MinPoint)
            {
                MyExitPrice = HighestAfterEntry - TrailingStop2*MinPoint;
                If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                Sell(0,MyExitPrice);
            }
        }else if(HighestAfterEntry >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry - TrailingStop1*MinPoint)
            {
                MyExitPrice = HighestAfterEntry - TrailingStop1*MinPoint;
                If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                Sell(0,MyExitPrice);
            }
        }else if(Low <= MyEntryPrice - StopLossSet*MinPoint)//可以在这里写上初始的止损处理
        {
            MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
            If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            Sell(0,MyExitPrice);
        }
    }else if(MarketPosition==-1) // 有空仓的情况
    {
        If(LowestAfterEntry <= MyEntryPrice - TrailingStart2*MinPoint)   // 第二级跟踪止损的条件表达式
        {
            If(High >= LowestAfterEntry + TrailingStop2*MinPoint)
            {
                MyExitPrice = LowestAfterEntry + TrailingStop2*MinPoint;
                If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                BuyToCover(0,MyExitPrice);
            }
        }else if(LowestAfterEntry <= MyEntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(High >= LowestAfterEntry + TrailingStop1*MinPoint)
            {
                MyExitPrice = LowestAfterEntry + TrailingStop1*MinPoint;
                If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                BuyToCover(0,MyExitPrice);
            }
        }else If(High >= MyEntryPrice + StopLossSet*MinPoint)//可以在这里写上初始的止损处理
        {
            MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;
            If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            BuyToCover(0,MyExitPrice);
        }
    }
    ...
End

举例:这个代码里为什么要 MyExitPrice = HighestAfterEntry - TrailingStop2*MinPoint
不能直接MyExitPrice = HighestAfterEntry - TrailingStop2*MinPoint  。

追涨杀跌 发表于 2020-7-14 18:17:04

因为判断是否会跟踪出场的条件是:
  If(Low <= HighestAfterEntry - TrailingStop1*MinPoint)
            {
                MyExitPrice = HighestAfterEntry - TrailingStop1*MinPoint;
                If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                Sell(0,MyExitPrice);
            }
注意这个Low <= HighestAfterEntry - TrailingStop1*MinPoint
那么如果用当前HighestAfterEntry的话,如果当前K线有个很低的最低价时,是不是有可能会触发跟踪出场,而实际不应该? 这些内容建议您找TB以前录制的培训视频看看吧,里面都会详细讲解到的。
页: [1]
查看完整版本: 原始跟踪止损止盈策略有个问题,想咨询下