Автоматизация торговли для нищеброда. Пишем, тестируем и запускаем робота за 5 минут. Подготовка стратегии на Tradingview для парсера+ВИДЕО.
Коллеги, всем добрый вечер!
В рамках данного поста, а далее в видео я расскажу о том как максимально быстро запустить своего первого робота. При этом всё это у Вас займёт не более 5 минут.
Как я уже говорил выше TV предлагает довольно обширный перечень стратегий и индикаторов (см. рисунок ниже). Многие из них ранжированы по классу популярности (количество лайков). Правда слепо доверять данному показателю не стоит.
Далее выкладываю пошаговый алгоритм действий.
1. Перед тем как запустить стратегию в бой, Вы должны убедиться, что она не перерисовывает сигналы.
Сделать на самом деле это несложно.
Самый лёгкий способ — это зайти в описание стратегии и почитать отзывы пользователь. Так как аудитория в основном англоязычная, то появление фраз типа This strategy is repainting должно является для Вас сигналом того, что стратегия представляет не то, за что её выдают.
Второй способ — это тупо залезть в код. Пугаться здесь не нужно даже если Вы не знаете встроенный язык TV. Нас интересует только одна функция security. Если Вы видите, что она обращается к более старшему тайфрейму по сравнению тем на котором Вы работаете, будьте готовы к перерисовке.
Говорить однозначно, что эти стратегии плохие нельзя, но использовать их напрямую мы не можем, для этого их нужно дополнительно редактировать (в данном посте мы это касаться не будем).
2. После того как мы выбрали стратегию и у нас есть понимание, что она не будет перерисовываться, нам нужно её протестировать, задать цвета покупки, продажи и закрытия позиции и указать их программе ParseSignal (в принципе это всё).
Более детальную информацию смотрите в видео.
Как самому написать индикатор или стратегию на tradingview на pine script
Популярная тема среди продвинутых людей: « Как самому написать индикатор или стратегию на tradingview «.
Все очень просто и делается интуитивно, в Трейдингвью применяется pine script.
Открываем внизу графиков вкладку pine script
Далее начинаем писать код
Пишем свой индикатор
Сперва нужно научиться писать индикаторы, а потом уже стратегии.
1. Сверху пишем версию pine script — можно и без этого пункта
2. слово Study — означает, что пишем как раз индикатор.
study(title= «MA Cross 14 & 28», overlay=true)
title — это название нашего индикатора, которое будет отображаться на графике
overlay=true означает отобразить поверх графика
3. Указываем входные данные. У нас это sma 14 и 28. Запишем их в переменные, short — короткий период, long — длинный период
short = sma(close, 14)
long = sma(close, 28)
4. Начинаем рисовать, это делается при помощи функции plot
plot(short, color = red, linewidth = 3)
plot(long, color = green, linewidth = 3)
Тут видно, что мы задействуем переменные, которые указали выше, а также цвет линий и ширину
Все! уже можно нажимать Сохранить (там же ) и Добавить на график!
Теперь вы видите их на графике это скользящие средние.
5. Можно жирным выделить пересечение данных MA для наглядности
Все поздравляю — индикатор готов и им можно пользоваться, подогнав цифры под себя.
Пишем свою стратегию
Тут в центре — условия, то же самое, что в индикаторах (писали выше), только сверху и снизу меняется.
Автоматизируем торговлю с помощью TradingView
А теперь скрипты и примеры их использования:
Крайне важно ограничить доступ к скриптам по белому списку IP адресов (только серверы TV). На 04.11.2021 это 52.32.178.7, 54.218.53.128, 34.212.75.30, 52.89.214.238. Можно вставить проверку в скрипты, но в примерах выше они вызываются через встроенный веб сервер PHP, открытые порты через некоторое время начнут долбить всякие боты.
Пример использования для крипты:
Если с 04 по 08 ноября закрываемся на дневках выше 4600 — купить эфир по рынку
В TV переходим на интервал 1Д, рисуем линию тренда на 4600 с 04 по 08 ноября:
Кликаем правой кнопкой по нарисованной линии — Добавить оповещение для Линия тренда.
Устанавливаем условия, жмём На закрытии бара, ставим галку URL веб-хука, в поле ниже пишем IP_сервера, жмём кнопку Больше и в поле Сообщение вписываем текст «ETHUSDT buy MARKET».
Рекомендую сначала всё вписать и сразу (до сохранения) снять галку URL веб-хука, сохранить уведомление. Если уведомление сразу не сработало — молодец, можно отредактировать — поставить галку. Первое время они будут часто срабатывать сразу после их создания 🙂
Поле Сообщение имеет вид «ТИКЕР КОМАНДА ПАРАМЕТР«, где КОМАНДА — это buy или sell, а ПАРАМЕТР — это MARKET или числовое значение, можно использовать встроенные переменные TW, такие как <
Использование webhook для Тинькова точно такое же, в поле Сообщение пишем «GAZP sell 999.99» или «AAPL buy 100». А ещё можно рисовать на одних графиках, а торговать совсем другие инструменты, можно прикрутить лоты, можно сделать переворот, можно использовать встроенные стратегии TV.
Послесловие: это не реклама, выложил то, чем пользуюсь сам. Идея и скрипты предоставлены по принципу «it works for me», не несу никакой ответственности за их работу или не работу у кого-либо. На вопросы «почему PHP?» или «почему не запускается веб сервер и вообще так всё криво реализовано?» отвечать не буду, на вопросы «как запрограммировать с помощью этого барахла мою идею?» отвечу. Если есть интересные проекты, связанные с криптой, торговыми роботами или просто подискутировать на связанные темы — пишите.
Как и зачем я писал парсер для сайта Tradingview. Автоматизация торговли своими руками
Проблема: На текущий момент наиболее удобным и полноценным программным обеспечением (далее ПО) для автоматизации торговли на российском биржевом рынке является небезызвестный ТСЛАБ.
Несмотря на несомненные плюсы в виде удобного визуального редактора для написания торговых скриптов, который позволяет писать роботов даже без знания языков программирования, есть ряд недостатков, которые делают использование данного ПО для меня крайне не практичным. И думаю не только для меня, учитывая, что средний размер счёта на Мосбирже как правило не превышает 500 тыс.р.
1. Стоимость: Абонентская плата 4500р./мес+аренда виртуального сервера (1000 р./мес.)
Это постоянная издержка ложится очень сильным бременем на финансовый результат моей торговли. Поэтому имея размер счёт в размере 500 тыс.р. и надеясь с него получить хотя бы 20% годовых, с существующими издержками вам нужно зарабатывать порядка 32-35%, чтобы выйти на плановую доходность.
2. Нестабильность работы: Несмотря на то, что мои алгоритмы работают преимущественно с рыночными заявками (тип заявок, который предполагает 100% исполнение), мои позиции часто удваивались, либо не исполнялись вовсе.
Задача:Написать ПО для автоматизации торговли для минимизации постоянных издержек с удобным интерфейсом для создания торговых скриптов, позволяющим писать торговых роботов без наличия глубоких знаний в области программирования.
Архитектура всего проекта с текущим и функционалом и планируемыми доработками представлен на рисунке ниже.
Самым главным звеном в программе несомненно является сайт Tradingview (далее TV). Он как раз и представляет нам удобный функционал для написания своих торговых скриптов за счёт встроенного языка Pine_Script.
Язык к слову сказать не требует специфических знаний и в своей основе похож на язык Easy Language пакета Metastock, а наличие интерактивной справки на русском языке делает написания кода максимально приятным.
Пример стратегии пробитие скользящей средней (буквально в три строчки кода):
Теперь имея удобный интерфейс для написания торговых скриптов, собственно осталось наладить процесс отправки заявок из TV непосредственно в торговую систему (в моём случае это программа Quik), либо напрямую на сервер брокера. Проблема лишь в том, что у TV нет открытого API для реализации данного функционала.
В попытках решить данную проблему первое, что мне пришло в голову это использовать плагин для тестирования WebSelenium и путём поиска XPath локаторов находить нужные нам элементы, которые отвечают за сигналы покупки-продажи.
Сами сигналы при этом отображаются в таблице и проблем вроде не должно было бы возникнуть. Но для поиска крайнего сигнала таблица требовала скроллинга, а элемент скроллинга мне найти так и не удалось (см. рисунок ниже).
Поэтому пришлось искать другое решение.
Визуально сигналы TV у нас отображается в элементе сanvas. Цвет сигнала при необходимости можно менять (ex: красный-продажа, зелёный-покупка).
Цвета заданные в TV мы задаём в нашем приложении. Само приложение написано на Java, графический интерфейс реализован с помощью библиотеки Swing
Далее в самой программе нам нужно выделить область canvas (либо просто сканируемую область), в которой мы будем искать контрольные цвета.
На рисунке ниже представлен сайт tradingview c тремя выбранными инструментами, по каждому из них задан цвет торгового сигнала. Эти цвета продублированы в мою программу Parse_Signal.
.
Работает она в двух потоках.
1 первый поток:
Сканирует выделенную область (в данном случае canvas).
Скан делаем классически используя функционал класса Robot:
Далее разбивает полученный скан на массив пискелей:
Ищет в массиве пикселей контрольные цвета торговых сигналов. Поиск осуществляется слева направо. Т.е. именно цвет крайнего правого пикселя является актуальным для программы:
2 поток программы осуществляет запрос цены торгуемого инструмента посредством парсинга html страницы сайта Финам. Используется плагин JSOUP. Здесь всё просто выгружаю html страницы и осуществляю поиск кода необходимого мне торгуемого инструмента (ex: Si, Sber и т.п.).
Стоить отметить, что фактически у нас получается довольно громоздкая связка TV+Парсер+Quik. И несмотря на стабильность данного решения в будущем планируется отправлять заявки не в Quik, а напрямую на сервер брокера (ex: используя как вариант интерфейс Atlentis от Алора). Библиотека правда опять реализована на С#, поэтому придётся что-то придумывать.
Данную программа позволила решить мне изначальные задачи, которые я ставил перед собой:
а именно в разы снизить постоянные издержки.
Код программы выложен в открытом доступе.
Если кто-то готов поделится своими идеями взаимодействия с TV буду очень рад увидеть это в комментариях.
Автоматический бактестинг стратегии в TradingView с сохранением результатов в CSV
Если вы используете стратегии в трейдингвью, например чтобы быстро накидать прототип идеи из какого нибудь источника и посмотреть её, то у вас наверняка также появлялся вопрос поиска приемлемых параметров и проверка как они влияют на стратегию. Делать это вручную крайне трудозатратно. Простейшая стратегия двух скользящих средних может давать 400 и более вариантов параметров. А любое увеличение кол-ва параметров и диапазона их значений приводит к необходимости перебора значений растущих в геометрической прогрессии. Например стратегия из 5 параметров по 15 значений дает 15 ^ 5 = 759 375 вариантов. Подобрать их руками, когда один вариант вычисляется пару секунд не реально.
А можно ли автоматизировать этот процесс? Ниже описание решения через расширение для браузера на основе Chrome.
В прошлый раз я публиковал статью, в которой говорил об ассистенте для tradingview реализованного как расширение для хрома. Расширение позволяло загрузить внешние сигналы покупки/продажи с метками времени на график. В этом расширении и была реализована дополнительная функциональность для тестирования стратегий.
Небольшое видео с короткими комментариями на английском (расширение для универсальности также сделано на английском).
Что расширение позволяет делать:
Все проверки начинаются с поиска лучшего состояния из текущего значения результатов тестирования стратегии, параметров по умолчанию и лучшего найденного. Логика методов такая.
Случайный метод выбирает случайным образом параметр и случайно определяет его значение из диапазона значений. Если найденное значение соответствует фильтру (или фильтр отключен) и оно лучше чем предыдущее по оптимизируемому параметру, это состояние запоминается и следующий поиск будет осуществляться из него. Случайная комбинации всех параметров не проверяется. Этот метод подойдет если параметров достаточно много и нужно попытаться улучшить текущий результат без их перебора и выйти из «неглубокого» экстремума.
Последовательный метод проходит все параметры по очереди в соответствии с заданным приоритетом. Для каждого параметра осуществляется проверка всех значений. Если при каком-то значение параметра результат лучше, то это состояние и комбинация параметров запоминаются и далее они используются для оптимизации. Метод подойдет для поиска лучшего значений в «окрестности» уже найденной комбинации параметров.
Метод отжига. Реализация его не самая эффективная, так как необходимо было решить противоречивую задачу нахождения чего-нибудь разумного за малое кол-во итераций (1000 итераций в tradingview можно перебрать в лучшем случае за час). Метод работает следующим образом. В основе метода функция температуры — т.е. «остывания» она влияет на случайность. Температура используется в трех условиях влияющих на выбор состояния:
Метод отжига больше подойдет для первичного поиска параметров. Его можно запускать множество раз — он позволяет выйти из локальных экстремумов параметров в которых будут застревать случайный и последовательный метод.
К сожалению моя реализация метода отжига неоптимальна и более того не канонична (метод коши и больцмановские формулы у меня показали плохие результаты на большом количестве параметров) и больше базируется на основе практических соображений. Если есть у кого-то ссылки на материал где рассматривается эффективная оптимизации множества параметров сразу, в т.ч. другими методами не сложными алгоритмически, буду благодарен.
Мои эксперименты с функцией обычной параболы, у которой только один экстремум, при подборе оптимума для неё в многомерном пространстве параметров (т.е. комбинация из 10-15 функций с 10ю значениями параметров это 576 650 390 625 комбинаций), показывают, что метод работает не очень. Иногда и 80% эффективности не показывает от возможного максимума (диапазон результатов обычно 85-95%). Соответственно для сложных функций все конечно будет ещё хуже, хотя он быстрый. Примерный максимум достигается за 1000 шагов и далее от количества циклов почти не улучшается (если «встряска» не выводит из экстремума), но можно перезапустить заново.
Скачать можно из репозитория на github. Прямая ссылка на архив zip.
Как установить, описывал в предыдущей статье. Коротко: