加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

交易开拓者TradeBlazer跟踪止损

(2020-01-09 21:34:51)
跟踪止损
跟踪止损有很多种方式,本模板的规则如下:当盈利达到50 跳之后启动第一级跟踪止损,止损的
回撤值为30 跳;当盈利达到80 跳之后启动第二级的跟踪止损,止损的回撤值为20 跳。您也可以
将这些固定的设置修改为盈利百分比,或者是某个价格的百分比。
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) // 条件满足:开仓Bar
{
HighestAfterEntry = Close;
LowestAfterEntry = Close; // 赋初值为当前最新价格
If(MarketPosition <> 0) // 有持仓时执行以下代码
{
HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); // 开仓Bar,将开仓价
和当时的收盘价的较大值保留到HighestAfterEntry
LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 开仓Bar,将开仓价和
当时的收盘价的较小值保留到LowestAfterEntry
}
}Else // 非开仓Bar 时进行以下运算
{
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 And BarsSinceEntry >= 1) // 有多仓的情况
{
If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint) // 第二级跟踪止损的
条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)
{
MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar 开盘价即跳空触发,
则用开盘价代替
Sell(0,MyExitPrice);
}
}Else If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint) // 第一级跟踪
止损的条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
{
MyExitPrice = HighestAfterEntry[1] - 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 And BarsSinceEntry >= 1) // 有空仓的情况
{
If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint) // 第二级跟踪止损的
条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
{
MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar 开盘价即跳空
触发,则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}Else If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止
损的条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
{
MyExitPrice = LowestAfterEntry[1] + 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
注意事项:
因无法确认开仓Bar 最高价、最低价和开仓价的先后顺序,因此以上写法一般忽略开仓Bar 的处理。
如果某个Bar 最高价、最低价相差很大,可能出现创新高之后跟踪止损的情况,但系统无法确认最
高价和最低价的先后顺序,因此本模板只用前一个Bar 的最高价、最低价计算最大赢利位置。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有