Errori, bug, domande - pagina 2000

 
Alexey Viktorov:

E non ha senso farlo già in OnCalculate. Non c'è motivo di inizializzare l'array con qualcosa e poi riempirlo con alcuni valori della formula? Quando si aggiunge una barra, e rispettivamente una cella dell'array, che senso ha riempirla con qualcosa e poi immediatamente con un valore della formula o un valore vuoto?

Questo se la formula viene applicata su tutte le barre. E se si applicasse solo all'ultimo? Io, per esempio, ho molti indici che mi permettono di impostare il numero di barre da calcolare, poiché i calcoli possono essere pesanti. L'inizializzazione è necessaria.

In generale, se non vuoi farlo, non farlo. Non ne discuto più. ;-)

 
fxsaber:

Quindi non si tratta di ArrayResize, ma di ArrayInitialize. ArrayResize garantisce gli zeri in MT4.

E se lo leggete attentamente? Lasciatemi citare di nuovo.

L'inizializzazione di un array con l'espressioneArrayInitialize(array, init_val) non significa l'inizializzazione degli elementi della riserva allocata per questo array con lo stesso valore. Quando la funzione ArrayResize() aumenta successivamente la dimensione dell'array all'interno della riserva corrente, gli elementi i cui valori non sono definiti e molto spesso non sono uguali ainit_val vengono aggiunti alla fine dell'array.

ArrayInitialize - Операции с массивами - Справочник MQL4
ArrayInitialize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayInitialize - Операции с массивами - Справочник MQL4
 
Stanislav Korotky:

E se lo leggete attentamente? Lo citerò di nuovo.

L'inizializzazione di una matrice con l'espressioneArrayInitialize(array, init_val) non significa l'inizializzazione degli elementi della riserva, allocata per questa matrice. Quando la funzione ArrayResize() aumenta successivamente la dimensione dell'array all'interno della riserva corrente, gli elementi icui valori non sono definiti e molto spesso non sono uguali ainit_val vengono aggiunti alla fine dell'array .

L'hanno solo reso sicuro in modo che fosse più difficile spiegare che non c'è init_val. Ma, naturalmente, potete sostituirlo con "i cui valori sono nulli".
 
Stanislav Korotky:

E perché inventare scenari così irrealistici, essenzialmente errori da programmatore MQL? Ovviamente, l'inizializzazione completa viene fatta solo una volta, o se viene rilevato il pompaggio dei dati. In questo caso, sarebbe più efficiente se fosse il kernel a farlo.

Dove ho parlato di doppia inizializzazione? Proprio lo stesso, menzionato sopra, il riempimento di tutti gli elementi in un ciclo, di cui parlavo. Se è presente, l'inizializzazione non è necessaria e spreca solo risorse.

Bene, e se non state contando tutte le barre, allora occupatevi voi stessi di riempire con gli zeri.

 
Stanislav Korotky:

Questo se la formula viene applicata su tutte le barre. E se si applicasse solo all'ultimo? Io, per esempio, ho molti indici che mi permettono di impostare il numero di barre da calcolare, poiché i calcoli possono essere pesanti. L'inizializzazione è necessaria.

In generale, se non vuoi farlo, non farlo. Non ne discuto più. ;-)

Ecco le parole d'oro... Ma è meglio dire "dove non dobbiamo, non lo faremo". O viceversa "lo faremo solo dove è necessario".

 
fxsaber:

Solo i nuovi elementi della matrice sono inizializzati. E il punto è sempre lo stesso: risultati identici da un'esecuzione all'altra, anche se c'è un errore nel codice (spesso non il vostro).Ho dato un esempio con la libreria matematica sopra.

La spazzatura è il male.

Non riesco nemmeno a trovare parole decenti per commentarlo.

Se ti viene chiesto di imbrattarti con esso... Non credo che lo faresti. Diciamo che la prima volta non sai cos'è, e la seconda volta?

Perché chiedete agli sviluppatori di proteggervi dalla merda? Proteggetevi. O se avete argomenti inconfutabili che sono necessari, allora non nascondeteli al pubblico.

Sai, mql3 era un posto dove potevi scrivere così tanti errori da farti rizzare i capelli... Ma l'EA non importa, funziona comunque... Funziona bene? Chi se ne frega?

Per qualche motivo non si discute di uscire dalla matrice. E sembrerebbe che questo sia un male minore della spazzatura in un array o in una variabile. Bene, non abbiamo più questo indice nell'array come una volta, quindi sii mio ospite e continuiamo a lavorare. mani, torniamo al lavoro. Tutto si è risolto...

 
Alexey Viktorov:

Allora perché pretendete che gli sviluppatori vi proteggano dalla merda? Proteggetevi. O se ci sono argomenti convincenti per farlo, allora non nasconderli al pubblico.

Non ci sono state richieste, l'inconfutabilità è dimostrata.

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

Bug, bug, domande

fxsaber, 2017.09.12 16:17

#property strict

void OnStart()
{
  uchar Array[];
  
  const int Size = ArrayResize(Array, 10000);
  
  bool Res = false;
  
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
    
  Print(Res);
}

In MT4 restituirà sempre falso, perché senza spazzatura è tutto a zero. In MT5 è vero.

Quindi lo stesso codice nel tester MT4 mostrerà sempre risultati identici da un'esecuzione all'altra. In un tester MT5 non lo farà.

 
fxsaber:

Non c'era nessun requisito, l'inconfutabilità è dimostrata

Chi vieta di aggiungere solo una riga?

  uchar Array[];
  const int Size = ArrayResize(Array, 10000);
  bool Res = false;
  ArrayInitialize(Array, 0);
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
  Print(Res); 

O non sai che falso è 0, tutto il resto è vero indipendentemente dal segno? Prendete valori dalle riserve di array e volete essere sicuri che ci sia 0. Bene, in questo caso è ragionevole inizializzare l'array con degli zeri, ma perché appesantire il sistema con la nullità forzata quando non è necessario?

Scusate, ma questo esempio è un'assoluta assurdità.

 
Alexey Viktorov:

Chi vieta di aggiungere solo una riga?

Non si tratta di me.

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

Bug, bug, domande

fxsaber, 2017.09.12 16:52

È orribile pensare che qualche libreria matematica (Include\Math -7Mb di codice sorgente) non abbia inizializzato in uno/due punti! E come eliminare questo errore, che in MT5 tester dà diverse corse singole e in MT4 le stesse corse?

 
fxsaber:

Non si tratta di me.

L'unica cosa che resta da fare è rinunciare a tutte le biblioteche degli altri. E non ho mai guardato o usato nessuna di queste librerie. È più facile scrivere tutto quello che ti serve che scavare in un mucchio per controllare i bug... E per usare solo due o tre funzioni...

Motivazione: