akumidv
akumidv личный блог
17 сентября 2021, 11:52

Автоматический бактестинг стратегии в TradingView с сохранением результатов в CSV

Если вы используете стратегии в трейдингвью, например чтобы быстро накидать прототип идеи из какого нибудь источника и посмотреть её, то у вас наверняка также появлялся вопрос поиска приемлемых параметров и проверка как они влияют на стратегию. Делать это вручную крайне трудозатратно. Простейшая стратегия двух скользящих средних может давать 400 и более вариантов параметров. А любое увеличение кол-ва параметров и диапазона их значений приводит к необходимости перебора значений растущих в геометрической прогрессии. Например стратегия из 5 параметров по 15 значений дает 15 ^ 5 = 759 375 вариантов. Подобрать их руками, когда один вариант вычисляется пару секунд не реально.

А можно ли автоматизировать этот процесс? Ниже описание решения через расширение для браузера на основе Chrome.
Автоматический бактестинг стратегии в TradingView с сохранением результатов в CSV

В прошлый раз я публиковал статью, в которой говорил об ассистенте для tradingview реализованного как расширение для хрома. Расширение позволяло загрузить внешние сигналы покупки/продажи с метками времени на график. В этом расширении и была реализована дополнительная функциональность для тестирования стратегий.

Небольшое видео с короткими комментариями на английском (расширение для универсальности также сделано на английском).




Что расширение позволяет делать:

  • автоматически определять список параметров стратегии (цифры, списки, чекбоксы)
  • формировать диапазон цифровых значений (текущее значение параметра делится на 2 для начального значения и умножается на 2 для конечного значения)
  • сохранять шаблон параметров для ручной правки, с указанием начала и окончания интервала параметров, шага параметров, значения параметров по умолчанию, их приоритета (для последовательного метода) в формате CSV (разделить запятая)
  • загружать эти параметры из CSV файла, при этом в переборе параметров будут использоваться только указанные в файле параметры
  • Конфигурировать модель оптимизации параметров стратегии:
    • выбирать любой результат стратегии как параметр, например «Net profit»
    • выбирать способ оптимизации — максимизация или минимизация значения
    • выбирать метод оптимизации из случайного, последовательного или метода оптимизации отжигом.
  • фильтровать все полученные результаты (т.е. исключать из выборки лучшего найденное значение) по какому-то параметру если он больше/меньше какого-то значения.
  • устанавливать количество циклов поиска параметров для метода отжига или случайного метода (для последовательно рассчитываются автоматически)
  • все результаты сохраняются после каждой итерации изменения параметров в хранилище браузера и их можно сохранить в любой момент, в том числе при перезагрузки страницы, в файл CSV (разделитель запятая, для открытия в русском Excel можно заменить все запятые на точки с запятой, а точки на запятые — для цифр)
  • результаты содержат все полученные данные таблицы результатов тестирования стратегии и проверяемые параметры 


Все проверки начинаются с поиска лучшего состояния из текущего значения результатов тестирования стратегии, параметров по умолчанию и лучшего найденного. Логика методов такая.

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


Последовательный метод проходит все параметры по очереди в соответствии с заданным приоритетом. Для каждого параметра осуществляется проверка всех значений. Если при каком-то значение параметра результат лучше, то это состояние и комбинация параметров запоминаются и далее они используются для оптимизации. Метод подойдет для поиска лучшего значений в «окрестности» уже найденной комбинации параметров.

 

Метод отжига. Реализация его не самая эффективная, так как необходимо было решить противоречивую задачу нахождения чего-нибудь разумного за малое кол-во итераций (1000 итераций в tradingview можно перебрать в лучшем случае за час). Метод работает следующим образом. В основе метода функция температуры — т.е. «остывания» она влияет на случайность. Температура используется в трех условиях влияющих на выбор состояния:

  • определение отклонения от текущего значения параметра. Чем больше циклов — тем ближе к текущему значению будет случайно выбрано значение одного случайного параметра
  • определение случайности сохранения текущего неоптимального найденного состояния. В начале тестирования почти всегда даже плохое состояние будет запоминаться и дальнейший поиск будет идти от него, но периодически состояние будет возвращаться к лучшему. К окончанию цикла, поиск нового состояния почти всегда будет идти от найденного лучшего значения, т.е. функция будет пытаться его улучшить (в конце цикла похоже на случайный метод, но разброс значений параметров будет ближе к найденному лучшему значению)
  • добавлен метод «встряхивания» в зависимости от температуры, будет случайно определяться новое состояние путем произвольного выбора значений всех параметров сразу. По мере увеличения кол-ва циклов вероятность полной "встряски" будет падать. Примерно после половины циклов тестирования, вероятность «встряхивания» стремится к 0. 

Метод отжига больше подойдет для первичного поиска параметров. Его можно запускать множество раз — он позволяет выйти из локальных экстремумов параметров в которых будут застревать случайный и последовательный метод.

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

Мои эксперименты с функцией обычной параболы, у которой только один экстремум, при подборе оптимума для неё в многомерном пространстве параметров (т.е. комбинация из 10-15 функций с 10ю значениями параметров это 576 650 390 625 комбинаций), показывают, что метод работает не очень. Иногда и 80% эффективности не показывает от возможного максимума (диапазон результатов обычно 85-95%). Соответственно для сложных функций все конечно будет ещё хуже, хотя он быстрый. Примерный максимум достигается за 1000 шагов и далее от количества циклов почти не улучшается (если «встряска» не выводит из экстремума),  но можно перезапустить заново.


Скачать можно из репозитория на github. Прямая ссылка на архив zip.

Как установить, описывал в предыдущей статье. Коротко:

  1. Скачиваем и распаковываем.
  2. Переходим в расширения browser://extensions, включаем режим разработчика
  3. Кликаем на кнопку «Загрузить распакованное расширение» и указываем путь к директории куда распаковали (там будет файл manifest.json)
  4. Открываем график tradingview. Если был открыт, то обязательно перезагружаем страничку.
  5. Кликаем на расширение и на кнопку «Test strategy». Если стратегия есть на графике расширение запустит тестирование автоматически.
  6. Если нужно поменять параметры тестирования, то скачиваем шаблон, редактируем и загружаем его и снова запускаем тестирование.
PS Я отправил на публикацию расширение в Google webstore под названием «Tradingview assistant», но проверка долгая. И актуальная версия всегда будет в github. Кстати код открыт, лицензия GPL-3.0.
29 Комментариев
  • Diamond
    17 сентября 2021, 13:08
    Крутая идея с расширением для хрома!
  • Diamond
    17 сентября 2021, 13:20


Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн