MT5 e la velocità in azione - pagina 34

 
fxsaber:

non è possibile cambiare la storia nel fine settimana, quindi non c'è modo di controllare.

Possibilmente. Ecco perché il problema è stato trovato nel fine settimana.

// Демонстрация лагов HistorySelect при удалении нескольких ордеров.
#property script_show_inputs

input int inAmount = 5; // Количество ордеров

#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/332/Benchmark.mqh
#define _B2(A) _B(A, 10)

// true - ордер есть в истории, false - иначе.
bool HistorySelectOrder( const ulong Ticket )
{
  return((HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) ||
         (_B2(HistorySelect(0, INT_MAX)) && (HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket)));
}

void OnStart()
{
  HistorySelect(0, INT_MAX); // Создали исторический кеш.
        
  MqlTradeRequest Request = {0};
  MqlTradeResult Result;
                        
  // Выставляем ордера
  Request.action = TRADE_ACTION_PENDING;
  Request.symbol = _Symbol;
  Request.volume = 0.01;
  Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - 1000 * _Point;
  Request.type = ORDER_TYPE_BUY_LIMIT;
        
  for (int i = 0; i < inAmount; i++)
    if (!OrderSend(Request, Result) || (Result.retcode != TRADE_RETCODE_DONE))
      Print("Good!");
            
  // Удаляем ордера
  Request.action = TRADE_ACTION_REMOVE;

  for (int i = OrdersTotal() - 1; i >= 0; i--)
  {
    Request.order = OrderGetTicket(i);

    if (OrderSend(Request, Result) && (Result.retcode == TRADE_RETCODE_DONE) &&
        !HistorySelectOrder(Request.order)) // Проверяем наличие удаленного ордера в истории.
      Print("OrderSend BUG!");
  }
}


Risultato.

2020.09.27 15:46:11.940 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 39 mсs.
2020.09.27 15:46:11.988 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 253 mсs.
2020.09.27 15:46:12.034 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 190 mсs.
2020.09.27 15:46:12.083 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 218 mсs.
2020.09.27 15:46:12.130 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 250 mсs.

Il ritardo (può arrivare a diversi millisecondi) dopo la cancellazione del secondo ordine.

 
Renat Fatkhullin:

Passa al conteggio dei microsecondi. I millisecondi non sono più appropriati.

Perché il server MT5 esegue gli ordini pendenti in 100-200 millisecondi? (presso un noto broker su A)

 
fxsaber:

Forse. Ecco perché è stato trovato un problema nel fine settimana.


Risultato.

Il ritardo (può arrivare fino a diversi millisecondi) dopo la cancellazione del secondo ordine.

La cancellazione degli ordini porta alla completa disabilitazione della cache della storia selezionata.

In modalità normale la velocità di campionamento della storia è stata portata a decine di microsecondi.

 
secret:

Perché il server MT5 esegue gli ordini pendenti in 100-200 millisecondi? (presso un noto broker su A)

Esegue o accetta?

Senza dettagli su N scambi (in modo da poter vedere l'intero quadro, non un singolo ordine strappato. compresi i ping) non si può discutere.

 
Renat Fatkhullin:

Cancellando gli ordini si disattiva completamente la cache della storia selezionata.

La prima cancellazione va bene, però. Il secondo ha dei problemi. A cosa è legata questa disabilità?

 
fxsaber:

Dovrò cercarlo sul forum. Ricordo di aver mostrato come l'accesso generico alla storia sia superiore al meccanismo regolare solo nel Tester.

Questo è stato il caso.

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.08
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Renat Fatkhullin:

Esegue o accetta?

Senza dettagli su N scambi (in modo da poter vedere il quadro generale, non un singolo ordine strappato. compresi i ping) non possiamo discutere.

Sì, è così.

Se il prezzo tocca un ordine pendente Limit con un tick e rimbalza, e questo tick dura meno di 100-200 ms. Poi circa nel 30-50% dei casi si verifica lo slittamento. Cioè, l'ordine non ha il tempo di essere eseguito dal prezzo del tick.

La durata del tick è controllata rispetto all'archivio di tick del broker, quindi i ping non hanno nulla a che fare con esso.

Inoltre non credo nell'alto carico del server, dato che solo pochi trader in quei momenti si muovono secondo i numeri degli ordini.

Anche lo slittamento dovuto alla mancanza di liquidità non ha niente a che fare con questo. Appare solo su zecche brevi. Anche la dimensione del lotto è piccola.

Finora presumo un ritardo artificiale dell'esecuzione da parte del broker.

Raccogliere statistiche su diversi affari richiede tempo. Ma è possibile, se aiuta a rispondere alla domanda.

 
secret:

Esegue.

Se il prezzo tocca un ordine Limit con un tick e rimbalza indietro, e quel tick dura meno di 100-200 ms. Poi circa il 30-50% dei casi l'ordine viene eseguito con uno slittamento. Cioè, l'ordine non viene eseguito al prezzo del tick.

La durata del tick è misurata dall'archivio tick del broker, quindi i ping non hanno nulla a che fare con esso.

Inoltre non credo nell'alto carico del server, dato che solo pochi trader in quei momenti si muovono secondo i numeri degli ordini.

Anche lo slittamento dovuto alla mancanza di liquidità non ha niente a che fare con questo. Appare solo su zecche brevi. Anche la dimensione del lotto è piccola.

Finora presumo un ritardo artificiale dell'esecuzione da parte del broker.

Raccogliere statistiche su diversi affari richiede tempo. Ma è possibile, se aiuta a rispondere alla domanda.

Dovete guardare in dettaglio, ma se si tratta di forex, è probabile che sia un trade sul prossimo tick.

Ho bisogno di registri e di una tabella di tick chart.
 
secret:

Se il prezzo tocca un ordine Limit con un tick e rimbalza indietro, e quel tick dura meno di 100-200 ms. Poi lo slittamento si verifica in circa il 30-50% dei casi. Cioè l'ordine non riesce ad essere eseguito al prezzo del tick.

MT5 non ha nulla a che fare con questo. Sui conti demo ci sarà un'esecuzione perfetta.
 

Stanco di fare il debug delle istantanee. Finalmente l'ha reso perfetto. Un consulente, niente. Due - perfetto. 20 - disastro: la CPU è sotto il 100%. HistorySelect ha un ritardo di molti millisecondi.

Sembra che MT5 non sia destinato a gestire una grande quantità di Expert Advisors allo stesso tempo.