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.
26 Комментариев
  • Diamond
    17 сентября 2021, 13:08
    Крутая идея с расширением для хрома!
  • Diamond
    17 сентября 2021, 13:20


  • Рамиль Ганеев
    10 ноября 2021, 14:39
    Здравствуйте, хорошая идея! Только вот при рандомном подборе очень много повторяющихся вариации переменных( у меня на 4000 тыс половину как минимум это одни и те же варианты, если верить результатам бэктеста
  • Maxim Protasov
    17 ноября 2021, 17:41
    Приветству, при загрузки результата пишет There is no data for conversion
  • Maxim Protasov
    18 ноября 2021, 21:22
    Разобрался, спасибо огромное, офигительная штука, делаю бэктесты на свои стратегии где учитывается более 15 параметров, в ручную сложно перебирать, а здесь поставил и ушел по своим делам. Респект!

    Возможно это ускорить?
  • Leonard Prokopenko
    30 августа 2022, 12:27
    Спасибо за расширение. Очень помогает! точнее до недавнего времени помогало. Сейчас выдает такую ошибку абсолютно на всех стратегиях. Не могу понять, в чем может быть причина.



      • Leonard Prokopenko
        05 сентября 2022, 14:44
        akumidv, да, действительно, версия была 1.12. Поставил свежую — все работает.
        Спасибо огромное! )
  • HansQu
    20 ноября 2022, 18:09
    Глубокая благодарность за отличную программу! Теперь, с задержкой 0.25 все прекрасно работает!
  • HansQu
    17 апреля 2023, 22:49

    Блин, TV опять поменяло UI, расширение, естественно, перестало работать. Буду крайне признателен, если восстановите работоспособность.
    С неизменным уважением и благодарностью, HansQu

  • HansQu
    19 апреля 2023, 19:37
    Сверхмощносильное спасибо!
  • Джорж Сорос
    13 мая 2023, 04:43
    а эта штука точно не взята у DavidTech?
      • Джорж Сорос
        22 июня 2023, 11:24
        akumidv, Спасибо за ответ! Я смотрю его канал. Он позиционирует себя как программист с 17 летним опытом, каких то отсылок на происхождение аудитории от него не замечал.По крайней мере, в pine он приуспел.
        Позвольте узнать, почему сохранение настроек часто сбоит? Ну то, что русские слова идут набором иероглифов, это еще ладно, но когда сохраненное загружаешь, то нет гарантии, что все «встанет», как оно сохранено. И достаточно часто. Этим грешит и версия Давида и ваша.
        Под соответствующую кодировку, чтоб не мучиться, скачал отдельный аналог эксель, 90% сразу решились. НО! нет гарантий, что все записи встают корректно в ячейки. Часто скачут вправо, слетает выравнивание по краям.  Как избавиться от перечисленных проблем и нет ли в планах сделать подобный проект для русскоязычной аудитории? Где не надо переходить по ссылке и работает с нашей кодировкой.
        спасибо
  • Александр
    08 июня 2023, 12:13
    А видео можно было и на русском сделать так, для понимания о чем оно…
  • Jozeph Mayson
    14 ноября 2023, 12:35
    There is no data for conversion
      • Jozeph Mayson
        15 ноября 2023, 13:26
        akumidv, спасибо от души.

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

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