Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот, что получилось.
Я еще упростил 1-ю версию индикатора и посмотрел что она считает. Оказалось, что функция iMAOnArray работает неправильно (или я не понимаю как ей пользоваться ;). Код для проверки:
Лог:
Сразу после загрузки : [1]: 2 [2]: -2 0.0 [3]: -1 -1.5 [4]: 0 -0.5 [5]: 0 0.0 [6]: -1 -0.5 [7]: 1 0.0 [8]: 1 1.0 [9]: -2 -0.5
Появился новый бар : [1]: -2 [2]: 2 0.0 [3]: -2 -1.5 [4]: -1 -0.5 [5]: 0 0.0 [6]: 0 -0.5 [7]: -1 0.0 [8]: 1 1.0 [9]: 1 -0.5
Перезапустили индюк: [1]: -2 [2]: 2 -0.0 [3]: -2 -0.0 [4]: -1 -1.5 [5]: 0 -0.5 [6]: 0 -0.0 [7]: -1 -0.5 [8]: 1 -0.0 [9]: 1 1.0
Вариант "(buffer1[i+1] + buffer1[i])/2.0":
Сразу после загрузки : [1]: -2 [2]: 2 0.0 [3]: -2 0.0 [4]: -1 -1.5 [5]: 0 -0.5 [6]: 0 0.0 [7]: -1 -0.5 [8]: 1 0.0 [9]: 1 1.0
Появился новый бар : [1]: 1 [2]: -2 -0.5 [3]: 2 0.0 [4]: -2 0.0 [5]: -1 -1.5 [6]: 0 -0.5 [7]: 0 0.0 [8]: -1 -0.5 [9]: 1 0.0
Перезапустили индюк: [1]: 1 [2]: -2 -0.5 [3]: 2 0.0 [4]: -2 0.0 [5]: -1 -1.5 [6]: 0 -0.5 [7]: 0 0.0 [8]: -1 -0.5 [9]: 1 0.0
Т.е. после появления нового бара buffer1 содержит правильные значения, а iMAOnArray их не видит.
Хочу просто добавить, что это касается только индикаторных буферов, но не пользовательских массивов.
Свой индюк переделал как раз с использованием массивов. Все работает, как швейцарские часы.
Вот, что получилось.
Я еще упростил 1-ю версию индикатора и посмотрел что она считает. Оказалось, что функция OnArray работает неправильно (или я не понимаю как ей пользоваться ;). Код для проверки:
Т.е. после появления нового бара buffer1 содержит правильные значения, а OnArray их не видит.
Не понял о чем речь. Индикатор изначально написан неправильно (зачем использовать ArraySetAsSeries( ) для индикаторного буфера?). Почему так написана не симметрично относительно буферов функция Comment()?
Я переписал индикатор для проверки:
Запустил на графике.
Видно, что значения буферов buffer2[] и buffer3[], построенных разными способами, совпадают. Или вопрос был в чем-то другом?
Или вопрос был в чем-то другом?
Имено в другом.
Ситуация примерно такая. Хочу на старшем ТФ видеть ситуацию с младшего. Для этого надо чтобы при появлении на младшем ТФ нового бара индикатор обновлял свои значения, но он не хочет этого делать, т.к. не правильно работает функция iMAOnArray с индикаторным буфером.
У Вас индикатор показывает на ТФ М1, ситуацию с М1.
Рош посмотрите внимательно коды выше Вашего поста, думаю будет понятно о чем спич.
Или вопрос был в чем-то другом?
Имено в другом.
Ситуация примерно такая. Хочу на старшем ТФ видеть ситуацию с младшего. Для этого надо чтобы при появлении на младшем ТФ нового бара индикатор обновлял свои значения, но он не хочет этого делать, т.к. не правильно работает функция iMAOnArray с индикаторным буфером.
У Вас индикатор показывает на ТФ М1, ситуацию с М1.
Рош посмотрите внимательно коды выше Вашего поста, думаю будет понятно о чем спич.
Объяснение такое: все встроенные индикаторы, которые рассчитываются на массивах (iBandsOnArray, iCCIOnArray, iEnvelopesOnArray, iMomentumOnArray, iMAOnArray, iRSIOnArray, iStdDevOnArray), написаны со своей встроенной оптимизацией, которая экономно рассчитывает последние 1-2 бара. При этом алгоритм расчета в какой-то мере опирается на значение количества неизмененных баров с момента последнего пришедшего тика (вспомните IndicatorCounted). Такой механизм экономного расчета удовлетворяет в 99% случаев. Меняться это не будет, если Ваш случай не подходит под данный механизм расчета, Вы можете написать собственную функцию, что собственно Вы и сделали.
Спасибо, Рош. Да я не против, что меняться не будет, просто все "скользские места" лучше сразу описать в документации, чтобы не тратить время на поиск "ошибок". А то периодически всплывает одно и тоже (например о сравнении double). А также структурировать и может быть использовать перекрестные ссылки, а то я вчера тоже, нашел "ошибку" и написал в ветке 'Обновленный клиентский терминал MetaTrader 4 build 211 от 26 февраля 2008'. Хотя честно поискал в хэлпе по поводу работы функции Time[], но ответ был в описании RefreshRates(), а все помнить, к сожалению, не получается. Вобщем такие вот пожелания. Вопрос закрыт.