Erros, bugs, perguntas - página 1394

 
Ilya Malev:

OK, aqui está o código

Não sou muito bom com indicadores, mas esta linha é questionável

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

Valor de retorno

O número de elementos de matriz copiados ou -1 em caso de erro.

Se apenas 1 elemento for copiado, a função retornará o seu valor. Se não houver elementos ou se houver mais de 1, a função retornará EMPTY_VALUE.

Talvez fosse melhor?

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

OK, aqui está o código

Corrigida a linha e parece estar a funcionar ))))

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

Corrigida a linha e parecia funcionar ))))

Acabei por ser eu próprio a afiná-lo dessa forma. Mas pergunto-me porque terão mudado a lógica (em MT4 a escala era boa sem multiplicação por Ponto). E porque não há possibilidade de fazer tampões sem desenho (c DRAW_NONE) não têm efeito na escala do gráfico.

 
Vladimir Pastushak:

Não sou realmente bom em indicadores, mas esta linha é questionável

1. Valor devolvidoNúmero de elementos de matriz copiados ou -1 em caso de erro.

2. Se 1 elemento for copiado, a função devolverá o seu valor

As afirmações 1 e 2 estão em contradição, não acha?
 
Ilya Malev:
As afirmações 1 e 2 estão em contradição, não acha?

Não )))

1 Pode ser de 1 até ao limite

2 apenas se 1 elemento for copiado Se 2 ou mais, devolve EMPTY_VALUE

Na ajuda que diz

Valor de retorno

Número de elementos da matriz copiados ou -1 em caso de erro. Sob que condição será copiado 1 elemento ?

 
Ilya Malev:

Acabei por ser eu próprio a afiná-lo dessa forma. Mas pergunto-me porque terão mudado a lógica (em MT4 a escala era boa sem multiplicação por Ponto). E porque não há possibilidade de os amortecedores sem desenho (c DRAW_NONE) não afectarem a escala do gráfico.

Não se percorre todo o tampão indicador. Escrevendo

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

não é de todo correcto. Tem taxas_totais, pré_calculadas e indicadores de compensação iStdDev. No primeiro passe, é necessário preencher os índices vazios:

mudança de indicador

e depois passar pelos restantes índices do tampão indicador (para passar pelos meios de atribuição de valores).

 
Karputov Vladimir:

Não se percorre todo o tampão indicador. A entrada

não é de todo correcto. Tem taxas_totais, pré_calculadas e indicadores de compensação iStdDev. No primeiro passe, é necessário preencher os índices vazios:

e depois passar pelos restantes índices do tampão indicador (para passar pelos meios de atribuição de valores).

Na versão original, eu tinha uma função que preenche tudo com zeros do tipo

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

Neste caso, isto não importa. Se houvesse valores vazios, eles estariam no início do gráfico e não afectariam a escala da janela logo no fim. Não é este o caso aqui, o camarada acima já o descobriu.

 
Ilya Malev:

Acabei por ser eu próprio a afiná-lo dessa forma. Mas pergunto-me porque terão mudado a lógica (em MT4 a escala era boa sem multiplicação por Ponto). E porque não há possibilidade de os tampões sem desenho (c DRAW_NONE) não afectarem a escala do gráfico.

Eis como experimentá-lo:

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PLOT_EMPTY_VALUE >>>
 
Vladimir Pastushak:

Não )))

Sob que condições será copiado 1 elemento ?

Sim )))

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

Sim )))

Sim, então a sua linha está correcta.