Блог им. akumidv

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

    • 17 сентября 2021, 11:52
    • |
    • akumidv
  • Еще

Если вы используете стратегии в трейдингвью, например чтобы быстро накидать прототип идеи из какого нибудь источника и посмотреть её, то у вас наверняка также появлялся вопрос поиска приемлемых параметров и проверка как они влияют на стратегию. Делать это вручную крайне трудозатратно. Простейшая стратегия двух скользящих средних может давать 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.
★22
26 комментариев
Крутая идея с расширением для хрома!
avatar


avatar
Надо скрин всего экрана трейдингвью. Какого-то элемента нет, расширение использует: табы стратегии, тикер и таймфрейм, сам индикатор стратегии. Потенциально мешать могут блокировщики рекламы и подобный софт, я не проверял с ними. Все это лучше на гитхаб, я подправлю — так как конечно все ситуации в браузерах и настройках предусмотреть сложно.
avatar
В гугле WebStore опубликовали расширение, можно поставить обычным способом https://chrome.google.com/webstore/detail/tradingview-assistant/pfbdfjaonemppanfnlmliafffahlohfg
avatar
Здравствуйте, хорошая идея! Только вот при рандомном подборе очень много повторяющихся вариации переменных( у меня на 4000 тыс половину как минимум это одни и те же варианты, если верить результатам бэктеста
Рамиль Ганеев, спасибо за обратную связь. Случайный не фильтрует предыдущие варианты, если у вас 4000 вариантов то возможно лучше простым перебором. Но я посмотрю функцию случайности и возможно добавлю фильтрацию.
avatar
Приветству, при загрузки результата пишет There is no data for conversion
avatar
Разобрался, спасибо огромное, офигительная штука, делаю бэктесты на свои стратегии где учитывается более 15 параметров, в ручную сложно перебирать, а здесь поставил и ушел по своим делам. Респект!

Возможно это ускорить?
avatar

Maxim Protasov, время вычисления обуcловлено двумя факторами:

1. Все вычисления стратегий происходят на сервере трейднигвью, туда отправляется запрос, происходит вычисление и получается ответ, потом этот ответ отрисовывается в таблице результатов. Все это занимает от 1 до 3 секунд обычно. Это невозможно ускорить.

2. Время открытия окна и задания параметров. Здесь открытие окна невозможно изменить, это браузер. А вот с параметрами теоретически можно ускорить, но это очень большой объем работы. Сейчас реализован проход по элементам параметров. Чем их в стратегии больше, тем дольше это происходит. Здесь задержка до 0.5 секунд обычно. Т.е. 20% от всего времени потенциально.

В новой версии 1.1. которая сегодня отправлена на публикацию немного ускорен парсинг данных, но это доли секунды.

 

По первому сообщению — сначала нужно расчитать саму стратегию, чтобы были результаты для сохранения.

 

avatar
Спасибо за расширение. Очень помогает! точнее до недавнего времени помогало. Сейчас выдает такую ошибку абсолютно на всех стратегиях. Не могу понять, в чем может быть причина.



avatar

Leonard Prokopenko, такая ошибка была 18 августа и исправлена 20 августа, у вас точно поледняя версия 1.15 расширения? 

Ошибки лучше писать на гитахбе.

avatar
akumidv, да, действительно, версия была 1.12. Поставил свежую — все работает.
Спасибо огромное! )
avatar
Глубокая благодарность за отличную программу! Теперь, с задержкой 0.25 все прекрасно работает!
avatar

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

avatar
HansQu, v2.6 отправил на публикацию. Лучше создать задачу здесь github.com/akumidv/tradingview-assistant-chrome-extension/issues

avatar
Сверхмощносильное спасибо!
avatar
а эта штука точно не взята у DavidTech?
Джорж Сорос, я сделал версию Девиду. В конце прошлого года мы не сотрудничаем. С его слов у его аудитории — аллергия на разработчиков из России.
avatar
akumidv, Спасибо за ответ! Я смотрю его канал. Он позиционирует себя как программист с 17 летним опытом, каких то отсылок на происхождение аудитории от него не замечал.По крайней мере, в pine он приуспел.
Позвольте узнать, почему сохранение настроек часто сбоит? Ну то, что русские слова идут набором иероглифов, это еще ладно, но когда сохраненное загружаешь, то нет гарантии, что все «встанет», как оно сохранено. И достаточно часто. Этим грешит и версия Давида и ваша.
Под соответствующую кодировку, чтоб не мучиться, скачал отдельный аналог эксель, 90% сразу решились. НО! нет гарантий, что все записи встают корректно в ячейки. Часто скачут вправо, слетает выравнивание по краям.  Как избавиться от перечисленных проблем и нет ли в планах сделать подобный проект для русскоязычной аудитории? Где не надо переходить по ссылке и работает с нашей кодировкой.
спасибо

Джорж Сорос, я переделываю структуры работы с параметрами, чтобы реализовать возможость устанавливать с одинаковыми именами (т.е. по порядку) и в одной строке.

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

avatar
А видео можно было и на русском сделать так, для понимания о чем оно…
avatar

Александр Трофимов, изначально целевая аудитория англоязычная — основной язык в браузере английский у > 50%.

По установкам расширения русский язык у 10%, но региональные установки в России около 5%. Вообщем нет смысла для опенсорсного расширения.

avatar
There is no data for conversion
avatar

Jozeph Mayson, this error are occurs when extension does not find results of backtesing when you click to save them or after backtesting. There are two possible reasons:

— changes in TV UI, but I checked today — it works (but some countries have early updates before another one)

— backtesting parameters for your strategy are very narrow, so strategy does not have any results (performance table is empty)

It's better to take screenshot with error and TV chart and attach it issue on github repository: github.com/akumidv/tradingview-assistant-chrome-extension/issues

 

 

 

avatar
akumidv, спасибо от души.

avatar

теги блога akumidv

....все тэги



UPDONW
Новый дизайн