路路发智能交易研发中心

 找回密码
 立即注册
查看: 2023|回复: 0

TB编程教程 跟踪止损

[复制链接]

管理员

MT4软件工程师

Rank: 9Rank: 9Rank: 9

积分
6521
帖子
2771
主题
2761
QQ
发表于 2015-5-9 19:20:33 | 显示全部楼层 |阅读模式
TB编程教程 跟踪止损
跟踪止损有很多种方式,本模板的规则如下:当盈利达到50跳之后启动第一级跟踪止损,止损的回撤值为30跳,当盈利达到80跳之后启动第二级的跟踪止损,止损的回撤值为20跳。您也可以将这些固定的设置修改为盈利百分比,或者是某个价格的百分比。
  1. Vars
  2.     Numeric MinPoint;           // 一个最小变动单位,也就是一跳
  3.     Numeric MyEntryPrice;       // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
  4.     Numeric TrailingStart1(50); // 跟踪止损启动设置1
  5.     Numeric TrailingStart2(80); // 跟踪止损启动设置2
  6.     Numeric TrailingStop1(30);  // 跟踪止损设置1
  7.     Numeric TrailingStop2(20);  // 跟踪止损设置2
  8.     Numeric StopLossSet(50);    // 止损设置
  9.     Numeric MyExitPrice;        // 平仓价格

  10.     NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
  11.     NumericSeries LowestAfterEntry;         // 开仓后出现的最低价
  12. Begin
  13.     ...
  14.     If(BarsSinceentry == 0)
  15.     {
  16.         HighestAfterEntry = Close;
  17.         LowestAfterEntry = Close;
  18.         If(MarketPosition <> 0)
  19.         {
  20.             HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);   // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
  21.             LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);     // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
  22.         }
  23.     }else
  24.     {
  25.         HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
  26.         LowestAfterEntry = Min(LowestAfterEntry,Low);    // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
  27.     }

  28.     Commentary("HighestAfterEntry="+Text(HighestAfterEntry));
  29.     Commentary("LowestAfterEntry="+Text(LowestAfterEntry));

  30.     MinPoint = MinMove*PriceScale;
  31.     MyEntryPrice = AvgEntryPrice;
  32.     If(MarketPosition==1) // 有多仓的情况
  33.     {
  34.         If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint)   // 第二级跟踪止损的条件表达式
  35.         {
  36.             If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)
  37.             {
  38.                 MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;
  39.                 If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
  40.                 Sell(0,MyExitPrice);
  41.             }
  42.         }else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
  43.         {
  44.             If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
  45.             {
  46.                 MyExitPrice = HighestAfterEntry[1] - TrailingStop1*MinPoint;
  47.                 If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
  48.                 Sell(0,MyExitPrice);
  49.             }
  50.         }else if(Low <= MyEntryPrice - StopLossSet*MinPoint)//可以在这里写上初始的止损处理
  51.         {
  52.             MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
  53.             If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
  54.             Sell(0,MyExitPrice);
  55.         }
  56.     }else if(MarketPosition==-1) // 有空仓的情况
  57.     {
  58.         If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint)   // 第二级跟踪止损的条件表达式
  59.         {
  60.             If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
  61.             {
  62.                 MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint;
  63.                 If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
  64.                 BuyToCover(0,MyExitPrice);
  65.             }
  66.         }else if(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
  67.         {
  68.             If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
  69.             {
  70.                 MyExitPrice = LowestAfterEntry[1] + TrailingStop1*MinPoint;
  71.                 If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
  72.                 BuyToCover(0,MyExitPrice);
  73.             }
  74.         }else If(High >= MyEntryPrice + StopLossSet*MinPoint)//可以在这里写上初始的止损处理
  75.         {
  76.             MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;
  77.             If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
  78.             BuyToCover(0,MyExitPrice);
  79.         }
  80.     }
  81.     ...
  82. End
复制代码

注意事项:
  • 因无法确认开仓Bar最高/低价和开仓价的先后顺序,因此以上写法一般忽略开仓Bar的处理。
  • 如果某个Bar最高/低价相差很大,可能出现创新高之后跟踪止损的情况,但系统无法确认最高价和最低价的先后顺序,因此本模板只用前一个Bar的最高/低价计算最大赢利位置。



外汇智能交易,成就财富梦想!
回复

使用道具 举报

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

本版积分规则


MT4编程培训|EA定制开发|QQ在线咨询|路路发智能交易研发中心

GMT+8, 2025-1-7 05:46 , Processed in 0.150740 second(s), 27 queries .

© 2009-2022 520EA.com EA668.com

快速回复 返回顶部 返回列表