MT5 e la velocità in azione - pagina 85

 
Anton:

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

SymbolInfoTick(NULL, Tick);

SymbolInfoTick(_Symbol, Tick);

O non fa alcuna differenza per il Terminale/Tester?

 
fxsaber:

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

O non c'è differenza per Terminal/Tester?

Non posso dirlo con certezza, ma intuitivamente non scrivo mai NULLA da nessuna parte.

Teoricamente, non dovrebbe fare differenza. Penso che durante la compilazione il NULL cambi in un valore normale, e non mi piace vedere cose incomprensibili con i miei occhi.

 
Alexey Viktorov:

Non posso dirlo con certezza, ma intuitivamente non scrivo mai NULLA da nessuna parte.

Teoricamente, non dovrebbe avere alcun effetto. Penso che NULL cambi in un valore normale durante la compilazione, e non mi piace vedere cose che non hanno senso ai miei occhi.

Lo stesso è vero. Ma è la velocità che mi preoccupa.

 

Non capisco come SymbolInfoTicks possa rallentare in un timer di secondi nel fine settimana!

2021.02.28 21:33:02.993 ::SymbolInfoTick(_Symbol,Tick) = 171 mcs.

20 grafici di diversi simboli, su ognuno dei quali è in esecuzione un EA, che prende solo un tick del suo simbolo nel secondo timer.

Cosa c'è da rallentare in un giorno di riposo?


SZY 3374 MB nello screenshot - è un'ora fa che richiede tick per la settimana. Risparmiare risorse come questa.

 
fxsaber:

Non capisco come SymbolInfoTicks possa rallentare in un timer di secondi nel fine settimana!

20 grafici di diversi simboli, su ognuno dei quali è in esecuzione un EA, che prende solo un tick del suo simbolo nel secondo timer.

Cosa c'è da rallentare in un giorno di fine settimana!

Lei ha:

  1. mancanza di informazioni
  2. un paio di dozzine di thread di Expert Advisor che girano in parallelo su 4 core (8 con hyperthreading possono essere ignorati)
  3. di nuovo un singolo outlier da una lunga attesa?
  4. ancora una volta una singola latenza di sistema casuale al volere del thread manager?


 
Renat Fatkhullin:

Lei ha:

  1. mancanza di informazioni
  2. un paio di dozzine di thread esperti che girano in parallelo su 4 core (8 con hyperthreading possono essere ignorati)
  3. di nuovo un singolo outlier da una lunga attesa?
  4. Ancora una volta una singola latenza di sistema casuale al volere del thread manager?

Mi sto chiedendo perché SymbolInfoTick è una funzione così selezionata per la latenza?

 
fxsaber:

Mi sto chiedendo perché SymbolInfoTick è una funzione così scelta per la frenata?

Non lo è.

Si possono sempre trovare ritardi casuali in qualsiasi programma. 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à stato rivelato che noi:

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

Teoricamente, non dovrebbe avere alcun effetto. Credo che NULL cambi in un valore normale durante la compilazione, e non mi piace vedere cose incomprensibili con i miei occhi.

Teoricamente dovrebbe avere un effetto, ma non lo avrà perché il

SymbolInfoTick(_Symbol, Tick);

_Symbol è passato non per valore (come segue dalla descrizione nella Guida) ma per riferimento

 
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.

Grazie, lo controllerò.


Per favore, pensate a una tale caratteristica.

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


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

Quindi freni, mantenimento di enormi cache, ecc.

 
A100:

Teoricamente dovrebbe avere un effetto, ma non lo ha, perché in

_Symbol non è passato per valore (come suggerisce la descrizione nella Guida), ma per riferimento

All'interno della funzione, dobbiamo ancora passare al carattere di spunta appropriato. Questo è il tempo necessario per analizzare la variabile stringa. Questo non è necessario con NULL.

Motivazione: