ライブラリ: MT4Orders - ページ 90

 

なぜmetaquoteは古いコードを無効にするのですか?

2025.06.04 07:10:30.903 MetaQuotes Ltd.のターミナルMetaTrader 5 x64 build 5062が起動しました。


MT4Orders.mqh

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

なぜmetaquoteは古いコードを使い物にならなくするのか?

 
fxsaber ありがとう。
 
fxsaber #:

ありがとう!

 
fxsaber #:

アップデートをお願いします。

ありがとうございました。

ファイル:
MT4Orders2.png  87 kb
 
またエラーが発生しました。
ファイル:
Screenshot_1.png  117 kb
 
#define  MT4ORDERS_BYPASS_MAXTIME 1000000
#include <MT4Orders.mqh> //https://www.mql5.com/ja/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/ja/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-modeにおけるコンパイラの特殊性を考慮しました。