Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Провёл небольшое стресс-тестирование. Выключил интернет, запустил индикатор с панелью на график. Параметры уже предоставил выше. Потом включил интернет, получил такой результат:
Индикатор вылетел.
Ещё заметил странности. График М15 на USDCHF.
Если посмотрим на график USDCHF, а вернее на красную кривую индикатора МА(USDCHF, H1), то за последние 7 часов переход на следующее значение происходил в 00 минут 5 раз. Выделил красными вертикалями. И только последние 2 часа всё нормально. Синие вертикали. Имхо, явный косяк с заполнением буферов...
Провёл небольшое стресс-тестирование. Выключил интернет, запустил индикатор с панелью на график. Параметры уже предоставил выше. Потом включил интернет, получил такой результат:
Индикатор вылетел.
Ещё заметил странности. График М15 на USDCHF.
Если посмотрим на график USDCHF, а вернее на красную кривую индикатора МА(USDCHF, H1), то за последние 7 часов переход на следующее значение происходил в 00 минут 5 раз. Выделил красными вертикалями. И только последние 2 часа всё нормально. Синие вертикали. Имхо, явный косяк с заполнением буферов...
Провёл небольшое стресс-тестирование. Выключил интернет, запустил индикатор с панелью на график. Параметры уже предоставил выше. Потом включил интернет, получил такой результат:
Индикатор вылетел.
В строке 211 в позиции курсора 34 идёт обращение к предопределённому массиву time[]:
DrawData(mouse_bar_index,time[mouse_bar_index]);
Выходит, что индекс в массив передан некорректный.
Больше rates_total-1 он вряд ли может быть, скорее всего равен -1, так как получает свои значения в обработчике OnChartEvent функцией iBarShift(), которая может вернуть -1:
В функции DrawData() некорректное значение индекса обрабатывается при вызове CopyRates(), которая не получит данных при отрицательном индексе, и после этого будет осуществлён выход из DrawData():
Значит - перед обращением к массиву time[] нужно проверять индекс бара, передаваемый в массив (в строке 211):
В общем - теория. Не тестировал, так как занят разработкой продолжения темы (цветные буферы мульти- индикаторов и такое прочее). После публикации очередной статьи по этой теме, буду проверять и тестировать (если Вы раньше меня не протестируете с внесением изменений в стр.211)
В строке 211 в позиции курсора 34 идёт обращение к предопределённому массиву time[]:
Выходит, что индекс в массив передан некорректный.
Больше rates_total-1 он вряд ли может быть, скорее всего равен -1, так как получает свои значения в обработчике OnChartEvent функцией iBarShift(), которая может вернуть -1:
В функции DrawData() некорректное значение индекса обрабатывается при вызове CopyRates(), которая не получит данных при отрицательном индексе, и после этого будет осуществлён выход из DrawData():
Значит - перед обращением к массиву time[] нужно проверять индекс бара, передаваемый в массив (в строке 211):
В общем - теория. Не тестировал, так как занят разработкой продолжения темы (цветные буферы мульти- индикаторов и такое прочее). После публикации очередной статьи по этой теме, буду проверять и тестировать (если Вы раньше меня не протестируете с внесением изменений в стр.211)
Артём, индекс бара может быть и текущий, iBarShift() возвращает 0. А вот в CopyRates() меньше 1 засунуть нельзя. Поэтому, наверное надо писать iBarShift()+1 в любом варианте, так-как номер бара и количество баров не равны.
Артём, индекс бара может быть и текущий, iBarShift() возвращает 0. А вот в CopyRates() меньше 1 засунуть нельзя. Поэтому, наверное надо писать iBarShift()+1 в любом варианте, так-как номер бара и количество баров не равны.
В данном контексте: индекс - и есть номер бара
В данном контексте: индекс - и есть номер бара
Артём, индекс — да, он может быть и нулю равен. Но количество копируемых элементов
нулю не может быть равно.
Точно так-же как количество позиций и индекс в списке позиций…
Артём, индекс — да, он может быть и нулю равен. Но количество копируемых элементов
нулю не может быть равно.
Точно так-же как количество позиций и индекс в списке позиций…
Вот здесь:
куда указывает index ?
Вот здесь:
куда указывает index ?
Всё, умолкаю. Я не смотрел код функции DrawData(mouse_bar_index,time); потому и ошибался…
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "Готовим мультисимвольные мультипериодные индикаторы"
Artyom Trishkin, 2023.11.01 04:46
...После публикации очередной статьи по этой теме, буду проверять и тестировать (если Вы раньше меня не протестируете с внесением изменений в стр.211)
Чтобы что-то тестировать, нужно быть в парадигме происходящего ))
Я понял, что мне легче свою версию набросать, т.к. мне не близок текущий подход. В частности, мне кажется, что класс CIndMSTF какой-то супер класс. Потом на его базе создаётся куча индикаторных классов. Жуть - файл IndMSTF.mqh на 4 тыс. строк кода )) Я пошёл по пути использования в качестве индикаторной коллекции экземпляр класса CIndicators. Очень удобно. Не нужно изобретать велосипед...
Потом зачем в классе CIndMSTF хранить данные по буферам (SBuffer m_buffers[])? Один раз обсчитали их в OnCalculate() и хватит. Т.е. приняли как параметр по ссылке, посчитали и отдали...
Напишу ещё попозже о том, с чем не согласен, как закончу свою версию...
Да, понравилось, что есть вот этот механизм:
...При работе с данными не текущего графика для исключения "освобождения" таймсерии, необходимо не реже. чем раз в две минуты обращаться к этой таймсерии. В этом случае будет происходить "удержание" таймсерии, что ускорит к ней обращение (не нужно будет каждый раз дожидаться синхронизации данных)...
Артём, ещё такой момент. Если статьи пишутся как пособие, к-рое есть желание изучать, то имхо, не хватает схем взаимоотношений тех, классов, к-рые разработчик создаёт...
Потом, зачем выкладывать код всех индикаторов в материал статьи? Я о б этом разделе - "Полный список всех классов-наследников базового класса мультисимвольного мультипериодного индикатора". Специально посмотрел, сколько строк кода там.
Вот начало:
А вот конец:
Почти 2 тыс. Ошалеть!