Errori, bug, domande - pagina 3149

 
Vladimir Karputov #:

Passo 1: Creare un modello usando 'MQL5 Wizard':


Passo 2: scrivete correttamente 'limit' e USATE l'array close - NON la chiamata iClose!!!


Risultato:

e non ci sono errori.

Chi ha detto che questo è l'unico calcolo corretto di limite e indicatore?

Stiamo discutendo un altro calcolo del limite e l'indicatore stesso - da sinistra a destra - dall'inizio della storia al tempo attuale. È più semplice e più evidente.

In un tale limite calcolato (int limit = rates_total - prev_calculated; if(limit>1) limit=rates_total-1;) tutti i dati su

  1. se si tratta di un tick corrente,
  2. se si tratta dell'apertura di un nuovo bar,
  3. se si tratta di un cambiamento dei dati della storia.

Se il tick corrente (limit==0), allora for(int i=limit; i>=0; i--) { // . } calcolerà l'indicatore su ogni nuovo tick, e solo la barra zero sarà ricalcolata.

Se apriamo una nuova barra (limit==1), allora for(int i=limit; i>=0; i--) { // ... } eseguirà il calcolo della prima barra e della barra zero - precedente e appena aperta

Se questa storia cambia (limite>1), allora for(int i=limite; i>=0; i--) { // ... } eseguirà il ricalcolo completo dell'indicatore per tutta la storia disponibile (la storia è stata cambiata da qualche parte)

 
TheXpert #:
Che differenza fa? Può diventare meno di zero?

Sì, l'ho fatto (aggiunto al post precedente)

 
Artyom era l'unico a capire il problema.
Ma apparentemente questo problema è per sempre.
E ora ci sono solo "se".
 
Roman #:
Solo Artyom ha capito il problema.
Ma apparentemente questo problema è per sempre.
E ora ci sono solo "se".

No, non l'ho capito. Chiarire quello che ho capito...

 
Vladimir Karputov #:
   int limit=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      CloseBuffer[i]=close[i];
     }

l'operatore ternario sembra più laconico (IMHO)

int limit = prev_calculated==0 ? 0: prev_calculated-1;

Inoltre, come ho detto, cosa succede se qualcosa va storto e prev_calcolato risulta essere superiore a tassi_totale.
Ho incontrato una situazione simile, quando le barre massime nella finestra sono != illimitate, ma per esempio, 50000. In questo caso, la dimensione dell'array di barre aumenterebbe di 1 ad ogni nuova barra, ma ad un certo momento diventerebbe di nuovo 50000. Non seguo la logica. L'ho preso un paio di anni fa. Bisogna controllarlo ora. Imposterò uno sblocco sul mio VPS.

 
Artyom Trishkin #:

No, non l'ho capito. Chiarire quello che ho capito...

Quello che per ora non funziona come prima

limit==0
per tick i>=0
per barre i>0

Hai scritto tutto correttamente sopra,
solo per la nuova barra stampata malefor(int i=limit; i>=0; i--)
l'operatore = non è necessario qui, ma è probabilmente in passato,
a meno che non restituiscano il comportamento precedente
.

 
Roman #:

Quello che per ora non funziona come prima

limit==0
per tick i>=0
per barre i>0

Hai scritto tutto correttamente sopra,
solo per la nuova barra è scritto malefor(int i=limit; i>=0; i--)
qui l'operatore = non è necessario, ma deve essere già nel passato,
se non ritorna il comportamento precedente
.

Ancora una volta non capisco nulla. Cosa c'è che non va? Tutto sembra essere come prima.

 
Artyom Trishkin #:

Non capisco di nuovo. Cosa c'è che non va? Tutto sembra essere come prima.

Con questo design.

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)


il buffer dell'indicatore è fuori limite.

Per favore mostratemi un esempio per itick con ciclo i>=0
forse ho dimenticato qualcosa e lo sto facendo male
.

 
Roman #:

Con questo design
, il buffer dell'indicatore va fuori dai limiti.

è sempre uscito.
 
Roman #:

Con questo design.


il buffer dell'indicatore è fuori limite.

Per favore, mostratemi un esempio per itick con ciclo i>=0
forse ho dimenticato cosa sto facendo di sbagliato
.

Ho già scritto che con questa costruzione state accedendo all'indice del buffer con rates_total (quando prev_calculated == 0 ).
E questo è un overflow perché rates_total è la dimensione del buffer il cui ultimo elemento rates_total-1