Errori, bug, domande - pagina 891

 

È chiaro che l'azzeramento è stato fatto per compatibilità, ma non è chiaro perché quando enum inutilizzato = WRONG_VALUE è inizializzato correttamente , non funziona correttamente. Questo approccio manca di portabilità e aumenta significativamente la probabilità di errori nascosti.

 
A100: non è chiaro perché quando l'enum inutilizzato = WRONG_VALUE è inizializzato correttamente, non funziona correttamente.

Ricordate questa regola?

Regola: se a una costante nominata - membro di un'enumerazione non è assegnato esplicitamente un valore specifico, il suo valore sarà generato automaticamente. Se è il primo membro dell'enumerazione, viene assegnato il valore 0. Per tutti i membri successivi, i valori saranno calcolati in base al valore del membro precedente aggiungendo uno.

Molto probabilmente, il controllo della correttezza dei campi della query presuppone che il valore di un membro dell'enumerazione non possa essere negativo. La possibilità di assegnare WRONG_VALUE a un membro dell'enumerazione non è presa in considerazione.

 
Yedelkin:

Tuttavia, la possibilità di assegnare WRONG_VALUE a un membro dell'enumerazione non è presa in considerazione.

Penso che questo sia esattamente l'errore qui. Se non si usa un enum concreto, è logico che il suo valore sarà WRONG_VALUE invece che, per esempio, ORDER_TYPE_BUY che effettivamente = 0.

e soprattutto - niente vi impedisce di cambiare la logica di OrderCheck() e OrderSend() mantenendo la compatibilità

 
A100: Penso che questo sia esattamente l'errore qui. Se non si usa un enum concreto, è logico che il suo valore sarà WRONG_VALUE invece di ORDER_TYPE_BUY che effettivamente = 0.

e soprattutto, nulla vi impedisce di cambiare la logica di OrderCheck() e OrderSend() mantenendo la compatibilità

C'è un modo per capire l'opinione degli sviluppatori - scrivere al Service Desk sull'errore.
 

Ho scoperto uno strano "bug".

Sto usando questo codice nel mio EA:

void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
  {
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
    {
     if(trans.symbol == "EURUSD") EURUSD_K = 1;
    }    
  }

Una singola esecuzione nel tester passa senza problemi, ma appena scelgo i parametri con la ricerca completa, il tester comincia a lavorare dieci o dieci volte più lentamente. Non capisco perché la velocità è adeguata durante una corsa e cala notevolmente durante l'ottimizzazione. Inoltre, cala geometricamente. Si può vedere dalla percentuale che tutto va bene all'inizio ma verso la fine la velocità continua a scivolare sempre più lentamente. Ho cercato dei problemi nel mio codice e ho cercato dei loop o qualcosa del genere, ma non li ho trovati. Dopo di che ho sostituito il codice di cui sopra con il mio algoritmo e oh mio Dio! L'ottimizzazione ora funziona a una velocità normale e uniforme. Questo mi porta alla conclusione che il problema è in MQL5, da qualche parte nel corpo della funzione OnTradeTransaction. Chiederò agli sviluppatori di prestare attenzione a questo.

p.s. Non posso postare il codice di Expert Advisor. Prova ad usare il codice di cui sopra in uno qualsiasi dei tuoi EA e guarda la velocità di ottimizzazione in OHLC M5 per il periodo dal 2000 ad oggi.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
lordlev:

Ho scoperto uno strano "bug".

Sto usando questo codice nel mio EA:

Una singola esecuzione nel tester passa senza problemi, ma appena scelgo i parametri con la ricerca completa, il tester inizia a lavorare dieci o dieci volte più lentamente. Non capisco perché la velocità è adeguata durante una corsa e cala notevolmente durante l'ottimizzazione. Inoltre, cala geometricamente. Si può vedere dalla percentuale che tutto va bene all'inizio ma verso la fine la velocità continua a scivolare sempre più lentamente. Ho cercato dei problemi nel mio codice e ho cercato dei loop o qualcosa del genere, ma non li ho trovati. Dopo di che ho sostituito il codice di cui sopra con il mio algoritmo e oh mio Dio! L'ottimizzazione ora funziona a una velocità normale e uniforme. Questo mi porta alla conclusione che il problema è in MQL5, da qualche parte nel corpo della funzione OnTradeTransaction. Chiederò agli sviluppatori di prestare attenzione a questo.

p.s. Non posso postare il codice di Expert Advisor. Prova ad usare il codice di cui sopra in uno qualsiasi dei tuoi EA e guarda la velocità di ottimizzazione di OHLC M5 per il periodo dal 2000 ad oggi.

Con diversi parametri l'Expert Advisor può funzionare per tempi diversi
 
Konstantin83:
Per diversi parametri, l'EA può funzionare per diverse durate
In questo caso, il problema non è l'Expert Advisor o i parametri. Il problema è in MQL5 stesso.
 
lordlev:

Dopo aver sostituito il codice di cui sopra con il tuo algoritmo

Cioè hanno rinunciato a usare OnTradeTransaction()? - allora è logico che la velocità sia aumentata - è chiamato in ogni occasione
 
A100:
Cioè hanno rinunciato a usare OnTradeTransaction() ? - allora è logico che la velocità sia aumentata - si chiama in ogni occasione
È naturale rifiutarsi di usarlo. È chiaro che si chiama in qualsiasi occasione. Non è chiaro perché la velocità sia adeguata durante una singola esecuzione, mentre cala drasticamente durante l'ottimizzazione. Non ha niente a che vedere con i parametri stessi, come ha scritto un altro amico sopra, l'ho controllato accuratamente dieci volte. Questo mi porta alla conclusione che gli sviluppatori hanno fatto un errore da qualche parte.
 
lordlev:

Cosa ti impedisce di fare un caso di test minimo e riferire al service desk?

Motivazione: