Есть несложный индикатор:
Собственно, фишка:
1. Ставим индюк
2. Ждем несколько баров, скажем 5-10
3. Ставим второй индюк с такими же параметрами и сравниваем.
При расчёте с конца на начало вполне может быть, разность начальных условий и всё, вместо бая селл :о)
Поставь считать все бары на каждом тике думаю результы выравняються, пока же вижу что результат зависит от времени сброса индюка на чарт.
Поставь считать все бары на каждом тике думаю результы выравняються, пока же вижу что результат зависит от времени сброса индюка на чарт.
Понятное дело, что выравняются, вот только считать все бары на каждом тике -- это изврат. Да и пересчет вроде корректный.
Т.е. варианта два1. я не замечаю какую-то (не)очевидную мелочь.
2. неправильно работает iMAOnArray
Виктор, посмотри код, я обсчитываю перерисовку.
Понятное дело, что выравняются, вот только считать все бары на каждом тике -- это изврат. Да и пересчет вроде корректный.
Т.е. варианта два1. я не замечаю какую-то (не)очевидную мелочь.
2. неправильно работает iMAOnArray
1. Может быть
2. Оно всегда некорректно работает, но не всегда это можно заметить
Понятное дело, что выравняются, вот только считать все бары на каждом тике -- это изврат. Да и пересчет вроде корректный.
Виктор, посмотри код, я обсчитываю перерисовку.
Я и так смотрю. Поставил два индикатора (предварительно сменив порядок расчета). Установил примерно через две минуты. Показания начинаю рассходиться потихоньку.
Код ниже все считает правильно и перерисовывает тоже правильно.
#property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red extern int MAPeriod = 5; extern int RSIPeriod = 5; extern int TimeFrame = 5; double MA[]; double RSI[]; int Multiplier; double Koef; int init() { Multiplier = MathMax(1, TimeFrame/Period()); Koef = 2.0/(MAPeriod + 1); IndicatorBuffers(2); SetIndexBuffer(0, MA); SetIndexBuffer(1, RSI); return(0); } int start() { int toCount = MathMin(Bars, (Bars - IndicatorCounted())*Multiplier); for (int i = toCount - 1; i >= 0; i--) { RSI[i] = iRSI(Symbol(), TimeFrame, RSIPeriod, PRICE_CLOSE, iBarShift(Symbol(), TimeFrame, Time[i])); } for (i = toCount - 1; i >= 0; i--) { if (i < Bars - 1 && MA[i] == EMPTY_VALUE) MA[i] = RSI[i]; MA[i] = RSI[i]*Koef + MA[i + 1]*(1 - Koef); } return(0); }Вывод: iMAOnArray работает неправильно! Различия между кодами начинаются только в процессе, а не сразу. Будьте бдительны.
Два дня ковырял свой индикатор. Мой вывод такой: «неправильно» работают все встроенные индикаторы типа iXXXOnArray если буфер для расчёта заполняется со старшего ТФ. Обнаружил, что все они пересчитывают только нулевой и первый бары даже когда в цикле явно указано большее количество. Если старший ТФ не используется и значения в буфере для расчёта не изменяются на барах старше первого, то встроенные индикаторы можно использовать.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Собственно, фишка:
1. Ставим индюк
2. Ждем несколько баров, скажем 5-10
3. Ставим второй индюк с такими же параметрами и сравниваем.