Che diavolo sta succedendo? - pagina 5

 
Andrey F. Zelinsky:

dichiarare una variabile globalmente e inizializzarla alla dichiarazione, per esempio int kk=0;

poi in OnTick() si toglie la stampa e si cambia il valore, per esempio Print("kk=",kk); ++kk;

poi cambiare TF - e vedere il risultato.

è chiaro che la variabile globale manterrà il suo valore anche se il TF viene cambiato - ma non succede niente del genere nel tester.

 
Andrey Dik:

è chiaro che la variabile globale manterrà il suo valore anche se la TF viene cambiata - ma non succede niente del genere nel tester.

Ora avete trovato la risposta alla causa della differenza nei risultati.

Quando si ottimizza, i parametri vengono riselezionati, cioè l'Expert Advisor viene riavviato con impostazioni diverse.

 
Andrey F. Zelinsky:

Ora hai trovato la risposta alla differenza di risultati.

Pensate che la variabile globale EA conservi il suo valore dalle passate esecuzioni dell'ottimizzatore e venga riportata a quelle successive?

 
Andrey F. Zelinsky:

Controllate, è più facile controllare che indovinare.

Renat sopra ha scritto che l'ottimizzatore funziona "come un orologio" e che la ragione è nel codice -- ha raccomandato più volte di fare un unpriming -- presumo che nessuno l'abbia fatto.

Hai controllato tu stesso? qualche chiaro esempio di quando una singola corsa funzionerà diversamente che come parte dell'ottimizzazione?

per esempio, ricordo che la rimozione di un handle nel tester non funzionava prima, causava un overflow di memoria e un crash del terminale insieme al sistema. forse questo problema è già stato risolto, ma ci sono ancora alcune insidie con la creazione e la rimozione degli handle degli indicatori e ci sono differenze nell'ottimizzatore e nell'esecuzione del singolo indicatore. come so gli sviluppatori hanno lavorato molto duramente per velocizzare e ridurre al minimo il consumo di memoria dove possibile.

 
Andrey Dik:

Hai controllato tu stesso? ci sono esempi chiari in cui un'esecuzione singola funzionerà diversamente che come parte dell'ottimizzazione?

in questo caso non si tratta di una singola corsa.

 
Andrey F. Zelinsky:

Controlla l'inizializzazione delle variabili dichiarate globalmente.

Se l'inizializzazione non è in OnInit(), ma nella dichiarazione e se i loro valori sono cambiati nel codice.

  1. Ho controllato.
  2. Ecco cosa sono le variabili: possono essere cambiate.
  3. Correggetemi se mi sbaglio.
  • Se una variabile è definita, la memoria è riservata per essa.
  • Se non è inizializzato, qualsiasi cosa può essere memorizzata in esso.
  • Che differenza c'è tra inizializzare subito per zero o assegnare il risultato dei calcoli in un certo posto?
  • Se cercate di usare una variabile non inizializzata, il compilatore genererà un avvertimento.

Un semplice esempio:

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

Anche se.... Il compilatore non genera l'avvertimento per qualche motivo se si mette la dichiarazione nello scope globale (((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

Mi aspettavo qualcosa di diverso...

 
Сергей Таболин:

  1. Ho controllato.
  2. Le variabili sono solo questo, variabili, possono essere cambiate.
  3. Correggetemi se mi sbaglio.
  • Se viene dichiarata una variabile, la memoria viene riservata per essa.
  • Se non è inizializzato, qualsiasi cosa può essere memorizzata in esso.
  • Che differenza c'è tra inizializzare subito per zero o assegnare il risultato dei calcoli in un certo posto?
  • Se cercate di usare una variabile non inizializzata, il compilatore genererà un avvertimento.

Un semplice esempio:

Anche se.... Il compilatore non genera l'avvertimento per qualche motivo se si mette la dichiarazione nello scope globale (((

Mi aspettavo qualcosa di diverso.

La quinta pagina andava avanti, ma non c'era ancora il codice mql5... Rimane anche un mistero avvolto nell'oscurità per quanto riguarda i test: simbolo(i), tempo(i), impostazioni dei test.

 

Bene, un'altra domanda prima di iniziare il priming.

Per esempio, ho registrato i risultati:

ottimizzatore - comprare; vendere; vendere; comprare; comprare; vendere

tester - comprare; vendere; vendere; comprare;comprare; vendere; comprare; comprare; vendere

Come possono i dati su questi affari"extra" aiutare a capire da quale tetto provengono? Forse dovremmo scrivere anche i prezzi delle barre precedenti, o cos'altro?

 
Vladimir Karputov:

La quinta pagina andava avanti, ma il codice mql5 ancora non c'era... Rimane anche un mistero avvolto nell'oscurità per quanto riguarda i test: simbolo(i), tempo(i), impostazioni dei test.

Bentornati dalle vacanze ))))

Potete vedere tutto qui.

 
Сергей Таболин:

  1. Ho controllato.
  2. Le variabili sono solo questo, variabili, possono essere cambiate.
  3. Correggetemi se mi sbaglio.
  • Se viene dichiarata una variabile, la memoria viene riservata per essa.
  • Se non è inizializzato, qualsiasi cosa può essere memorizzata in esso.
  • Che differenza c'è tra inizializzare subito per zero o assegnare il risultato dei calcoli in un certo posto?
  • Se cercate di usare una variabile non inizializzata, il compilatore genererà un avvertimento.

Un semplice esempio:

Anche se.... Il compilatore non genera l'avvertimento per qualche motivo se si mette la dichiarazione nello scope globale (((

Mi aspettavo qualcosa di diverso...

Se 'x' è di tipo doppio, gli esempi dati sono fondamentalmente sbagliati e lo stato 'y' è indefinito in entrambi i casi

cioè, è possibile che da qualche parte nelle profondità delle reti neurali si possano ottenere o valori doppi speciali - inf-types, nan-types o simili a eps-values

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...
Motivazione: