MT5 e la velocità in azione - pagina 27

 
fxsaber:

Quale terminale pensate che consumi di più la CPU?

2 ed ecco perché

 
fxsaber:

Per ridurre la CPU consiglio di chiudere tutte le sottofinestre del terminale (Market Watch, Navigator, Tools, ecc.), ridurre a icona tutti i grafici e minimizzare il terminale stesso.

Rimuovere tutti i simboli inutilizzati dal Market Watch. È particolarmente importante per i VPS.


Suggerisco di automatizzare queste azioni in qualche modo. Prima di lasciare il tuo VPS, premi e lascia. Quando si entra - stampa, si vede tutto.

È da molto tempo che dico che gli algotraders hanno bisogno di un'altra versione del terminale, senza tutto questo tuning!

Oltre a tutti i precedenti, ne ho aggiunto uno nuovo per ogni EA:

ChartSetInteger(0,CHART_SHOW,false);

Ancora ritardi :(

 
A100:

Il 2 e questo è il motivo.

Sì, il secondo.

 
Come è architettato SymbolInfoTick? Non si capisce perché possa funzionare per decine di millisecondi.
 

Il b2560 perde enormemente in prestazioni rispetto al b2592. Stiamo aspettando che il bug venga risolto.

Il thread si è rivelato utile.

 
fxsaber:

Il b2560 perde enormemente in prestazioni rispetto al b2592. In attesa della correzione di un bug.

b2593 è stato corretto. Grazie!

 
L'aggiunta dell'ordine/trade alla storia del trading causerà una ricostruzione completa della cache di HistorySelect, non una parziale. Quindi, abbiamo ritardi nell'attivazione degli ordini.
// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}

Risultato.
2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.


Perché è importante. Immaginiamo che un robot HFT sia in funzione. Sullo stesso conto viene eseguito un trade a mano. Ecco, l'HFT-robot ha eliminato la HistorySelect-cache con le conseguenze appropriate. Naturalmente, la storia di HFT-robot non è 10K ordini/scambi, ma molto di più. Sarebbe costoso ricostruire l'intera cache per una tale storia. Ecco perché è logico aggiungerli.


È chiaro che il trading manuale non dovrebbe rallentare i robot. Per il trading algoritmico puro, il problema sorge quando gli ordini vengono attivati.

 

Le funzioni che permettono di fare istantanee complete (array di strutture) dell'ambiente di trading corrente (posizioni e ordini) sono molto mancanti.

Una variante attraverso le funzioni Position* e Order* causa collisioni (trading attivo) quando si passano queste due liste nel ciclo. Qualcosa si è perso o non è stato contabilizzato.

Le istantanee complete istantanee eviterebbero questi problemi.


ZZY Istantanee complete per Market Watch - non valutando ancora la rilevanza. Rendere la MT5 più vicina all'HFT (LCI).

 

Gestito (non di proposito) per portare il terminale (e nessuno) in uno stato in cui la CPU è al 100% e il tempo di attesa di OrderSend è più di un secondo.

Probabilmente non sarà facile trovare la causa.


ZZY Sembra che tali freni siano causati da un design simile.

void OnTrade()
{
  OnTick();
}

Non sono riuscito a creare del codice per riprodurlo.


Infatti, è possibile portare il terminale in uno stato in cui gli ordini di trading saranno eseguiti in pochi secondi (registro del terminale) con un ping di 50 ms. Una volta che gli EAs sono stati rimossi, gli ordini di trading iniziano ad essere eseguiti entro 100ms.

 
fxsaber:

Le funzioni che permettono di fare istantanee complete (array di strutture) dell'ambiente di trading corrente (posizioni e ordini) sono molto mancanti.

Una variante attraverso le funzioni Position* e Order* causa collisioni (trading attivo) quando si passano queste due liste nel ciclo. Qualcosa si è perso o non è stato contabilizzato.

Le istantanee complete istantanee eviterebbero questi problemi.


ZZY Istantanee complete per Market Watch - non valutando ancora la rilevanza. Rendere la MT5 più vicina all'HFT (LFI).

E funzioni a tempo pieno per tracciare ordine-transazione-posizione per biglietto e a ritroso per posizione del biglietto per capire quale era l'ordine e i termini della transazione. Il monitoraggio in base allo stato della storia è una realtà malvagia.

L'ambiente full click è cool, ma apparentemente costoso e non spesso necessario. anche se quando il mercato crolla))))

Per me stesso divido un ordine e un ordine. Un ordine di esecuzione di un ordine è un ordine in sospeso. L'ordine di mercato è confuso.

Non giudicare strettamente dall'opinione non professionale.

Motivazione: