用MT5编写修改stop挂单小程序

 
void  Gua_ModifyOrders()
  {
//--- 声明并初始化交易请求和交易请求结果
   MqlTradeRequest Gua_Modify_request={1};
   MqlTradeResult  Gua_Modify_result={1};
   int Gua_Modify_total=OrdersTotal(); // 已下挂单的总数
//--- 重做所有已下的挂单
   for(int i=0; i<Gua_Modify_total; i++)
     {
      //--- 订单参数
      ulong  Gua_Modify_order_ticket=OrderGetTicket(i);                             // 订单编号
      string Gua_Modify_order_symbol=OrderGetString(ORDER_SYMBOL);                  // 交易品种
      int    Gua_Modify_digits=(int)SymbolInfoInteger(Gua_Modify_order_symbol,SYMBOL_DIGITS);  // 小数位数
      double Gua_Modify_point=SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_POINT);    // 订单point
      ulong  Gua_Modify_magic=OrderGetInteger(ORDER_MAGIC);                         // 订单的幻数
      double Gua_Modify_volume=OrderGetDouble(ORDER_VOLUME_CURRENT);                // 订单的当前交易量
      double Gua_Modify_sl=OrderGetDouble(ORDER_SL);                                // 订单的当前止损
      double Gua_Modify_tp=OrderGetDouble(ORDER_TP);                                // 订单的当前止赢
      ENUM_ORDER_TYPE Gua_Modify_type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // 订单类型
      double Gua_Modify_price_open     =OrderGetDouble(ORDER_PRICE_OPEN);           // 订单方位开盘价格
      string Gua_Modify_comment        =OrderGetString(ORDER_COMMENT);              // 订单注释
      double Gua_Modify_price;                                                      // 订单触动价
   /*  
      //--- 输出订单信息
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  Gua_Modify_order_ticket,
                  Gua_Modify_order_symbol,
                  EnumToString(Gua_Modify_type),
                  Gua_Modify_volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),Gua_Modify_digits),
                  DoubleToString(Gua_Modify_sl,Gua_Modify_digits),
                  DoubleToString(Gua_Modify_tp,Gua_Modify_digits),
                  Gua_Modify_magic);
      //--- 如果搜索到订单
   */  
      if(Gua_Modify_order_ticket>0  && StringToInteger(Gua_Modify_comment)>0 )
        {
         Gua_Modify_request.action=TRADE_ACTION_MODIFY;                           // 交易操作类型
         Gua_Modify_request.order = Gua_Modify_order_ticket;                            // 订单编号
         Gua_Modify_request.symbol   =Gua_Modify_order_symbol;                           // symbol
         Gua_Modify_request.deviation=5;                                          // 允许价格偏差
        //--- 根据持仓类型设置价格水平,订单的止损和止赢
         if(Gua_Modify_type==ORDER_TYPE_BUY_LIMIT)
           {
            if(SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_ASK) - Gua_Modify_price_open > bandwidth*Gua_Modify_point)
            {
            Gua_Modify_price = SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_ASK)-bandwidth*Gua_Modify_point;
            }
            else 
            {
            continue;
         // Gua_Modify_price = Gua_Modify_price_open;
            } 
            Gua_Modify_request.tp = NormalizeDouble(Gua_Modify_price+gua_tp*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.sl = NormalizeDouble(Gua_Modify_price-gua_sl*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.price    =NormalizeDouble(Gua_Modify_price,Gua_Modify_digits);                // 正常开盘价
           }
         else if(Gua_Modify_type==ORDER_TYPE_SELL_LIMIT)
           {
            if(Gua_Modify_price_open - SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_BID) > bandwidth*Gua_Modify_point)
            {
            Gua_Modify_price = SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_BID)+bandwidth*Gua_Modify_point;
            }
            else 
            {
            continue;
         //   Gua_Modify_price = Gua_Modify_price_open;
            }
            Gua_Modify_request.tp = NormalizeDouble(Gua_Modify_price-gua_tp*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.sl = NormalizeDouble(Gua_Modify_price+gua_sl*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.price    =NormalizeDouble(Gua_Modify_price,Gua_Modify_digits);                 // 正常开盘价
           }
         else if(Gua_Modify_type==ORDER_TYPE_BUY_STOP)
           {
            if(Gua_Modify_price_open - SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_ASK) > bandwidth*Gua_Modify_point)
            {
            Gua_Modify_price = SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_ASK)+bandwidth*Gua_Modify_point;
            }
            else 
            {
            continue;
         //   Gua_Modify_price = Gua_Modify_price_open;
            }
            Gua_Modify_request.tp = NormalizeDouble(Gua_Modify_price+gua_tp*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.sl = NormalizeDouble(Gua_Modify_price-gua_sl*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.price    =NormalizeDouble(Gua_Modify_price,Gua_Modify_digits);                 // 正常开盘价
           }
         else if(Gua_Modify_type==ORDER_TYPE_SELL_STOP)
           {
            if(SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_BID) - Gua_Modify_price_open > bandwidth*Gua_Modify_point)
            {
            Gua_Modify_price = SymbolInfoDouble(Gua_Modify_order_symbol,SYMBOL_BID)-bandwidth*Gua_Modify_point; 
            }
            else 
            {
            continue;
         //   Gua_Modify_price = Gua_Modify_price_open;
            }
            Gua_Modify_request.tp = NormalizeDouble(Gua_Modify_price-gua_tp*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.sl = NormalizeDouble(Gua_Modify_price+gua_sl*Gua_Modify_point,Gua_Modify_digits);
            Gua_Modify_request.price    =NormalizeDouble(Gua_Modify_price,Gua_Modify_digits);                 // 正常开盘价
           }
         //--- 发送请求
         if(!OrderSend(Gua_Modify_request,Gua_Modify_result))
            PrintFormat("Gua_Modify_OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码
         //--- 操作信息   
         PrintFormat("Gua_Modify_retcode=%u  Gua_Modify_deal=%I64u  Gua_Modify_order=%I64u",Gua_Modify_result.retcode,Gua_Modify_result.deal,Gua_Modify_result.order);
         //--- 归零请求和结果值
         ZeroMemory(Gua_Modify_request);
         ZeroMemory(Gua_Modify_result);
        }
     }

    }

 
【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
【新手必看】如何防止机器人误判:讨论代码时请使用代码表述功能
  • 2023.06.13
  • Sky All
  • www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能...
 
谢谢版主的解释。
 
greatsnail #:
谢谢版主的解释。

感谢理解