MT5 e la velocità in azione - pagina 86

 
fxsaber:

@Anton, in molte funzioni standard puoi specificare NULL al posto di un carattere. Influisce sulla velocità di esecuzione?

O non fa differenza per Terminal/Tester?

Symbol(), le voci _Symbol sono equivalenti a NULL (dove NULL è permesso al posto di un nome di 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 controlla il programma completo e richiede ancora le proprietà

 
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 inutile per l'esistenza del simbolo corrente, per la presenza del simbolo corrente in Market Watch e la chiamata inutile delle proprietà del simbolo corrente, poiché le proprietà del simbolo corrente sono memorizzate nella cache

Slava, puoi commentare: sulle azioni, il prezzo di tick nella specifica del simbolo è impostato su '0'. Ed ecco cosa dice il supporto:

"Ricevuto conferma dal dipartimento tecnico. Si prega di notare che non è possibile compilare il parametro "tick price" per l'azione. Il valore sarà predefinito a 0.
Grazie per averci contattato!"


È davvero questo il caso? È nelle Symbol Specifics che il prezzo di tick è zero solo per le azioni?

 
Vladimir Karputov:

Slava, puoi commentare: sull'azione, il prezzo di tick nella specifica del simbolo è impostato su '0'. E questo è ciò che dice il supporto:

"Ricevuto conferma dal dipartimento tecnico. Si prega di notare che non è possibile compilare il parametro "Tick price" per l'azione. Il valore sarà predefinito a 0.
Grazie per averci contattato!"


È davvero questo il caso? È nelle Symbol Specifics che il prezzo di tick è zero solo per le azioni?

Sì, ci sono delle sfumature.

Quando lo zero è esposto, devi fare i conti da solo. Chiedete al vostro broker la formula

 
fxsaber:

Il problema di ottenere LATE ticks senza salti è ora risolto solo tramite CopyTicks*. Si tratta di un meccanismo molto macchinoso per questo problema diffuso.

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

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

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

 
Renat Fatkhullin:

Non lo è.

In qualsiasi programma si possono sempre trovare dei ritardi casuali. Iniziate a tenere traccia di tutto e sarete inorriditi dalla realtà di Windows. L'ho già spiegato in dettaglio diverse volte.

Una volta anche noi ci siamo stupiti quando abbiamo beccato raffiche casuali di 60-80 ms invece di 0 ms sulle funzioni WinAPI del sistema.


Ora stiamo migrando in massa la maggior parte delle nostre soluzioni Windows su versioni appositamente scremate di Windows Server 2019 Core, e i progetti web.NET Core su Linux. Questo porta un enorme risparmio di risorse di sistema e riduce seriamente la latenza del sistema.

Il primo passo per scremare i terminali di MataTrader 5 è stato quello di iniziare a implementare un task manager per tenere traccia del consumo di risorse al volo. Per noi stessi, stiamo raccogliendo più informazioni.

È già diventato chiaro che lo siamo:

  • eccessivamente lungo trattenere i flussi inutili
  • sovrascala
  • Sovradimensionamento delle cache.
Per la prossima release risolveremo alcuni problemi di risorse passo dopo passo.

Non sarebbe bello avere anche un terminale basato su linux ))))

 
Slava:

Sì, ci sono delle sfumature.

Devi fare i conti da solo se hai zero. Chiedete la formula al vostro broker.

Tutto è corretto con SymbolInfoXXXX. La domanda era perché dicono che '0' è impostato per le azioni nella Specifica. Dicono che è chiaro: un segno di spunta equivale a un centesimo. Ma non è la ragione per impostare '0' nella specifica?

 
fxsaber:

All'interno della funzione, è ancora necessario saltare al carattere di spunta corrispondente. Questo è il momento di analizzare la variabile stringa. Non c'è bisogno di farlo con NULL.

L'ho controllato in quel momento e non ho visto alcuna differenza di velocità significativa. Potete controllare voi stessi

 
Slava:

Se viene specificato un normale parametro stringa invece di Symbol(), _Symbol o NULL, allora viene controllato l'intero programma e vengono interrogate anche le proprietà

Grazie per le informazioni! Si scopre che è meglio farlo in questo modo:

// Быстрый SymbolInfoTick.
bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
  return((Symb == _Symbol) ? SymbolInfoTick(_Symbol, Tick)
                           : SymbolInfoTick(Symb, Tick));
}
 
fxsaber:

Grazie per le informazioni! Si scopre che è meglio farlo in questo modo:

Anche senza dettagli tecnici, non potrei immaginare come si potrebbe fare diversamente nelle vostre funzioni...

In che modo questa costruzione dovrebbe essere più veloce del SymbolInfoTick() standard?

 
Artyom Trishkin:

Come si suppone che questa costruzione sia più veloce del SymbolInfoTick() standard?

Più veloce.