设为首页 收藏本站 切换语言

MT4进阶到MT5速成之路,修改和删除挂单

| 发表于 2022-11-15 11:32:55 | 显示全部楼层 |复制链接
一、首先我们来看下修改订单函数
  1. int OrderModify(ulong ticket,double tpp,double slp)
  2.   {
  3. //--- 准备请求
  4.    MqlTradeRequest request= {};
  5.    request.action=TRADE_ACTION_SLTP;         // 设置
  6. //  request.symbol=symbol;
  7. //  request.type = type;
  8.    request.position =ticket;
  9.    request.sl=slp;  // 止损价
  10.    request.tp=tpp;  // 止盈价
  11. //--- 发送交易请求
  12.    MqlTradeResult result= {0};
  13.    bool res=OrderSend(request,result);
  14.    if(!res)
  15.       msgbox(GetLastError());
  16.    return(0);
  17.   }
复制代码


需要注意的是结构体request的元素action的值应该是TRADE_ACTION_SLTP
request.action=TRADE_ACTION_SLTP;
如何使用以上函数来修改订单的止损止盈呢?看例子,跟MT4很相似。
  1. for(int i=0; i<PositionsTotal(); i++)
  2.      {
  3.       ulong ticket=PositionGetTicket(i);
  4.       string ordsymbol = PositionGetString(POSITION_SYMBOL);
  5.       string ordcom = PositionGetString(POSITION_COMMENT);
  6.       long ordmagic = PositionGetInteger(POSITION_MAGIC);
  7.       double ordslp = PositionGetDouble(POSITION_SL);
  8.       double ordtpp = PositionGetDouble(POSITION_TP);
  9.       double ordoop = PositionGetDouble(POSITION_PRICE_OPEN);
  10.       long ordtype = PositionGetInteger(POSITION_TYPE);
  11.       double ordlot = PositionGetDouble(POSITION_VOLUME);
  12.       double ordcp  = PositionGetDouble(POSITION_PRICE_CURRENT);
  13.       if(ordsymbol==Symbol() && PositionGetInteger(POSITION_MAGIC)==magic)
  14.         {
  15.          if(ordtype==POSITION_TYPE_BUY)
  16.            {
  17.             if(ordslp+ordtpp==0)
  18.               {
  19.                if(ordcp-ordoop>0)
  20.                  {
  21.                   ordslp=ordoop-2;
  22.                  }
  23.                else
  24.                  {
  25.                   ordtpp=ordoop+2;
  26.                  }
  27.                OrderModify(ticket,ordtpp,ordslp);
  28.               }
  29.            }
  30.          if(ordtype==POSITION_TYPE_SELL)
  31.            {
  32.             if(ordslp+ordtpp==0)
  33.               {
  34.                if(ordcp-ordoop<0)
  35.                  {
  36.                   ordslp=ordoop+2;
  37.                  }
  38.                else
  39.                  {
  40.                   ordtpp=ordoop-2;
  41.                  }
  42.                OrderModify(ticket,ordtpp,ordslp);
  43.               }
  44.            }
  45.         }
  46.      }
复制代码

二、删除挂单则需要注意结构体request的元素action的值应该是TRADE_ACTION_REMOVE

删除挂单函数如下:

  1. void OrderDelete(ulong ticket)
  2.   {
  3.    MqlTradeRequest request= {};
  4.    request.action=TRADE_ACTION_REMOVE;         // 设置
  5.    request.order =ticket;
  6. //--- 发送交易请求
  7.    MqlTradeResult result= {0};
  8.    bool res=OrderSend(request,result);
  9.    if(!res)
  10.       msgbox(GetLastError());
  11.   }
复制代码

使用的例子,还是跟MT4一样,需要用for循环遍历所有挂单

  

  1. ulong    ticket=0;
  2.    double   open_price;
  3.    double   initial_volume;
  4.    datetime time_setup;
  5.    string   symbol;
  6.    string   type;
  7.    long     order_magic;
  8.    int bg=0;
  9.    int sg=0;
  10.    for(int i=0; i<OrdersTotal(); i++)
  11.      {
  12.       //--- 通过列表中的仓位返回订单报价
  13.       ticket=OrderGetTicket(i);
  14.       //--- 返回订单属性
  15.       open_price    =OrderGetDouble(ORDER_PRICE_OPEN);
  16.       time_setup    =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
  17.       symbol        =OrderGetString(ORDER_SYMBOL);
  18.       order_magic   =OrderGetInteger(ORDER_MAGIC);
  19.       // positionID    =OrderGetInteger(ORDER_POSITION_ID);
  20.       initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
  21.       type          =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
  22.       string ordcom=OrderGetString(ORDER_COMMENT);
  23.       if(symbol==Symbol() && order_magic==magic)
  24.         {
  25.           OrderDelete(ticket);
  26.         }
  27.    
  28.      }
复制代码
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论2

qwe963258
DDD
| 发表于 2022-11-16 09:16:25 | 显示全部楼层
又复习一遍了
举报

点赞 评论 使用道具

ken138888
B
| 发表于 2022-11-16 20:40:33 | 显示全部楼层
好多if喔
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

天眼云VPS
简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)