欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - expert for MetaTrader 5

author emer | 361 人阅读 | 0 人评论 |

Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - expert for MetaTrader 5

无论您是否使用止损,此代码块都有效。 

要求 

#包括<贸易\贸易.mqh>// <<-------------------------------------------------------- 包含此“Trade.mqh”以访问 CTrade 类
输入 双倍的追踪步长 =3.0;
  • 您需要定义实例贸易网班级。该名称可以是任何名称。最好是饭后吃OnInt事件处理程序。

  • 然后你需要创建一个 if 语句 检查当前是否有仓位正在运行。该声明呼吁 Check_TrailingStop(); 函数为 每一个刻度。这很重要,因为 EA 应该跟踪它 锋利而光滑。请记住将此声明放在 OnTick 事件处理程序的顶部 才能正常工作。
//+------------------------------------------------------------------+
//|专家初始化函数                                   |
//+------------------------------------------------------------------+
整数 初始化时()
  {//--- 创建计时器  事件设置定时器60);//---  返回初始化成功);
  }

CTrade 贸易;// <<-------------------------------------------------------- 声明“CTrade”类。你可以替换“交易”赢得任何你想要的名字
空白 勾选()
  {
   
  如果持仓总数() >0// 如果有仓位在运行,则为每个价格变动调用追踪止损函数。     {
      Check_TralingStop(); 
     } 
     
       
  }
空白Check_TralingStop()
  {
  整数总仓位 =持仓总数();
  为了整数计数 =0;计数 < 总持仓数;计数++)
     {
      乌龙票号 =位置获取门票(数数);// 使用仓位的“索引”获取仓位单号。      如果位置按票选择(票号))// 使用票号选择仓位(我们已经选择了票号)        {
        如果位置获取整数位置类型) ==POSITION_TYPE_BUY// 检查仓位类型。           {
            双倍的开盘价 =位置获得双倍POSITION_PRICE_OPEN);
            双倍的止损 =位置获得双倍位置_SL);      // <<--------------------获取仓位当前止损            双倍的获利=位置获得双倍POSITION_TP);
            双倍的出价价格=符号信息双_象征,SYMBOL_BID);
            乌龙票=位置获取门票(数数);
            双倍的尾随级别 =规范化双精度(出价 - (Traling_Step *观点()),_数字);

            如果(止损<开仓价格)// 没有止损是正确的。              {
              如果(出价 > 开盘价格 && 尾随水平 > 开盘价格)// Runs only once per position. Sets the first SL.                  trade.PositionModify(票据、跟踪水平、获利);// 使用“CTrade.trade”修改追踪止损              }

            如果(bidPrice > openPrice && trailingLevel > stopLoss) // check trailing level is above the previos level.              {
               trade.PositionModify(票据、跟踪水平、获利);// 使用“CTrade.trade”修改追踪止损              }

           }
        如果位置获取整数位置类型) ==POSITION_TYPE_SELL)
           {
            双倍的开盘价 =位置获得双倍POSITION_PRICE_OPEN);
            双倍的止损 =位置获得双倍位置_SL);
            双倍的获利=位置获得双倍POSITION_TP);
            双倍的出价价格=符号信息双_象征,SYMBOL_BID);
            双倍的询问价格 =符号信息双_象征,SYMBOL_ASK);
            乌龙票=位置获取门票(数数);
            双倍的尾随级别 =规范化双精度(要价 + (Traling_Step *观点()),_数字);

            如果(止损<开仓价格)// 没有止损是正确的。              {
              如果(askPrice < openPrice && TrailingLevel < openPrice)// 每个位置仅运行一次。设置第一个 SL。                  trade.PositionModify(票据、跟踪水平、获利);// 使用“CTrade.trade”修改追踪止损              }

            如果(askPrice < openPrice && TrailingLevel < stopLoss)// 检查尾随水平是否高于先前水平。              {
               trade.PositionModify(票据、跟踪水平、获利);// 使用“CTrade.trade”修改追踪止损              }
           }

        }
     }
  }



附件下载

📎 traling_stop_vwhen_sl_used_and_noth.mq5(5.87 KB)

Source: MQL5 #49021

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录