Errori, bug, domande - pagina 1851

 
kaus_bonus:

Grazie per la vostra risposta.

Nel complesso, i risultati sono quelli che ho mostrato nei miei post.

Ho fatto dei test su uno regolare.

Non è un imbroglio, sono le stesse condizioni per entrambi i sistemi.


Eppure i risultati tra MT4 e MT5 sono quasi 200 volte diversi (a causa delcontrollo obbligatorio della sincronizzazione completa con i dati del server e del ping? ).

Circa 0,6ms in MT4 lo capirò ancora. Apparentemente i dati lì sono già pre-preparati e quindi questa cifra non mostra i costi reali.

MT4 ha un'ideologia abbastanza diversa e in realtà il terminale copia una quantità enorme di dati per ogni script/esperto a livello di sistema dal codice MQL4. Pertanto, le misurazioni effettuate in MQL4 di solito non dimostrano il consumo effettivo di risorse per la ricezione dei dati. Le spese, ovviamente, esistono, ma sono ad un altro livello - il sistema ne è responsabile.

È chiaro che il meccanismo di MT4 (creare copie di dati di mercato per ogni robot) non può essere applicato quando il tuo compito è scalato a flussi di dati infiniti (storia profonda, decine di migliaia di strumenti). Pertanto, ho dovuto cambiare e migliorare drasticamente MQL5 sbarazzandomi degli accessi diretti Open/High/Low/Close e passando alle funzioni CopyXXX. Considerando la dimensione dei dati MT5, è troppo costoso per un Expert Advisor costruire la copia EURUSD M1 per 6 milioni di barre.

MT5/MQL5 utilizza la strategia del download dei dati su richiesta senza copiare in anticipo, il che significa una migliore opportunità di misurare i costi reali dal codice MQL5.

Portare il database in memoria, controllare la sincronizzazione e preparare la cache di un oggetto complesso in MT5 in 113 millisecondi è accettabile.

 
kaus_bonus:

Per esempio, poiché MT non ha un market screener, ho scritto un piccolo script che aggiunge i simboli al market watch ma i prezzi sono disponibili solo via CopyClose, non sono accessibili via SymbolInfoDouble o via MqlTick fino a quando un simbolo viene aggiunto al market watch, quindi questo script gira all'infinito dopo l'avvio del terminale. Questo è solo un esempio.

Gli strumenti non devono essere aggiunti alla panoramica del mercato per ottenere la storia su di essi. Qualsiasi riferimento ai dati del simbolo fa scattare la sincronizzazione dei dati in background.

Ora c'è un problema con l'utilizzo di un livello eccessivo di caching con l'intero database del grafico sollevato fino alla sua massima profondità, anche se vengono richiesti i dati più recenti. Questo si traduce in un grande sovraccarico di memoria per gli screeners che controllano centinaia di grafici.

Il compito è già stato impostato per cambiare questa strategia e raccogliere i dati non più in profondità di 500 barre dalla data più lontana della richiesta. Questo permetterà una scrittura indolore degli screeners di mercato.

 
fxsaber:

Qual è il modo giusto?


Hai chiesto, hai risposto:) Beh, sì, lo è.
 
Алексей Тарабанов:

Hai chiesto, hai risposto:) Beh, sì, è così.
Non ho mai visto la chiamata dell'operatore del modello abbreviato.
 
fxsaber:
Non ho ancora visto una chiamata dell'operatore del template abbreviato.

Non lavoro con le strutture da anni. Se avete bisogno di inizializzare un elemento intero di un array di strutture, sarà un'operazione di stringa. E l'elemento intero di quella stringa convertita l'hai inizializzato correttamente, che è quello che il compilatore ha riportato. Se volete iniziare, confrontare o altrimenti gestire array di strutture, chiedete come sono rappresentati/memorizzati in MQL. Non è niente di complicato e accelera molto le cose.
 
Алексей Тарабанов:
Ho bisogno di sapere quale voce di sintassi è la versione abbreviata di questo
Struct.operator[]<int>(0);
 
fxsaber:
Ho bisogno di sapere quale voce di sintassi è la versione abbreviata di questo
Strutture[0]
 
Комбинатор:
Strutture[0].

A chi come
 
Комбинатор:
Strutture[0].
Per non sfogliare le pagine, copierò il codice

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

Bug, bug, domande

fxsaber, 2017.04.12 14:27

struct STRUCT
{
  template <typename T>
  void operator []( int ) {}
};

void OnStart()
{
  STRUCT Struct;
  
  Struct.operator[]<int>(0); // Нормально
  Struct[0]<int>;            // Ошибка
}

Queste due chiamate sono diverse.

Struct.operator[]<int>(0);
Struct.operator[]<MqlTick>(0);

Ci dovrebbe essere una voce abbreviata corrispondente per ciascuno. Quale?

 
fxsaber:
Ho bisogno di sapere quale voce di sintassi è una versione abbreviata di questo

Nessuna voce può fornire quello che volete. Fondamentalmente. Semanticamente.