Обертка для медленного индикатора для тестирования на истории

Если технический индикатор работает очень медленно, и я хочу включить его в советник (используя iCustom()), существует ли некая "обертка", которая могла бы кэшировать результаты индикатора в файл на основе входных данных конкретного индикатора?

Таким образом, я мог бы получить лучшую скорость в следующий раз, когда я буду тестировать его с тем же набором параметров, поскольку «обертка» может читать результат из файла, а не пересчитывать результат из индикатора.


person william007    schedule 20.05.2017    source источник


Ответы (2)


Я слышал, что некоторые разработчики сделали это для своих нужд, чтобы ускорить тестирование на истории, но, насколько я знаю, общедоступного решения нет. Если бы мне нужно было решить эту задачу, я бы создал класс с двумя полями (дата-время и значение индикатора или N буферов индикатора) и класс-коллекцию, аналогичный CArrayObj.mqh, но с возможностью применения бинарного поиска или начать искать элемент с определенного индекса, а не с самого начала массива.

person Daniel Kniaz    schedule 20.05.2017

В последних сборках MT4 добавлены ОЧЕНЬ ограничительные условия для индикаторов.

В первые годы существования MT4 это было не так жестоко, как в наши дни.


ФАКТ №1: fileIO в 10 000–100 000 раз медленнее, чем memIO:

Это означает, что от «предварительного кэширования» значений на диск нет никакой пользы.


ФАКТ № 2: Производительность обработки имеет ЖЕСТКИЙ ПОТОЛОК:

Все, да ВСЕ, пользовательские индикаторы, которые используются в терминале MetaTrader4 (непосредственно в графическом интерфейсе или косвенно, через шаблон(ы), или вызываются через iCustom() вызовы и в тестере стратегий через .tpl + iCustom() ) ВСЕ ЭТИ ПОДЕЛИТЬСЯ В ОДНОЙ ТЕМЕ...


ФАКТ № 3: Тестер стратегий наиболее требователен к скорости:

Таким образом, удалите все, действительно ВСЕ, неосновные индикаторы из шаблона tester.tpl и сохраните его как «пустой», чтобы избежать какой-либо части такой неосновной обработки.

Затем перепроектируйте пользовательский индикатор, где это возможно, чтобы избежать ненужных операций ЦП и распределения памяти.

Я помню дизайн пользовательских индикаторов с действительно глубокими извилинами, которые можно было бы перепроектировать, чтобы сохранить только треугольную разреженную матрицу с необходимыми обновлениями, что увеличило скорость обработки индикатора более чем в 10 000 раз, так что правильная проверка кода.

Итак, лучше запустить отдельный терминал MetaTrader4 только для обратного тестирования, чем ждать много часов только из-за несжимаемого характера числовой обработки в условиях пробок при совместном использовании CustomIndicator-solo-Thread, который никто не планирует. может улучшиться.


ФАКТ №4: ОС может повысить приоритет процесса:

Попав в дьявольскую зону, обычной практикой является раскрутка PRIO для StrategyTester MT4, вплоть до «RealTime PRIO» в инструментах O/S.

Можно даже дополнительно «заблокировать» этот MT4-процесс на определенном процессорном ядре (ядрах) и настроить все остальные процессы с соседним CPU-core-AFFINITY, чтобы эти две отдельные группы процессов не перескакивали один на процессор другой группы. -ядро(я). Сложно, но если вы хотите добиться максимальной производительности, это необходимо.

person user3666197    schedule 23.05.2017