程序库: MT4Orders - 页 90

 

为什么MetaQuote会使旧代码失去作用?

2025.06.04 07:10:30.903 终端 MetaTrader 5 x64 build 5062 为 MetaQuotes Ltd. 启动。


MT4Orders.mqh

MT4Orders
MT4Orders
  • www.mql5.com
Parallel use of the MetaTrader 4 and MetaTrader 5 order systems.
 
Samuel Akinbowale #:

为什么元引号会使旧代码失去作用

 
fxsaber 谢谢,现在可以使用了
 
fxsaber #:

谢谢!

 
fxsaber #:

请更新。

非常感谢!现在一切正常了

附加的文件:
MT4Orders2.png  87 kb
 
再次出现错误,请更新至最新版本
附加的文件:
Screenshot_1.png  117 kb
 
#define  MT4ORDERS_BYPASS_MAXTIME 1000000
#include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006
#define  REPORT_TESTER 
#include < Report.mqh>

int OnInit ()
{
   return INIT_SUCCEEDED ;
}
void OnDeinit ( const int r) {

}

#define  Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
#define  Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnTick () {
   static const datetime BeginTime = TimeCurrent ();

   static const TICKET_TYPE Ticket3 = OrderSend ( _Symbol , OP_BUY, 1 , Ask, 0 , 0 , 0 );
   static const TICKET_TYPE Ticket4 = OrderSend ( _Symbol , OP_SELL, 1 , Bid, 0 , 0 , 0 );
   if ( OrdersTotal () && ( TimeCurrent () - BeginTime > 24 * 3600 )) {
    OrderCloseBy(Ticket3, Ticket4);
  }
   for ( int i = OrdersTotal (); i > 0 ; i--) {
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
     double comm = OrderCommission();
  }
}
//+------------------------------------------------------------------+

2025.07.04 19:08:24.215 2025.06.03 23:59:58"HashMap.mqh" (544.21) 中指针访问无效

发现一个错误:定义 MT4ORDERS_BYPASS_MAXTIME 宏并调用 OrderCommission(); 时,会在 EA 结束时调用 TRADESID 函数,从而导致错误。

如果取消选中 #define REPORT_TESTER 宏或 MT4ORDERS_BYPASS_MAXTIME 宏,错误就会消失。错误有可能出在报告中,但还不能确定。

 
hini #:

2025.07.04 19:08:24.215 2025.06.03 23:59:58对 "HashMap.mqh" 中指针的无效访问 (544.21)

感谢您的错误报告。原因是这样的


如果在有未结订单的账户上运行以下脚本,可以简单重现该错误。

#property script_show_inputs

input bool inFlag = true;

#define  MT4ORDERS_BYPASS_MAXTIME 1000000
#include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006

class A
{
public:  
  A() { if (OrderSelect(0, SELECT_BY_POS) && inFlag) OrderPrint(); }
  ~A() { OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY); }
} a;

void OnStart() {}
 
// 更改列表:
// 05.07.2025
// 修正:考虑到 ByPass 模式下编译器的特殊性。