Errori, bug, domande - pagina 1394

 
Ilya Malev:

OK, ecco il codice

Non sono molto bravo con gli indicatori, ma questa linea è discutibile

return(CopyBuffer(hnd, buf, index, 1, Arr)==1?Arr[0]:EMPTY_VALUE);

Valore di ritorno

Il numero di elementi della matrice copiati o -1 in caso di errore.

Se viene copiato solo 1 elemento, la funzione restituisce il suo valore. Se non ci sono elementi o se ce ne sono più di 1, la funzione restituisce EMPTY_VALUE.

Forse sarebbe meglio?

return(CopyBuffer(hnd, buf, index, 1, Arr)>=1?Arr[0]:EMPTY_VALUE);
 
Ilya Malev:

OK, ecco il codice

Ho corretto la linea e sembra funzionare ))))

buffer2[i]=-MathRand()%5*Point();
 
Vladimir Pastushak:

Ho corretto la linea e sembra funzionare ))))

Ho finito per modificarlo io stesso in questo modo. Ma mi chiedo perché hanno cambiato la logica (in MT4 la scala era buona senza moltiplicazione per Punto). E perché non c'è la possibilità di fare in modo che i buffer senza disegno (c DRAW_NONE) non abbiano effetto sulla scala del grafico.

 
Vladimir Pastushak:

Non sono molto bravo con gli indicatori, ma questa linea è discutibile

1. Valore restituitoNumero di elementi della matrice copiati o -1 in caso di errore.

2. Se 1 elemento viene copiato, la funzione restituirà il suo valore

Le affermazioni 1 e 2 sono in contraddizione, non crede?
 
Ilya Malev:
Le affermazioni 1 e 2 sono in contraddizione, non crede?

No )))

1 Può essere da 1 al limite

2 solo se 1 elemento è copiato Se 2 o più, restituisce EMPTY_VALUE

Nell'aiuto si dice

Valore di ritorno

Numero di elementi dell'array copiati o -1 in caso di errore. In quale condizione verrà copiato 1 elemento?

 
Ilya Malev:

Ho finito per modificarlo io stesso in questo modo. Ma mi chiedo perché hanno cambiato la logica (in MT4 la scala era buona senza moltiplicazione per Punto). E perché non c'è la possibilità che i buffer senza disegno (c DRAW_NONE) non influenzino la scala del grafico.

Non si passa attraverso tutto il buffer dell'indicatore. Scrivere

for(int i=rates_total-MathMax(1, prev_calculated); i>=0; i--)

non è affatto corretto. Avete le variabili rates_total, prev_calculated e l'indicatore offset iStdDev. Al primo passaggio è necessario riempire gli indici vuoti:

spostamento dell'indicatore

e poi passare attraverso i restanti indici del buffer dell'indicatore (passare significa assegnare dei valori).

 
Karputov Vladimir:

Non si passa attraverso l'intero buffer dell'indicatore. La voce

non è affatto corretto. Avete le variabili rates_total, prev_calculated e l'indicatore offset iStdDev. Al primo passaggio è necessario riempire gli indici vuoti:

e poi passare attraverso gli indici rimanenti del buffer dell'indicatore (passare significa assegnare dei valori).

Nella versione originale, avevo una funzione che riempiva tutto con zeri del tipo

      for(int i=(int)SeriesInfoInteger(Symbol(), Period(), SERIES_BARS_COUNT)-1; i>=0; i--){
         buffer1[i]=0;
         buffer1[i]=0;
      }

Questo non ha importanza in questo caso. Se ci fossero valori vuoti, sarebbero all'inizio del grafico e non influenzerebbero la scala della finestra alla fine. Non è questo il caso, il compagno qui sopra l'ha già capito.

 
Ilya Malev:

Ho finito per modificarlo io stesso in questo modo. Ma mi chiedo perché hanno cambiato la logica (in MT4 la scala era buona senza moltiplicazione per Punto). E perché non c'è la possibilità che i buffer senza disegno (c DRAW_NONE) non influenzino la scala del grafico.

Ecco come provarlo:

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
TRACCIARE UN VALORE VUOTO >>>.
 
Vladimir Pastushak:

No )))

In quale condizione 1 elemento sarà copiato?

Si )))

int  CopyBuffer(
    int       indicator_handle,     // handle индикатора
    int       buffer_num,           // номер буфера индикатора
    int       start_pos,            // откуда начнем 
    int       count,                // сколько копируем
    double    buffer[]              // массив, куда будут скопированы данные
    );
 
Ilya Malev:

Si )))

Sì, allora la tua linea è corretta.
Motivazione: