该程序是一个用于删除订单的函数,函数名为f0_10,其中参数Ai_0默认值为-1。函数主要的流程如下:

  1. 刷新行情。

  2. 获取当前所有未平单的数量。

  3. 遍历所有未平单。

  4. 判断当前未平单是否符合要求,如果不符合,则直接跳过。

  5. 根据函数参数Ai_0的值,确定删除订单的类型。

  6. 如果成功删除订单,则记录日志,否则获取错误信息。

  7. 等待下一次交易允许。

  8. 刷新行情。

下面对程序中的关键代码进行详细解析:

  1. RefreshRates(); 该函数用于刷新当前行情,以获取最新的价格信息。由于该函数是一个MQL5自带的函数,因此不需要额外编写代码。

  2. int order_total_20 = OrdersTotal(); 该语句用于获取当前所有未平单的数量。OrdersTotal()是一个MQL5自带的函数,用于获取当前未平单的数量。

  3. for (int pos_8 = order_total_20 - 1; pos_8 >= 0; pos_8--) 该语句用于遍历所有未平单。pos_8是一个循环变量,从最后一个未平单开始遍历,直到第一个未平单。每次循环pos_8自减1。

  4. if (OrderSelect(pos_8, SELECT_BY_POS, MODE_TRADES) == TRUE) 该语句用于选择当前遍历到的未平单,并判断是否选择成功。OrderSelect()是一个MQL5自带的函数,用于选择未平单。其中,SELECT_BY_POS表示按照订单在队列中的位置选择订单,MODE_TRADES表示选择交易订单。

  5. if (AllSymbols == FALSE && OrderSymbol() != G_symbol_556) continue; 该语句用于判断当前未平单是否符合要求。其中,AllSymbols表示是否针对所有货币对进行操作,G_symbol_556表示指定的货币对。如果AllSymbols为FALSE且当前未平单的货币对不是G_symbol_556,则直接跳过当前循环,继续遍历下一个未平单。

  6. if (AllOrders == FALSE && OrderMagicNumber() != MagicNumber) continue; 该语句用于判断当前未平单是否符合要求。其中,AllOrders表示是否针对所有订单进行操作,MagicNumber表示指定的订单魔术数字。如果AllOrders为FALSE且当前未平单的魔术数字不是MagicNumber,则直接跳过当前循环,继续遍历下一个未平单。

  7. switch (Ai_0) 该语句用于根据函数参数Ai_0的值,确定删除订单的类型。如果Ai_0的值为-1,则删除所有未平的停止单和限价单;如果Ai_0的值为0,则只删除未平的止损买单和止盈卖单;如果Ai_0的值为1,则只删除未平的止损卖单和止盈买单。

  8. if (is_deleted_4 < 0) 该语句用于判断是否成功删除订单。如果is_deleted_4小于0,则表示删除失败,需要记录日志;否则表示删除成功,不需要记录日志。

  9. while (!IsTradeAllowed()) Sleep(100); 该语句用于等待下一次交易允许。IsTradeAllowed()是一个MQL5自带的函数,用于判断当前是否允许交易。如果当前不允许交易,则等待100毫秒后再次判断。

  10. RefreshRates(); 该语句用于刷新当前行情,以获取最新的价格信息。由于该函数是一个MQL5自带的函数,因此不需要额外编写代码。

订单删除函数f0_10:根据不同参数类型删除订单

原文地址: https://www.cveoy.top/t/topic/olWf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录