Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Потрясающая способность отвечать не на тот вопрос который задан...
Теперь объясни мне что произойдёт если:
1. Пересчиталось 100 баров, внесено в буферы от 0 по 99 включительно (давайте считать направление как таймсерию) значение 1.03
2. Вдруг подгрузилась история и prev_calculated стало равно 0
С какого бара в индикаторе будет значение 1.03???
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
Лучше объясни как избавиться от мусора ПРИ ПЕРВОМ запуске индикатора.
Ни разу не костыль. Так и делаю.
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
Так вот это и есть та проблема которую надо-бы устранить. Мне не нужен мусор (не то чтобы не нужен, а мешает отображению), но нужно сохранить предыдущие вычисления индикатора. При ПЕРВОМ запуске индикатора в буфер попадает мусор, а при подгрузке истории всё что было в буферы всунуто надо-бы сохранить... и желательно без записи в файл или тем более в GV.
добавлено:
Это затеяно для оценки просадки в режиме реального времени в каждую минуту. Советник работает неделю без остановки, а вместо недельного отображения будем видеть только последнее значение которое и без индикатора видно...
Если достаточно простого флага первый запуск / уже не первый, замените prev_calculated на static bool b_First_Run. А можно инициализацию буферов вынести в OnInint
Нет, цели там не столь примитивны.
Так вот это и есть та проблема которую надо-бы устранить. Мне не нужен мусор (не то чтобы не нужен, а мешает отображению), но нужно сохранить предыдущие вычисления индикатора. При ПЕРВОМ запуске индикатора в буфер попадает мусор, а при подгрузке истории всё что было в буферы всунуто надо-бы сохранить... и желательно без записи в файл или тем более в GV.
добавлено:
Это затеяно для оценки просадки в режиме реального времени в каждую минуту. Советник работает неделю без остановки, а вместо недельного отображения будем видеть только последнее значение которое и без индикатора видно...
Тут вам не там - это не вам предложение, Alexey Viktorov как я понимаю нужно только это - обнулить буфера при 1м запуске, а при всяких подкачках ничего в них не трогать
Поновой перепроверил что происходит если проводить инициализацию массивов буферов в OnInit().
Даже при удалении индикатора с графика и новой установки НЕ ВО ВСЕХ, а в некоторых буферах остаются старые значения. Даже не точно те которые были до того как, а одно из тех значений распространяется на несколько баров.
О! Теперь более понятно. К вечеру отвечу.
Извините за задержку с ответом. Единственный вариант сохранения рассчитанных значений для данного таймфрейма - это сохранять в файл. При этом нужно озаботиться синхронизацией - чтобы при чтении из файла данные разместились по своим барам. Самое логичное - это синхронизация по времени открытия бара, но здесь могут быть нюансы: например время открытия бара (сохранённое в файл) было 2016.09.05. 25:02, а теперь на графике есть бар у которого время равно 2016.09.05. 25:01.
А может лучше обратить внимание разработчиков на проблему инициализации индикаторных буферов? Почему-же в МТ4 такой проблемы нет? Может опять не полное понимание? Проблема в том что даже при принудительной инициализации буферов после снятия индикатора с чарта в НЕКОТОРЫХ, не во всех буферах остаётся мусор и ничем оттуда его не выковырять...
Лично я не против костылей, но только если эти костыли не слишком сложны и с положительным эффектом. Но запись в файл с последующим чтением это корявый костыль.