Bibliotecas: MT4Orders - página 90

 

por que o metaquote torna inútil o código antigo

2025.06.04 07:10:30.903 Terminal MetaTrader 5 x64 build 5062 started for MetaQuotes Ltd.


MT4Orders.mqh

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

Por que a metaquote torna o código antigo inútil?

 
fxsaber obrigado, agora está funcionando
 
fxsaber #:

Obrigado!

 
fxsaber #:

Atualize, por favor.

Muito obrigado! Está tudo bem agora

Arquivos anexados:
MT4Orders2.png  87 kb
 
novamente erros, atualize para a versão mais recente em funcionamento
Arquivos anexados:
Screenshot_1.png  117 kb
 
#define  MT4ORDERS_BYPASS_MAXTIME 1000000
#include <MT4Orders.mqh> // https://www.mql5.com/pt/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 Acesso inválido ao ponteiro em "HashMap.mqh" (544.21)

Encontrei um erro: ao definir a macro MT4ORDERS_BYPASS_MAXTIME e chamar OrderCommission();, a função TRADESID é chamada no final do EA, o que causa um erro.

Se você desmarcar a macro #define REPORT_TESTER ou a macro MT4ORDERS_BYPASS_MAXTIME, o erro desaparecerá. É possível que o erro esteja no relatório, mas isso não é certo.

 
hini #:

2025.07.04 19:08:24.215 2025.06.03 23:59:58 Acesso inválido ao ponteiro em "HashMap.mqh" (544.21)

Obrigado pelo relatório de bug. O motivo é o seguinte.


Reprodução simples do erro se você executar o script a seguir em uma conta com ordens abertas.

#property script_show_inputs

input bool inFlag = true;

#define  MT4ORDERS_BYPASS_MAXTIME 1000000
#include <MT4Orders.mqh> // https://www.mql5.com/pt/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() {}
 
// Lista de modificações:
// 05.07.2025
// Correção: as peculiaridades do compilador no modo ByPass são levadas em consideração.