原始跟踪止损止盈策略有个问题,想咨询下
VarsNumeric 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 。
因为判断是否会跟踪出场的条件是:
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]