Михаил, Вас приветствую!
Если позволите, выскажу своё имхо. Подобная ошибка встречается тогда, когда появляется новый бар. Тогда OnCalculate() обрабатывает именно новый бар. Причём новый бар в буфере индикатора с индексом [rates_total-1] или [0], если тайм-серия, равен 0.0. В Вашем коде скорее всего присутствует неучтёнка этого момента. Нужно сдвинуть буферы вверх, я лично эту функцию называю UpshiftBuffer()... без этого получите пролапс линии индикатора...
Михаил, Вас приветствую!
Если позволите, выскажу своё имхо. Подобная ошибка встречается тогда, когда появляется новый бар. Тогда OnCalculate() обрабатывает именно новый бар. Причём новый бар в буфере индикатора с индексом [rates_total-1] или [0], если тайм-серия, равен 0.0. В Вашем коде скорее всего присутствует неучтёнка этого момента. Нужно сдвинуть буферы вверх, я лично эту функцию называю UpshiftBuffer()... без этого получите пролапс линии индикатора...
Добрый вечер, Денис!
int n_diff = rates_total - prev_calculated;
n-diff как раз и учитывает новый бар(ы)
AskBuffer[i] = AskBuffer[i - event_cnt + n_diff];
Причём, такой провал, бывает достаточно редко и когда n_diff = 0 :)
Думаю, что в этом "косяк":
2015.05.22 20:03:34.813 MIX (MIX-6.15,M1) n_diff = 1 2015.05.22 20:03:37.313 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:44.071 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:44.083 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:50.592 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:50.604 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:50.702 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:50.902 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:50.924 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:51.204 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:51.222 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:51.430 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:51.576 MIX (MIX-6.15,M1) n_diff = 1 2015.05.22 20:03:52.000 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:55.112 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:03:55.362 MIX (MIX-6.15,M1) n_diff = 0
Бар не должен появляться через 24 сек.
Точно, сбой возникает после появления " неурочного нового" бара, но при n_diff = 0:
2015.05.22 20:18:45.652 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:18:45.731 MIX (MIX-6.15,M1) n_diff = 1 2015.05.22 20:18:45.831 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:19:00.263 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:19:00.863 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:19:01.060 MIX (MIX-6.15,M1) n_diff = 0 2015.05.22 20:19:01.070 MIX (MIX-6.15,M1) n_diff = 1 2015.05.22 20:19:21.621 MIX (MIX-6.15,M1) n_diff = 0
Переделал на:
int n_diff = ArraySize( AskBuffer ) - prev_calculated;
Не помогло.....
Карма что ли у меня такая - "косяки" искать?
Переделал на:
Не помогло.....
Карма что ли у меня такая - "косяки" искать?
Михаил, а та версия индюка, что делал я, у Вас работает нормально?
Шаманство в OnCalculate() с буферами, имхо, не прокатит... да и нужно весь код видеть...
Михаил, а та версия индюка, что делал я, у Вас работает нормально?
Шаманство в OnCalculate() с буферами, имхо, не прокатит... да и нужно весь код видеть...
О чём Вы? Какое шаманство?
Формула очень простая:
AskBuffer[i] = AskBuffer[i - event_cnt + n_diff];
1. Случай размер буфера 100
AskBuffer[99] = AskBuffer[99 - 10 + 0];
2 Случай размер увеличился на 1 бар = 101:
AskBuffer[100] = AskBuffer[100 - 10 + 1];
Где "шаманство"?
P/S Все буферы как серии
Всё дело в том, что индикатор 3-5 мин работает правильно (время варьируется и в ту и другую стороны),
а потом "схлопывается" в ноль в одной точке, а потом вновь правильно работает!
Потом опять взбрыкивает, а потом опять тихий и спокойный
При появлении нового бара не сдвигайте данные.
В индикаторных буферах, для значений, которые левее заполненных, самостоятельно проставьте пустое значение при инициализации.
Должно работать.
При появлении нового бара не сдвигайте данные.
В индикаторных буферах, для значений, которые левее заполненных, самостоятельно проставьте пустое значение при инициализации.
Должно работать.
А может и не должно...
Я заполняю буфер ровно по его размеру (без пропусков).
Откуда берётся "0", если я в буфер его не помещаю?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Есть код в индикаторе:
Есть проверка значений буферов на "0"
В журнале нет сообщений о том, что значение буферов = 0
( сообщения появляются после "сбоя"
)
А на графике явно видно, что "0"
Как такое может быть?