Ошибки, баги, вопросы - страница 1394

 
Ilya Malev:

Хорошо, вот код

Я не особо силен в индикаторах но эта строка вызывает сомнения

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

Возвращаемое значение

Количество скопированных элементов массива либо -1 в случае ошибки.

В случае если скопирован 1 элемент функция вернет его значение ,в случае если нет элементов или их больше 1 то функция вернет EMPTY_VALUE

Возможно так было бы правильнее ?

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

Хорошо, вот код

Поправил строку и вроде заработало )))

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

Поправил строку и вроде заработало )))

Я и сам в итоге так подправил. Но мне интересно, зачем изменили логику (в МТ4 масштаб был хорошим без умножения на Point). И почему нет возможности чтобы буферы без отрисовки (c DRAW_NONE) не влияли на масштаб графика.

 
Vladimir Pastushak:

Я не особо силен в индикаторах но эта строка вызывает сомнения

1. Возвращаемое значение Количество скопированных элементов массива либо -1 в случае ошибки.

2. В случае если скопирован 1 элемент функция вернет его значение

Утверждения 1 и 2 находятся в противоречии Вы не находите?
 
Ilya Malev:
Утверждения 1 и 2 находятся в противоречии Вы не находите?

Нет )))

1 Может быть от 1 до предела

2 только если скопирован 1 элемент если 2 и более то будет возвращено EMPTY_VALUE

В справке написано

Возвращаемое значение

Количество скопированных элементов массива либо -1 в случае ошибки.  При каком условии будет скопирован 1 элемент ?

 
Ilya Malev:

Я и сам в итоге так подправил. Но мне интересно, зачем изменили логику (в МТ4 масштаб был хорошим без умножения на Point). И почему нет возможности чтобы буферы без отрисовки (c DRAW_NONE) не влияли на масштаб графика.

Вы не проходите по всему индикаторному буферу. Запись

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

вообще неправильно. У Вас есть переменные rates_total, prev_calculated и смещение индикатора iStdDev. При первом проходе нужно заполнить пустые индексы:

смещение индикатора

и далее пройтись по оставшимся индексам индикаторного буфера (пройтись - значит присвоить значения). 

 
Karputov Vladimir:

Вы не проходите по всему индикаторному буферу. Запись

вообще неправильно. У Вас есть переменные rates_total, prev_calculated и смещение индикатора iStdDev. При первом проходе нужно заполнить пустые индексы:

и далее пройтись по оставшимся индексам индикаторного буфера (пройтись - значит присвоить значения). 

В оригинале у меня была функция заполняющая все нулями типа

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

 Это в данном случае не имеет значения. Если бы там и были пустые значения, они были бы в начале графика и не влияли на масштаб окна в самом конце. Тут дело совсем в другом, вот товарищ выше уже разобрался.

 
Ilya Malev:

Я и сам в итоге так подправил. Но мне интересно, зачем изменили логику (в МТ4 масштаб был хорошим без умножения на Point). И почему нет возможности чтобы буферы без отрисовки (c DRAW_NONE) не влияли на масштаб графика.

Вот так попробуйте:

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

Нет )))

При каком условии будет скопирован 1 элемент ? 

Да )))

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

Да )))

Да, тогда Ваша строка верна.
Причина обращения: