Caratteristiche del linguaggio mql4, sottigliezze e tecniche - pagina 30

 
Nauris Zukas:

Ciao!
Qual è il modo corretto di usare il "doppio" nel ciclo "for"? Sembra che non ci sia alcun divieto di usare "doppio" nell'aiuto.

Comunque, la mia conclusione è che il "doppio" non è raccomandato nel ciclo"for" a causa della mancanza di normalizzazione di ExpressionZ dopo ogni iterazione. Questo può portare ad almeno 2 problemi:
1) Numero sbagliato di iterazioni;
2) Risultati sbagliati se usate ExpressionZ per calcolare in una dichiarazione.

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
. Все повторяется, пока выражение2 не станет ложным. Если оно ложно, цикл заканчивается и управление передается следующему оператору. ВыражениеЗ вычисляется после каждой итерации. могут отсутствовать, однако разделяющие их точки с запятыми (;) опускать нельзя. Если опущено...
 
Nauris Zukas:

Grazie, capisco perché questo accade, è per questo che ho cercato di normalizzare. Non ha funzionato per me. Anche l'opzione di Alexey Viktorov non ha risolto il problema, i valori rimangono non normalizzati. Quindi la domanda rimane, si può usare il "doppio" in un ciclo e ottenere sempre il numero corretto di iterazioni?

Moltiplicare per 10 al grado giusto fino ad ottenere dei numeri interi. All'inizio ho fatto fatica anch'io, ora converto anche il prezzo in numeri interi e lavoro con i numeri interi o arrotondando ai numeri interi. Ho meno errori, migliore leggibilità.

In generale, come ha detto un programmatore dopo aver ricevuto i riassunti dello scambio, non capisco perché i numeri di una certa capacità di cifre siano rappresentati da numeri reali, piuttosto che da interi. Questo non è logicamente corretto. ))))

 
Valeriy Yastremskiy:

Moltiplicare per 10 al grado giusto fino ad ottenere dei numeri interi. All'inizio ho fatto fatica anch'io, ma ora converto anche il prezzo in un numero intero e lavoro con i numeri interi o arrotondando ai numeri interi. Ho meno errori, migliore leggibilità.

In generale, come ha detto un programmatore dopo aver ricevuto i riassunti dello scambio, non capisco perché i numeri di una certa capacità di cifre siano rappresentati da numeri reali, piuttosto che da interi. Questo non è logicamente corretto. ))))

Grazie, userò int alla vecchia maniera e poi dividerò per double. ;)

 
Nauris Zukas:

Grazie, ma anche il tuo esempio non ha dato il risultato giusto. In printf si può vedere che non avviene alcuna normalizzazione:

Scusa, avrei dovuto controllare. E qui abbiamo "volevo farlo bene, ma è risultato essere lo stesso di sempre".

Risultato

2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 1.0 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 1.2 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 1.4 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 1.6 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 1.8 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 2.0 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 2.2 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 2.4 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 2.6 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       i: 2.8 step: 0.2
2020.05.29 14:26:33.855 !00 (GBPUSD.m,M15)       MaxPass: 10 count: 10 i: 3.0

Codice corretto

/********************Script program start function*******************/
double expr1=1.0;
double expr2=2.8;
double step=0.2;
double i;
int count=0;
void OnStart()
 {
  for(i=expr1; i<=expr2; i=NormalizeDouble(i+step, 1))
   {
    count++;
    Print(" i: ", DoubleToString(i, 1), " step: ", DoubleToString(step, 1));
   }
  int MaxPass=(int)NormalizeDouble(((expr2-expr1)/step), 0)+1;
  Print(" MaxPass: ", MaxPass, " count: ", count, " i: ", i);
 }/*******************************************************************/
 
Alexey Viktorov:

Codice corretto

Fate attenzione a non mettere step=0.04 ;)

 
Andrey Khatimlianskii:

Fate attenzione a non mettere step=0.04 ;)

Questo è solo un consiglio per coloro che non sanno usare il loro cervello)))

 
Alexey Viktorov:

Scusa, avrei dovuto controllare. È solo: "Avevo buone intenzioni, ma è sempre lo stesso".

Risultato

Codice corretto.

i=NormalizeDouble(i+step, 1)

Ah, grazie! Non ci ho pensato io. Questo è proprio il genere di cose che aiuta noi neofiti della programmazione! ;)

 
Sto cercandodei metodi per ordinare un array di strutture. Qualcuno ha qualche variante funzionante?
 
Vladimir Pastushak:
Sto cercandodei metodi per ordinare un array di strutture. Qualcuno ha qualche variante funzionante?

https://www.mql5.com/ru/forum/170952/page134#comment_11532251

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2019.04.19
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
fxsaber:

https://www.mql5.com/ru/forum/170952/page134#comment_11532251

Non funziona...