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
