请教一个关于“保本止损”“移动止损”的问题 新评论 netnut_999 2025.10.20 06:53 我尝试通过如下代码实现 “保本止损”,应该在OrderModify之后就可以确保本订单不会亏损,为何在mt4策略测试时OrderModify之后仍会有亏损?请教各位老师!谢谢!! for(int j = OrdersTotal() - 1; j >= 0; j--) { if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()) { // 获取前P根K线的ATR值 double movingATR = iATR(NULL, 0, Q, P); if(OrderType() == OP_BUY) { //计算保本止损价:当盈利超过A倍ATR时,将止损移至保本点上方 if(Ask - OrderOpenPrice()> A*movingATR && (OrderStopLoss()<OrderOpenPrice()||OrderStopLoss() == 0)) { double buyStopLoss = MathMax(Ask +A*movingATR, OrderOpenPrice()); // 止损不低于开仓价 buyStopLoss = NormalizeDouble(buyStopLoss, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), buyStopLoss, OrderTakeProfit(), 0, clrNONE)) { Print("多单保本止损更新失败,错误代码: ", GetLastError()); } } //计算移动止损价 else { buyStopLoss = Ask - A * movingATR; //double buyTakeProfit = High[1] + B * movingATR; buyStopLoss = NormalizeDouble(buyStopLoss, Digits); //buyTakeProfit = NormalizeDouble(buyTakeProfit, Digits); // 确保新止损低于当前价格 if(buyStopLoss < Ask && buyStopLoss > 0) { // 只有新止损大于原止损且当前买价不亏损时才更新(向上移动止损) if(buyStopLoss > OrderStopLoss()&& Ask > OrderOpenPrice() || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), buyStopLoss, OrderTakeProfit(), 0, clrNONE)) { Print("多单移动止损更新失败,错误代码: ", GetLastError()); } } } } } ...... 退出策略。阶梯式止损与拖曳式止损 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 初学者的问题 MQL4 MT4 MetaTrader 4 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我尝试通过如下代码实现 “保本止损”,应该在OrderModify之后就可以确保本订单不会亏损,为何在mt4策略测试时OrderModify之后仍会有亏损?请教各位老师!谢谢!!
for(int j = OrdersTotal() - 1; j >= 0; j--)