Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 203

 
I commenti non relativi a questo argomento sono stati spostati in "Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione su algoritmi e codici".
 

Stiamo estendendo le sequenze di inizializzazione "{ ... }", nella prossima build sarà consentita qualsiasi espressione, non solo una costante.

Invece di questo cambiamento, ci sarà una restrizione sull'uso delle costanti per le enumerazioni (come per un'espressione normale): se una costante non fa parte di un enum, verrà generato un errore appropriato.

L'analisi dei codici esistenti ha mostrato che la sequenza di zero singolo "{0}" è spesso usata in modo scorretto.

Per esempio, così:

MqlTradeRequest request={0};


Tale notazione significa impostare il valore zero per il primo campo della struttura e azzerare il resto dei campi.

Per la linea di codice qui sopra, secondo le nuove regole, ci sarà un errore poiché il primo campo ha il tipo ENUM_TRADE_REQUEST_ACTIONS, un'enumerazione che non ha il valore "0".

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Il modo corretto sarebbe:

MqlTradeRequest request={};
 
Ilyas:

Questo è corretto:

MqlTradeRequest request={};

E poi a cosa sarebbe uguale request.action?

 
mktr8591:

E poi a cosa sarebbe uguale request.action?

Zero, naturalmente, come se ZeroMemory fosse chiamato per l'oggetto di questa struttura

 

Come posso tenere traccia delle serie temporali e degli indicatori basati su di esse?

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

Bug, bug, domande

Slava, 2021.05.29 18:16

Voglio ricordarvelo.

1. Per ogni simbolo, per il quale almeno un grafico è aperto, un thread separato sta lavorando per elaborare i tick in arrivo. Diversi grafici possono essere aperti per qualche simbolo, ma ci sarà ancora un solo thread.

2. Il thread dei simboli non elabora grafici, ma serie temporali. Cioè, gli stessi array di dati che sono sottoposti alla richiesta CopyRates.

3. è inutile chiedere al vostro simbolo in OnTick o OnCalculate, se è sincronizzato. Certo che lo è!

4. Tutte le serie temporali sono gestite in ordine, dal più basso al più alto. Prima di tutto, viene applicato il tick, e poi il calcolo di tutti gli indicatori, creati su questa serie temporale. Se chiedete dati per lo stesso simbolo H1 all'indicatore, lavorando su M1, non otterrete mai dati con il tick applicato. I dati saranno sempre una spunta indietro, non importa quali trucchi applichiate. Perché un thread per simbolo con un'elaborazione temporale consecutiva.

5. L'affermazione precedente non si applica agli EA e agli script, perché gli EA e gli script lavorano ognuno nei propri thread separati.


 
Andrey Khatimlianskii:

Come posso tenere traccia delle serie temporali e degli indicatori basati su di esse?

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

Bug, bug, domande

Slava, 2021.06.01 06:34

Alla prima richiesta, l'indicatore potrebbe non ricevere dati dal suo simbolo ma da un altro timeframe solo per una ragione - la serie temporale richiesta non è ancora stata costruita o è già stata distrutta dopo un certo tempo, quando non c'erano richieste.

Dopo una richiesta infruttuosa, basta inviare un comando al vostro grafico per aggiornarlo e terminare OnCalculate immediatamente. È garantito che OnCalculate sarà chiamato e la serie temporale sarà pronta in questo momento

 

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

Caratteristiche del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2017.11.30 09:48

Memo

Azione/tipo di programma Cambio di TF o simbolo Cambio di account
Indicatore Esegui OnDeinit e OnInit, l'oggetto globale della classe cambia (reset completo). Non succede niente, tranne che prev_calculated viene azzerato.
EA Eseguite OnDeinit e OnInit, l'oggetto globale della classe non cambia. Esegui OnDeinit e OnInit, l'oggetto globale della classe cambia (ricarica completa).
Il comportamento evidenziato degli indicatori è cambiato. Ora è lo stesso dell'EA.
 
fxsaber:
Il comportamento dell'indicatore evidenziato è cambiato. Ora coincide con l'EA.

Il punto è un altro - potrebbe essere una svista piuttosto che un cambiamento deliberato di comportamento? L'hai scoperto?

 
Artyom Trishkin:

Il punto è un altro - potrebbe essere una svista piuttosto che un cambiamento deliberato di comportamento? L'ha riconosciuto?

Non l'ho fatto. Il feedback è quasi inesistente. Tuttavia, ecco una caratteristica che ho appena scoperto.

const bool Init = EventSetMillisecondTimer(1);
const long Account = AccountInfoInteger(ACCOUNT_LOGIN);

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTimer()
{
  if (Account != AccountInfoInteger(ACCOUNT_LOGIN))
    Alert(TOSTRING(Account) + TOSTRING(AccountInfoInteger(ACCOUNT_LOGIN)));
}

Questo Expert Advisor avverte quando si passa da un conto all'altro. Sembrerebbe che non dovrebbe farlo secondo la regola.

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

Caratteristiche del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2017.11.30 09:48

Memo

Azione/tipo di programma Cambio di TF o simbolo Cambio di account
Indicatore Esegui OnDeinit e OnInit, l'oggetto globale della classe cambia (reset completo). Non succede niente, tranne che prev_calculated viene azzerato.
EA Eseguite OnDeinit e OnInit, l'oggetto globale della classe non cambia. Esegui OnDeinit e OnInit, l'oggetto globale della classe cambia (ricarica completa).
Tuttavia, questo è dovuto al timer.
 
fxsaber:

Questo consulente avverte quando si passa da un conto all'altro. Sembrerebbe che non dovrebbe farlo, secondo la regola

Tuttavia, questo accade a causa del timer.

Nessuno ha garantito che altri gestori di eventi vengano interrotti (o non vengano eseguiti).

Dopo l'allarme, sia deinit che init avvengono, giusto?