мы сделаем автоматическую зачистку массивов. но это не спасёт от небрежности в программировании вообще (в данном конкретном случае спасёт и, возможно, удовлетворит большинство) сравните Ваш код:
if ((curTSI>curSignal)&&(prevTSI<prevSignal)) ExtMapBuffer1[i]=Close[i]+3*ArrowShift*Point;
if ((curTSI<curSignal)&&(prevTSI>prevSignal)) ExtMapBuffer2[i]=Close[i]-ArrowShift*Point;
и наш код:
double value1,value2;
...
value1=0.0;
value2=0.0;
if ((curTSI>curSignal)&&(prevTSI<prevSignal)) value1=Close[i]+3*ArrowShift*Point;
if ((curTSI<curSignal)&&(prevTSI>prevSignal)) value2=Close[i]-ArrowShift*Point;
ExtMapBuffer1[i]=value1;
ExtMapBuffer2[i]=value2;
то есть, Вы прописываете массив выборочно, а мы - целиком, элемент за элементом каждый элемент.
Согласен, у Вас тщательнее. Я назвал это артефактами, потому что это явление происходит не на всем буфере, а только на некотором интервале, по крайней мере у меня. Впредь буду аккуратней.
И поправьте меня, если я не прав - для каждого тайм-фрейма задумано считать индикаторы только один раз, чтобы потом только возвращаться к рассчитаным значениям при повторном обращении?
И поправьте меня, если я не прав - для каждого тайм-фрейма задумано считать индикаторы только один раз, чтобы потом только возвращаться к рассчитаным значениям при повторном обращении?
поправлю. при каждом переключении таймфрейма Вы получите в результате вызова IndicatorCounted() ноль (что означает, что у Вас нет ни одного посчитанного бара), и во всех наших примерах в этом случае пересчёт происходит с нуля. именно так организованы все наши индикаторы
Действительно подходит пример. Приношу извинения. Не правильно представлял работу DRAW_SECTION. Оказывается не обязательно пустые значения заполнять Empty_Value, можно и 0.0
И поправьте меня, если я не прав - для каждого тайм-фрейма задумано считать индикаторы только один раз, чтобы потом только возвращаться к рассчитаным значениям при повторном обращении?
поправлю. при каждом переключении таймфрейма Вы получите в результате вызова IndicatorCounted() ноль (что означает, что у Вас нет ни одного посчитанного бара), и во всех наших примерах в этом случае пересчёт происходит с нуля. именно так организованы все наши индикаторы
Выходит , я неправильно представлял переключение тайм-фрейма. Тогда буду принудительно обнулять буфера индикатора. Вопроса больше нет.
Действительно подходит пример. Приношу извинения. Не правильно представлял работу DRAW_SECTION. Оказывается не обязательно пустые значения заполнять Empty_Value, можно и 0.0
EMPTY_VALUE является умолчательным. после того, как было установлено другое "пустое значение":
SetIndexEmptyValue(0,0.0);
EMPTY_VALUE уже использовать нельзя, а нужно (не можно, а нужно) использовать именно 0.0
Во как. Вообще с ног на голову. DRAW_SECTION значит правильно понимал. SetIndexEmptyValue не правильно перевел и воспринимал, Rosh судя по индикатору тоже. Говорили в школе и институте - не сбегай с английского.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
сравните Ваш код:
if ((curTSI>curSignal)&&(prevTSI<prevSignal)) ExtMapBuffer1[i]=Close[i]+3*ArrowShift*Point; if ((curTSI<curSignal)&&(prevTSI>prevSignal)) ExtMapBuffer2[i]=Close[i]-ArrowShift*Point;и наш код:
double value1,value2; ... value1=0.0; value2=0.0; if ((curTSI>curSignal)&&(prevTSI<prevSignal)) value1=Close[i]+3*ArrowShift*Point; if ((curTSI<curSignal)&&(prevTSI>prevSignal)) value2=Close[i]-ArrowShift*Point; ExtMapBuffer1[i]=value1; ExtMapBuffer2[i]=value2;то есть, Вы прописываете массив выборочно, а мы - целиком, элемент за элементом каждый элемент.
И поправьте меня, если я не прав - для каждого тайм-фрейма задумано считать индикаторы только один раз, чтобы потом только возвращаться к рассчитаным значениям при повторном обращении?
поправлю. при каждом переключении таймфрейма Вы получите в результате вызова IndicatorCounted() ноль (что означает, что у Вас нет ни одного посчитанного бара), и во всех наших примерах в этом случае пересчёт происходит с нуля. именно так организованы все наши индикаторы
почему не подходит? попробовал, подошло. Вы можете какие-нибудь подробности привести?
поправлю. при каждом переключении таймфрейма Вы получите в результате вызова IndicatorCounted() ноль (что означает, что у Вас нет ни одного посчитанного бара), и во всех наших примерах в этом случае пересчёт происходит с нуля. именно так организованы все наши индикаторы
Выходит , я неправильно представлял переключение тайм-фрейма. Тогда буду принудительно обнулять буфера индикатора. Вопроса больше нет.
EMPTY_VALUE является умолчательным. после того, как было установлено другое "пустое значение":
EMPTY_VALUE уже использовать нельзя, а нужно (не можно, а нужно) использовать именно 0.0