MT5 e la velocità in azione - pagina 89

 
Forse basta fare un paio di test e le domande spariranno?
 
traveller00:
Forse basta fare un paio di test e le domande spariranno?

Forse. Vorrei avere più tempo per fare i test da solo :(

 
traveller00:
Forse basta fare un paio di test e le domande spariranno?

I test mostrano una differenza solo la prima volta che si inizia.

 
Slava:

Symbol(), le voci _Symbol sono equivalenti a NULL (dove NULL è permesso al posto del nome del simbolo).

In questo caso, non c'è nessun controllo extra per l'esistenza del simbolo corrente, la presenza del simbolo corrente nel Market Watch e le proprietà di chiamata non necessarie del simbolo corrente, poiché le proprietà del carattere corrente sono memorizzate nella cache

Cioè, se viene specificato un normale parametro stringa invece di Symbol(), _Symbol o NULL, allora i controlli per il programma completo e altre chiamate di proprietà

Domanda:

   string symbol=_Symbol;
   SymbolInfoInteger(symbol,...)
   SymbolInfoInteger(NULL,...)

- il comportamento delle chiamate SymbolInfoXXX in questi due casi, differiranno di più di un controllo?

symbol==_Symbol

?

 
traveller00:

A proposito, dai log freschi di oggi dell'ultima versione di MT5:

Erano 3 EAs in bilico su 1 simbolo, ognuno sul proprio grafico. E la richiesta continua ad ogni spunta. Tali picchi sono ovviamente poco frequenti, ma in effetti 1 richiesta di nuovi tick proveniente dall'ultimo tick è stata eseguita 700 ms.

Sto monitorando da circa 12 ore, ma posso già vedere che i ritardi superano tutti i limiti.

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 8589203 mcs.

3 EAs, ognuno sul proprio grafico, tutti su 1 simbolo, stanno richiedendo i vecchi tick del tick precedente tramite CopyTicksRange. E il ritardo è di quasi 9 secondi. E sembra che questo non sia il limite. Molto probabilmente il negozio di tick è una risorsa condivisa il cui accesso è sincronizzato, ma anche con una pessima sincronizzazione non dovrebbero esserci questi tempi.

Alcuni diranno che si tratta di un inconveniente una tantum. Durante queste 12 ore di monitoraggio purtroppo ci sono state più di cento uscite di 1 secondo. E queste non sembrano più esplosioni una tantum. Sembra che ci fossero spesso più zecche in arrivo nello stesso momento, che è ciò che sta causando questi picchi.

Anche se chiudiamo gli occhi sul fatto che 3 EA hanno combattuto per una risorsa comune, guardiamo l'altro monitoraggio:

ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 1401285 mcs.

C'era solo 1 Expert Advisor sul simbolo. E ancora un secondo e mezzo. Non era l'unico, c'erano altri EA su altri simboli, ma non è multi-threaded? O i ticchettii per i diversi simboli possono comunque rallentarsi a vicenda?

Questa è una funzionalità di base per gli EA di base. La piattaforma è posizionata come una piattaforma di trading algoritmico. Detto questo, la funzionalità di base solleva forti domande. Una grande richiesta di guardarlo di nuovo, sono quasi sicuro che c'è spazio per migliorare da qualche parte. O sarebbe molto grato di essere in grado di ottenere gli ultimi tick da quando la funzione è stata chiamata, come suggerito qui

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

MT5 e la velocità in azione

fxsaber, 2021.03.01 07:28

Per favore, pensate a una tale caratteristica.

int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


Il problema di ottenere NUOVE zecche senza salti è ora risolto solo attraverso CopyTicks*. È un meccanismo molto ingombrante per questo compito diffuso. È come sparare agli uccelli con un cannone.

Quindi freni, mantenimento di enormi cache, ecc.

 

Minimizzato il numero di chiamate a SymbolInfoTick e CopyTicksRange:

  • Istantanea SymbolInfoTick - non chiamata più spesso di una volta ogni 100µs.
  • Il CopyTicksRange per i tick freschi viene chiamato solo se, effettivamente, un nuovo tick è arrivato nel Market Watch.


Il terminale e la macchina (file di swap disattivato) con questo carico.


Come risultato, è stato possibile ridurre significativamente il numero di messaggi di ritardo (sono state fatte meno chiamate) delle funzioni regolari.


Registra per 50 minuti:

2021.03.05 19:31:45.429 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 154 mcs.
2021.03.05 19:32:58.939 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 161 mcs.
2021.03.05 19:33:01.583 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 19:36:01.682 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 143 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 234 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 913 mcs.
2021.03.05 19:39:08.716 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 139 mcs.
2021.03.05 19:39:30.994 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 315 mcs.
2021.03.05 19:39:32.858 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 114 mcs.
2021.03.05 19:40:41.437 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 19:42:26.104 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 116 mcs.
2021.03.05 19:42:28.849 ::SymbolInfoTick(_Symbol,Tick)] = 109 mcs.
2021.03.05 19:43:10.977 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 481 mcs.
2021.03.05 19:43:53.945 ::SymbolInfoTick(_Symbol,Tick)] = 130 mcs.
2021.03.05 19:49:20.352 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 19:51:31.242 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 19:51:44.986 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 107 mcs.
2021.03.05 19:52:05.590 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 219 mcs.
2021.03.05 19:53:56.013 ::SymbolInfoTick(_Symbol,Tick)] = 236 mcs.
2021.03.05 19:55:41.453 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 105 mcs.
2021.03.05 19:55:47.109 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 148 mcs.
2021.03.05 19:55:47.110 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 265 mcs.
2021.03.05 19:59:26.011 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 186 mcs.
2021.03.05 20:00:01.569 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 117 mcs.
2021.03.05 20:01:19.704 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 109 mcs.
2021.03.05 20:02:07.285 ::SymbolInfoTick(_Symbol,Tick)] = 177 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 198 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 202 mcs.
2021.03.05 20:04:40.170 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 364 mcs.
2021.03.05 20:04:45.905 ::SymbolInfoTick(_Symbol,Tick)] = 143 mcs.
2021.03.05 20:04:45.906 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 20:04:45.907 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 504 mcs.
2021.03.05 20:04:48.259 ::SymbolInfoTick(_Symbol,Tick)] = 104 mcs.
2021.03.05 20:04:54.727 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 104 mcs.
2021.03.05 20:05:39.642 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 20:07:40.189 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 20:09:21.844 ::SymbolInfoTick(_Symbol,Tick)] = 115 mcs.
2021.03.05 20:09:32.422 ::SymbolInfoTick(_Symbol,Tick)] = 107 mcs.
2021.03.05 20:10:02.423 ::SymbolInfoTick(_Symbol,Tick)] = 128 mcs.
2021.03.05 20:15:48.838 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 149 mcs.
2021.03.05 20:16:36.001 ::SymbolInfoTick(_Symbol,Tick)] = 105 mcs.
2021.03.05 20:17:51.499 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 480 mcs.
2021.03.05 20:17:51.638 ::SymbolInfoTick(_Symbol,Tick)] = 342 mcs.
2021.03.05 20:17:52.802 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 429 mcs.
2021.03.05 20:17:53.340 ::SymbolInfoTick(_Symbol,Tick)] = 142 mcs.
2021.03.05 20:19:21.512 ::SymbolInfoTick(_Symbol,Tick)] = 122 mcs.
2021.03.05 20:20:35.836 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 116 mcs.


Non sembra troppo male. Non ci sono state transazioni commerciali. Che ne dici di loro, vedrò.


TUTTAVIA, il frammento evidenziato mostra che tre EA (personaggi diversi) sono stati ritardati quasi simultaneamente. Cioè il ritardo è universale per il terminale.

 
Slava:

Symbol(), le voci _Symbol sono equivalenti a NULL (dove NULL è permesso al posto del nome del simbolo).

In questo caso, non c'è nessun controllo extra per l'esistenza del simbolo corrente, la presenza del simbolo corrente nel Market Watch e le proprietà di chiamata non necessarie del simbolo corrente, poiché le proprietà del carattere corrente sono memorizzate nella cache

Cioè, se si specifica un semplice parametro stringa invece di Symbol(), _Symbol o NULL, allora ci sono controlli per il programma completo e più proprietà di richiesta

Si prega di spiegare di nuovo, perché diverse interpretazioni delle tue parole da parte degli utenti del forum.

 

Nel terminale con un EA/carattere/simbolo.


2021.03.05 23:02:02.860 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 189 mcs.
2021.03.05 23:02:24.152 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 339 mcs.
2021.03.05 23:02:53.540 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 915 mcs.
2021.03.05 23:05:35.325 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 223 mcs.
2021.03.05 23:05:41.398 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 245 mcs.
2021.03.05 23:05:44.585 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 376 mcs.
2021.03.05 23:06:35.210 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 173 mcs.
2021.03.05 23:07:38.298 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 290 mcs.
2021.03.05 23:08:50.342 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 23:14:58.216 ::SymbolInfoTick(_Symbol,Tick)] = 447 mcs.

Un tale registro in 15 minuti. Sembra essere una questione di lentezza di Windows, dopo tutto. In questo caso lo è.

2021.03.05 23:49:20.792 Terminal        MetaTrader 5 x64 build 2815 started for MetaQuotes Software Corp.
2021.03.05 23:49:20.792 Terminal        Windows Server 2019 build 17763, Intel Core i7-7700 K  @ 4.20 GHz, 17 / 31 Gb memory, 3698 / 3725 Gb disk, IE 11, RDP, UAC, GMT+2
 

Un chiaro esempio dei freni causati da Market Watch.

Guardate i valori nella colonna Processore (secondo da destra).

 
Al ritardo del server si aggiunge il ritardo del terminale.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Indicatori: Ping

fxsaber, 2021.03.12 10:56

Mi sono appena ricordato di questo grande indicatore.

È una foto della macchina con zero ping. Si scopre che il ritardo interno del terminale è in media di ~2ms. Rimbalza tra 0-9 ms.


Per esempio, il server ha ricevuto due tick: il primo, poi il secondo dopo 10 ms. Così, in Terminal il secondo tick può essere ricevuto non in 10 ms dopo il primo, ma in 10-19 ms. In media, in 12 ms.

Se fai trading dal mercato (market mart o ordini pendenti al prezzo corrente), sarà particolarmente difficile da gestire. È difficile dire se gli sviluppatori saranno in grado di migliorare qualcosa qui.

Guardando la borsa di Mosca, la situazione è simile. Infatti, facendo trading attraverso l'algo MT5, è quasi garantito di trovarsi alla fine della coda di esecuzione, non avendo il tempo di prendere la roba buona, purtroppo.

Акцептирование SL/TP-ордеров
Акцептирование SL/TP-ордеров
  • 2020.11.24
  • www.mql5.com
В этой ветке пойдет речь об ордерах, которые создаются в результате срабатывания SL/TP-уровней открытых позиций...