Пишем торгового бота для акций

Перед прочтением этой статьи — ВАЖНО следующее: основная цель данной статьи заключается в том, чтобы показать как просто можно создать торгового робота, который может торговать российскими акциями или зарубежными акциями. Важно понимать, что создавая бота, вы лично несете ответственность за принимаемые им решения, инвестиционные операции и связанные с ними риски. Я не несу ответственности за решения, которые вы можете принять после прочтения этого материала. И я не даю никаких инвестиционных рекомендаций или советов. Не забывайте, что боты способны принести большие убытки, поэтому используйте их с осторожностью.
Пару слов обо мне
Программирование для меня это хобби и любимое дело. А так я сертифицированный системный архитектор. Поэтому прошу не особо ругать за код:‑)
Выбор брокера и библиотек
Как вы знаете, брокеров много))) но нам нужны те, у которых есть API — программный интерфейс через который наш торговый робот сможет отправлять заявки на покупку и продажу акций.
В этой статье будем рассматривать Российских брокеров для торговли Российскими акциями, если вы захотите торговать иностранными акциями — то это тоже можно сделать через них же — через СПБ биржу. (код торгового робота не поменяется — поменяется только название тикера — торговой бумаги, которой вы будете торговать).
Чтобы вас долго не мучать с выбором хорошего брокера для торгового бота, я приведу мои решения, которые сформировались после длительной практики по написанию торговых ботов, работающих в live режиме — прямо сейчас торгующих российскими акциями.
список сделок за сегодня, таймфрейм H1
Нужный и важный компонент в разработке торгового бота — это возможность тестирования вашей стратегии на истории, например используя простую библиотеку BackTrader.
1й вариант — если очень сильно хочется иметь робота, который может торговать практически через любого брокера — то есть очень хорошее решение использовать библиотеку QuikPy в связке с библиотекой BackTraderQuik — использование этих двух библиотек позволит вашему торговому роботу работать с любым брокером, у которого есть возможность предоставить вам торговый терминал Quik. А этот торговый терминал есть у большинства брокеров.
Если вам интересно, как это настроить и сделать, я могу рассказать в отдельной подробной статье, просто голосуйте за это! )))
Множество примеров по этой связке специально для вас выложил вот здесь.
2й вариант — он немного ограничивает в выборе брокеров, но даёт прекрасную возможность общаться с разработчиками API брокеров, и они. заметьте быстро и эффективно исправляют косяки) и добавляют функционал — это большой плюс!
Для брокера Финам — API еще в разработке ))) библиотеки FinamPy + BackTraderFinam
Для брокера Тинькофф — библиотека BackTraderTinkoff
* Несколько примеров кода опубликовал в их репозитории — пример стратегии которая использует только API Тинькофф
Для брокера Алор — библиотеки AlorPy и BackTraderAlor
ОФФТОПИК: Если кому интересно подключение к криптобирже — то я написал свою библиотеку backtrader_binance, она работает так же, т. е. один и тот же код, можно использовать для разных активов, вот про нее статья.
Итак, выбираем последнего брокера — Алор. )) Если вам интересно увидеть как написать торгового робота для Финам или Тинькофф — как это настроить и сделать, я могу рассказать в отдельной подробной статье, просто голосуйте за это! )))
Приступаем к написанию торгового бота
Подготовка окружения
Устанавливаем последнюю версию Python 3.11;
Устанавливаем среду разработки PyCharm Community 2023.1;
Запускаем PyCharm Community;
В нём создаем новый проект, давайте его назовём alor_trade_robot и укажем что создаем виртуальное окружение Virtualenv, с Python 3.11 => нажимаем «Create»;
После того, как проект создался и в нём создалось виртуальное окружение, мы стали готовы к установке необходимых библиотек))) Кликаем внизу слева на «Terminal» для открытия терминала, в котором как раз и будем вводить команды установки библиотек;
Устанавливаем необходимые библиотеки:
В терминале вводим команды для подключения к брокеру Алор по API:
git clone https://github.com/WISEPLAT/AlorPy
для интеграции API Алора с Backtrader:
git clone https://github.com/WISEPLAT/BackTraderAlor
после этих манипуляций у нас появилось две папки AlorPy и BackTraderAlor
Теперь необходимо установить библиотеку тестирования торговых стратегий Backtrader
pip install git+https://github.com/WISEPLAT/backtrader.git
P.S. Пожалуйста, используйте Backtrader из моего репозитория (так как вы можете размещать в нем свои коммиты).
И наконец у нас есть некоторые зависимости, которые вам нужно так же установить
pip install requests pytz websockets matplotlib
Создание конфигурации для торговой стратегии
Чтобы было легче разобраться с этими библиотеками, есть множество примеров внутри этих папок AlorPy и BackTraderAlor.
Нам нужны два файла 02 — Symbols.py и Strategy.py из папки BackTraderAlor\DataExamples
02 — Symbols.py и Strategy.py
Копируем их в корень нашего проекта.
помещаем файлы в корень проекта
Также нам понадобится файл конфигурации, он находится в папке AlorPy\Config.py
Его тоже копируем в корень проекта в папку my_config(её нужно создать), должно получиться так:
создаем свой файл конфигурации
Перед запуском примера 02 — Symbols.py, необходимо:
1) получить свой API ключ и вписать его в поле RefreshToken;
2) узнать свой UserName и вписать его в поле UserName;
3) узнать значение портфеля для Фондового рынка и вписать его в поле PortfolioStocks
— через файл AlorPy\Examples\02 — Accounts.py — получаем это значение;
4) узнать значение портфеля для Срочного рынка и вписать его в поле PortfolioFutures
— через файл AlorPy\Examples\02 — Accounts.py — получаем это значение;
5) узнать значение портфеля для Валютного рынка и вписать его в поле PortfolioFx
— через файл AlorPy\Examples\02 — Accounts.py — получаем это значение.
Напоминаю, что всё это прописываем в файле my_config\Config.py
И как все эти значения получить, так же прописано в этом же файле.
Остальные подсчета можно заполнить по необходимости, заполненного будет уже достаточно для торговли на основном счете на фондовом рынке.
Такой конфиг примерно получится:
Как получить токен Refresh Token
1) Открыть счет в Алор (можно сделать удаленно!);
2) Для получения тестового логина/пароля демо счета оставить заявку в Telegram на https://t.me/AlorOpenAPI;
4) Выбрать «Токены для доступа к API».
Проверки подключения к Алору через API
В файле 02 — Symbols.py мы должны подключить свой конфиг файл my_config\Config.py для этого открываем его и правим одну строку:
меняем AlorPy.Config на my_config.Config станет так:
назначение своего конфиг файла
Отключите LiveBars режим, установив LiveBars=False
Теперь запускаем пример для проверки подключения… Должно получиться так:
LifeDars=False, и бары пришли
Как мы видим — тест удался — бары пришли.
Теперь можно приступать к созданию первого торгового робота!!
Создание торгового робота для торговли акциями
Для создания торгового робота обычно придерживаются некоторой структуры кода, можно сказать шаблона, по которому код работает с торговой стратегией и с данными с рынка по тикеру/тикерам и после отработки выводится некоторый результат.
Как мы видим, нам осталось реализовать пункты:
«обработка этих данных стратегией»;
«выставление заявок на покупку/продажу»;
возврат результатов из стратегии;
Остальные пункты сделаны в этом примере — код достаточно интуитивный, но я всё равно приведу его здесь, ещё раз, отключив лишнее — комментируя — специально не удаляя, чтобы вам легче было сравнить.
Итак основной файл для запуска торговой стратегии называется 02 — Symbols.py, вот его код:
Внесенные в него изменения:
поменял таймфрейм на M15;
оставил применение торговой системы/стратегии ко всем тикерам;
и дату старта получения баров установил на datetime(2021, 10, 4).
Теперь основной файл стратегии Strategy.py, вот его код:
Внесенные изменения в него:
в функции def next(self): — закомментил синхронность получения баров — т.к. для моей стратегии это не нужно.
Делаем контрольный запуск, чтобы удостовериться, что все работает и ничего не сломали:
Видим, что пришли 15-минутные бары и все ОК.
Теперь можно приступать к самому интересному — написанию торговой стратегии для робота!
Пишем стратегию для торгового робота
Все будем тестировать на истории — делать backtesting для нашей торговой стратегии.
1) устанавливаем, сколько денег у нас на счету и размер комиссии
2) результат работы торговой стратегии возвращаем в главный файл и выводим на экран
пункты 1) и 2) добавляем в файл 02 — Symbols.py
3) если вы захотите включить live режим работы вашей торговой стратегии, то это делается следующими четырьмя строчками ‑. но не рекомендую этого делать, т.к. все заявки на покупку и продажу сразу начнут попадать на биржу и будут пытаться выполняться так, как у вас написано в коде!! — если вы пробегаетесь по истории — то и скрипт будет пытаться выставить в рынок по "старой" цене. а текущая цена далеко уже не та. БУДЬТЕ ЗДЕСЬ ВНИМАТЕЛЬНЫ! Для live режима — не пробегайтесь по истории.
Этот код не добавляем! Просто для инфо, как включить live режим.
Класс торговой системы имеет несколько основных методов:
init — итак понятно — здесь инициализируем вспомогательные переменные и индикаторы для потоков данных;
start — здесь однократно вспомогательным переменным присваиваем значения;
next — вызывается каждый раз при приходе нового бара по тикеру;
notify_order — вызывается, когда происходит покупка или продажа;
notify_trade — вызывается когда меняется статус позиции;
notify_data — вызывается когда меняется статус прихода бара на live режим.
Вы можете по желанию расширять/добавлять новые методы/функционал.
4) В init добавляем:
5) В start добавляем:
6) В next добавляем:
7) добавляем функцию notify_trade:
8) добавляем функцию notify_order:
пункты 4), 5), 6), 7) и 8) добавляем в файл стратегии Strategy.py
В принципе описание кода достаточно интуитивно показывает смысл стратегии, что мы всегда покупаем и продаем через 5 баров.
Стратегия: мы всегда покупаем и продаем через 5 баров
Итак, код файла 02 — Symbols.py:
Итак, код файла Strategy.py
Теперь давайте запустим эту стратегию и посмотрим результат!
результат запуска стратегии
Стоимость портфеля: 1 294 456.74
Свободные средства: 45 568 288.40
Сразу скажу, что это не грааль — и в коде есть небольшая ошибка, которая приводит к таким ошеломляющим результатам)))
Кому интересно, заснял видео с разоблачением такой сверх доходности, доступно по ссылке.
Иногда лучше один раз увидеть, чем сто раз прочитать
Поэтому создание этой стратегии есть по шагам в видео, доступно по ссылке
Напоминаю, что цель данной статьи была показать — насколько легко теперь вы можете создавать своих собственных торговых роботов. Ни каких финансовых консультаций или рекомендаций не даю — просто пишем код для торгового бота. И без многих проверок — не запускайте торгового робота в live режиме.
Итак, просто пишите код торгового робота, тестируете его на истории, включаете Live режим, и запускаете в работу)
Как мне видится, получилось довольно интересно:‑) И жду ваших коммитов / фиксов / идей!
P. S. Это код выложил на GitHub по этой ссылке. Не забудьте свой конфиг файл положить в my_config\Config.py
Всем хорошего дня! Спасибо за уделенное время! Если считаете полезным такие статьи то жду вашей позитивной оценки))
Создание Трейдинг-бота на Python
Этот проект не выходил у меня из головы уже довольно давно. Действительно, это было главной мотивацией, руководившей моей учёбой:
- Что мне нужно знать, чтобы создавать прибыльные алгоритмы автоматической торговли, развёртывать их в облаке и отслеживать во время их работы?
Проект состоит из трёх основных компонентов:
- Класс бота
— Обновляет текущие балансы портфеля- Обновляет рыночные данные- Вычисляет новый прогноз на основе новых данных- Рассчитывает новый “идеальный портфель” на основе прогноза- Выполняет заказы для достижения такого портфеля- Сохраняет то, что произошло с csv-файлами (данные, стоимость портфеля, прогноз, заказы и т.д.)
- Панель управления
— Считывает данные из csv-файлов, которые бот постоянно обновляет- Показывает всю информацию в удобном пользовательском интерфейсе
- Модель
— Самый модульный компонент в проекте- В этой статье мы будем использовать модель заполнителя
В этой статье описывается класс ботов. Обратите внимание, что это не было учтено при производстве.
Поскольку прогнозы делает модель, а сбор и обработка данных в данном случае не очень увлекательны (объединение строк в существующий фрейм данных, сохранение в .csv, простые операции), преимущество класса bot состоит в:
- Правильном соблюдение сроков выполнения операций
- Преобразовании прогнозов модели в заказы для биржи
- Размещении действительных ордеров на бирже для получения желаемого портфеля -Это включает в себя округление чисел, проверку доступных остатков и проверку минимальной стоимости заказа
- Стабильности, чтобы не прерывать торговлю в критические моменты
Хорошо иметь быстрого бота, однако мы имеем дело с Python и на самом деле не оптимизируем скорость. Бот предназначен для выполнения своей программы каждые 1 минуту, что достаточно быстро для раннего выявления тенденций.
- “ModelName” используется для определения местоположения папки модели, которая содержит её масштабаторы и параметры. Подробнее об этих параметрах позже.
- “symbol” определяет, на каком рынке Binance будет осуществляться торговля.
- ”minPctChange» ограничивает размер изменений, которые боту разрешено вносить в свой портфель (позволяет избежать рассылки спама заказами)
- “exposureMultiplier” входит в уравнение, которое преобразует прогноз в идеальную подверженность активу
Этот раздел кода расположен в конце “liveBotClass.py ”, который определяет класс bot, поэтому бота можно инициализировать, введя в терминале из корневой папки:
Как только экземпляр бота создан, он запускает функцию __init__:
Внутри self.initializeBot() находятся все функции инициализации, которые вызываются только при инициализации бота. Они проверяют, существует ли уже папка для этого бота, если да, то загружаются все прошлые данные, которые бот сохранил перед завершением работы. В противном случае он создаёт папку и файлы. Таким образом, бот может продолжить с того места, на котором остановился, если что-то пойдет не так.
Если вы обратите внимание, self.mainTradeLoop() был вызван внутри асинхронной функции, чтобы запустить бота:
Эта функция вызывает RefreshAll(), smartSignals() и saveFinish() каждую минуту. Перед вызовом smartSignals() и saveFinish() она проверяет актуальность данных путём сравнения текущей минуты с самой последней минутой в рыночных данных (lastMarketDataTS).
Большая часть кода в основном цикле служит цели обеспечения правильного выбора времени.
RefreshAll() — это короткая функция, вызывающая множество других функций:
Хотя она немного длиннее, этот код не должен быть трудным для понимания. Чтобы было понятнее, вот смысловая карта RefreshAll():
Зелёные прямоугольники представляют обновления в атрибутах класса, а жёлтые прямоугольники представляют обновления в csv-файлах.
Функция saveFinish() не используется в RefreshAll(), она вызывается после smartSignals().
Как только выполняется функция RefreshAll(), бот обновляется и готов принять решение.
Все торговые вычисления выполняются с помощью функции smartSignals(), точно так же, как все обновления данных выполняются с помощью вызова функции RefreshAll(). Эти функции в сумме составляют изрядный объём кода, но являются последней частью класса bot.
Чтобы было понятнее, вот смысловая карта smartSignals():
Как вы можете видеть, существует пара операций для проверки минимального значения, округления десятичных знаков заказов, двойной проверки доступных остатков и т.д. Очень важно, чтобы бот работал стабильно, чтобы не прерывать торговлю в ключевые моменты.
Наконец, бот вызывает saveFinish() в конце процедуры. Функция saveFinish() сохраняет временную метку, стоимость портфеля, подверженность риску активов и текущий прогноз в preds.csv. Эти данные позже используются для отображения пользовательского интерфейса.
Вы можете клонировать этот репозиторий для тестирования бота. Если всё пойдет хорошо, вы должны быть в состоянии сделать это:
В следующей статье мы рассмотрим пользовательский интерфейс бота, который создадим с помощью streamlit.
Sorry, you have been blocked
This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.
What can I do to resolve this?
You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.
Cloudflare Ray ID: 7e94c9e6bd172f49 • Your IP: Click to reveal 178.132.110.75 • Performance & security by Cloudflare
Разработка инфраструктуры и торговых ботов для ИИ-трейдинга
![]()
Примечание: данная статья преследует исключительно образовательные и развлекательные цели, не являясь прямой финансовой рекомендацией. Редакция каналов Better Programming и Nuances of Programming не несет никакой ответственности за возможные последствия предпринимаемых вами действий в области биржевой торговли.
Алгоритмический трейдинг выстраивается на основе данных, которые для этого всесторонне анализируются. Систематическая торговля, снаряженная таким научным подходом, существенно выигрывает перед дискреционной, основанной на интуитивных методах.
Тем не менее было бы ошибочным и легкомысленным предположить, что ИИ-трейдинг базируется на одной только науке о данных. В основу этой стратегии ложится совокупность нескольких сложных принципов, что требует целостного подхода.
Освоение принципов торговли и их взаимосвязей должно стать первым и наиболее важным требованием при начале проекта по автоматизации трейдинга. Вторым условием будет инфраструктура ПО, которая поможет эти принципы задействовать.
Статья основана на трехлетнем опыте группы друзей, с головой погруженных в автоматизированную торговлю криптовалютой. Она ориентирована на разработчиков, ученых по данным и трейдеров, рассматривающих вход в область алгоритмического трейдинга.
В этой статье я по пунктам расскажу, что необходимо для становления ИИ-торговли, опираясь на сотни часов опыта, которые были проведены в исследовании различных подходов. Я также расскажу об уроках, которые усвоил в процессе формирования инфраструктуры автоматизированной коллективной торговли, и пролью свет на доступные для сообщества инструменты.
Для начала определимся со значениями трех терминов, которые зачастую употребляются неоднозначно, что может вносить неясность.
- Торговая система — структура для обработки низкоуровневой логики, которая упорядочивает процесс и методы, используемые для реализации и внедрения торговых стратегий.
- Торговая стратегия — описание набора действий или событий, выполняемого по стадиям. События активируются при выполнении точных условий, описывающих конкретные ситуации на рынке. Стратегии формируются, чтобы достичь определенной цели в рамках более обширного плана торговой системы посредством открытия позиций и управления ими.
- Торговый бот — это программа, которая во время торговых сессий на основе доступных наборов данных применяет ту или иную логику, определенную в торговой стратегии. Сессии могут быть как тестовыми, где задействуются симуляции, так и реальными торговыми ситуациями, подразумевающими управление действительными ордерами на бирже.
Вид сверху
Говоря в общем, торговая стратегия реализует ряд инструкций для принятия решений на основе анализа данных рынка. Из этого следует, что качество торговой логики напрямую зависит от возможностей данного анализа.
Начнем с рассмотрения логики, программируемой человеком, а реализации ИИ оставим для других статей.
Торговые идеи формируются на основе анализа и визуализации данных.
Чтобы придумать правила, определяющие, когда покупать активы, а когда продавать, трейдеру нужно сформулировать гипотезу на основе торговых идей. Одна из наиболее актуальных областей для формирования торговых идей опирается на технический анализ.
Несмотря на то, что по мнению некоторых людей рынки ведут себя стохастически, большинство трейдеров верят, что поведение рынков во многом определяется человеческой психологией принятия торговых решений. Так как люди склонны следовать (по меньшей мере поддаваться влиянию) эмоциям, например страху или жадности, то и реагируют они предсказуемым образом, когда сталкиваются с определенными стимулами среды. В некотором смысле трейдеры верят, что это ведет к формированию среди хаотичных движений цены активов неких паттернов.
Несомненно, на цену влияют и другие факторы, которые могут приводить к формированию паттернов в разных временных масштабах. Например, микро- и макроэкономические принципы, влияющие на конкретный рынок, спрос и предложение, взаимодействие с другими рынками, глобальная политика, основные средства и др. Именно такие многосторонние и неограниченные наборы переменных и влияют на рынки, делая их прогнозирование столь сложным.
Так как алгоритмическая торговля основывается на аналитике данных, а в основе программируемой человеком логики лежат в основном наблюдения за паттернами, можно заключить, что визуализация данных также является важным компонентом. Есть причина, почему дискреционные трейдеры проводят бесчисленные часы, просто наблюдая графики рынков: они стремятся принимать решения на основе того, что видят. Как алгоритмический трейдер, вы тоже можете посматривать на графики, но тратить на это уже не так много времени, как традиционные рыночные дилеры. В вашем случае это поможет продумать торговые идеи, которые затем вы воплотите в качестве правил торговых стратегий.
Торговые стратегии вырабатываются в результате реализации, тестирования и доработки торговых идей.
Как только торговую идею удалось описать в форме правил, нужно протестировать стратегию и посмотреть, как она себя покажет в отношении исторических данных — то, что мы называем ретроспективным тестированием — и в отношении реальных данных, что мы называем бумажный трейдинг.
Тестирование торговых стратегий является важнейшим аспектом систематической торговли, поскольку точность и надежность тестов напрямую влияют на то, как они соотносятся с реальностью. Чтобы созданные тесты имели хоть какое-то значение в прогнозировании реального качества торговли, в них должны учитываться принципы реального трейдинга и все влияющие на торговые сессии переменные. В качестве примера можно привести комиссионные сборы за обмен валюты и проскальзывание, означающее разницу между курсом, по которому устанавливаются ордера, и тем, по которому они фактически исполняются биржевым механизмом сопоставления ордеров.
Эффективность живой торговли определяется оптимальностью внедрения автоматизированных торговых стратегий.
Внедрение таких стратегий в торговые сессии сравнимо с критически важным финансовым приложением, управляющим реальными деньгами. Торговый бот должен быть исключительно надежен, для чего необходимо его основательно тестировать и подвергать контролю качества.
Он также должен быть гибок и обладать функциональностью для отслеживания действий стратегий, таких как поддержание учетных записей, предоставление диапазона для администрирования, перемещения или отмены ордеров и т.д.
Чуть позже мы поговорим и о других важных моментах. Сейчас же стоит отметить, что алгоритмическая торговля требует серьезной инфраструктуры.
Освоение ключевых принципов
Как следует из раздела “Взгляд сверху”, для надежного проектирования, тестирования и внедрения торговых стратегий требуется основательная инфраструктура ПО. Мы вкратце рассмотрим ее наиболее важные элементы, которые в совокупности будем называть платформой.
Подключение биржи
Интерес общества к тем или иным биржам криптовалют то разгорается, то затухает. Когда мы только начали работать с торговыми ботами, Poloniex находилась в верху пищевой цепочки. Через несколько месяцев, к моменту, когда наша инфраструктура находилась в пригодной к использованию начальной стадии, Poloniex уже выпала из Топ-20 биржевого списка.
Причина, по которой важно торговать именно на популярных биржах, заключается в том, что только они могут предложить надлежащую ликвидность, то есть достаточный объем заявок (ордеров на покупку) и запросов (ордеров продажи). Таким образом один ордер уже не сможет существенно повлиять на стоимость.
Вам не обязательно придерживаться какой-то конкретной биржи. По меньшей мере ваша платформа должна иметь возможность подключаться к более, чем одной популярной бирже. Это особенно важно, если вы хотите воспользоваться неэффективностью бирж, например определять, приводят ли одни из них к более широким движениям цен, чем другие.
Биржи предоставляют API, который может со временем изменяться. Поэтому поддерживание различных коннекторов является долгосрочной задачей.
Ваша платформа должна уметь обрабатывать всевозможные проблемы подключений и постоянно гарантировать целостность извлекаемых из бирж данных, а также транзакций.
Подключение через интернет особо важных приложений несет в себе ряд сложностей. Существует немало регулярно возникающих проблем, которые могут оборвать, затянуть или нарушить соединение с биржей на прикладном уровне, сетевом, на уровнях API биржи и внутренних систем, а также между любым их этих уровней.
Сбор данных
Вам необходимы надежные рыночные данные, как для тестирования реализации торговой идеи, так и для принятия торговых решений. Это означает, что вам нужно обрабатывать исторические наборы данных, а также те, что поступают с бирж в реальном времени.
Биржи предоставляют сырые торговые данные или свечи небольшими частями. Вам же нужен доступ ко всей истории рынка, чтобы можно было провести статистические исследования и использовать долгосрочные индикаторы, такие как скользящие средние.
Один пробел в данных может изменить их анализ непредвиденным образом, поэтому процесс извлечения информации с бирж и построения датасетов должен быть сверхнадежен.
Сырая информация рынка является лишь стартовой точкой для бесчисленных трансформаций, которые вам необходимо сделать в поиске паттернов, корреляций и торговых возможностей.
Ваша платформа должна обеспечивать типичные исследования технического анализа, но также предоставлять инструменты для проведения собственных.
Именно это будет отличать сведения, которые вы сможете получить из данных, от того, что стандартно доступно для рядовых трейдеров.
Визуализация данных
Люди — визуальные создания. Хоть наш мозг и заключен в “черный ящик”, у нас есть развитые сенсоры для восприятия среды и отправки ценной информации в центральную нервную систему для интерпретации. Зрение при этом является нашим основным сенсором.
Алгоритмы хороши в вычислении чисел, но как человек, вы имеете существенное преимущество за счет способности визуализировать данные. Именно это и нужно, чтобы обнаружить в них ключевые моменты и придумать эффективные торговые идеи.
Для максимально эффективного анализа данных в вашей платформе должна быть интегрирована система графиков. Идеальным сценарием будет проводить расчеты с использованием признаков, позволяющих отражать всевозможные данные на типичных рыночных графиках. С помощью них вы сможете сравнивать наборы данных в поиске визуальных ключей, которых может не хватать в алгоритмах.
Тестирование стратегии
У вас должна быть возможность беспрепятственного тестирования алгоритмов в ретроспективе на исторических датасетах. Кроме того, нужно иметь возможность тестировать стратегию на перспективу, используя живые данные, как без размещения на бирже действительных ордеров — то есть без бумажной торговли — так и с размещением реальных ордеров с небольшой долей капитала, что называется форвард-тестированием.
Ни показатели ретроспективного, ни форвард-тестирования нельзя считать точными предикторами будущей эффективности, но если ваши стратегии не покажут себя хорошо в тестах, то уж точно не будет смысла доверять им свой капитал в реальных торгах.
Торговый бот должен уметь симулировать живую торговлю максимально точно как при ретроспективном тестировании, так и во время бумажной торговли. Он должен симулировать события биржи, такие как исполнение ордеров, учитывая нюансы отслеживания ордеров и администрирование, что будет описано в следующем разделе. Чем ближе симуляции будут к реальности, тем вероятнее их прогнозы будут соответствовать эффективности при живой торговле.
Это основная функциональность тестирования, необходимая до начала внедрения стратегий в реальные торги. Тем не менее есть и более продвинутые возможности платформ, которые могут оказать огромное влияние на эффективность стратегий. Некоторые из них будут полезны на ранних стадиях при проектировании стратегий и в фазе их доработки.
В качестве примера можно назвать анализ поведения стратегии не только в виде обобщенного отчета по результативности ретроспективного теста, а также на основе графической симуляции каждой сделки непосредственно в виде графиков. Такой функционал делает возможным тонкий анализ торговых правил, продвигая тонкую настройку и оптимизацию на новый уровень.
Аналогичным образом очень желательно задействовать надежное решение по отладке стратегии. Чрезвычайно важно иметь постоянный доступ к информации среды выполнения, обрабатываемой торговым ботом, чтобы эффективно обнаруживать потенциальные недостатки в определениях правил.
Управление ордерами
Размещение ордеров на первый взгляд может показаться несложной задачей. Однако торговый бот должен обладать достаточным интеллектом, чтобы также отслеживать ордера и управлять ими.
Ордера могут исполняться по разным ставкам, могут исполняться с постепенным повышением за период времени или не исполняться совсем. При каждом частичном исполнении биржа взимает соответствующую комиссию, которую тоже нужно учитывать. При этом курс может не совпадать с запланированным алгоритмом по нескольким причинам, включая проскальзывание, округление десятичных разрядов и т.п. Все эти случаи должны обрабатываться ботом, чтобы торговая сессия синхронизировалась с происходящими на бирже событиями.
Более того, бот должен выполнять хотя бы некоторые базовые операции учета балансов, чтобы выделенный капитал использовался в торговых сессиях должным образом.
Масштабируемое внедрение
Одно из основных преимуществ автоматизированного трейдинга по сравнению с ручным — это возможность работать с практически неограниченным числом стратегий. На этапе готовности ваша операция может состоять из нескольких стратегий, реализующихся на нескольких рынках ряда бирж. Для воплощения этой возможности вам потребуется инфраструктура ПО, координирующая использование ресурсов, эффективное управление которыми также является частью торгового ИИ.
Вашей платформе необходима возможность координировать развертывание сбора данных и торговые задачи на нескольких машинах, чтобы общий процесс мог масштабироваться по мере развития стратегий. При этом координирование должно происходить эффективно, позволяя стратегиям, работающим на одном рынке и бирже, использовать общий источник данных.
Масштабируемость инфраструктуры
Успешная платформа автоматизированного трейдинга должна иметь возможность опробовать различные подходы в поиске и использовании торговых возможностей. Описанные ранее ключевые принципы составляют фундамент инфраструктуры, подходящей для технического, статистического, сентимент-анализа и практически любого подхода, основанного на сборе данных.
С чего начать
Есть много путей, по которым можно пойти в направлении успешного алгоритмического криптотрейдинга. Первым вопросом потребуется обозначить цели, то есть решить, чего именно вы хотите достичь.
Если вы хотите просто попробовать свои силы и посмотреть, как оно пойдет, тогда вам наверняка не стоит утруждать себя всем тем, о чем мы здесь написали.
В серьез же обратить внимание на этот материал стоит, если вы хотите преуспеть именно в алгоритмической торговле. Успех подразумевает достижение положительных и стабильных торговых результатов. На непрофессиональном языке можно сказать просто, что успех влечет за собой последовательное зарабатывание денег.
К счастью, для освоения основных принципов, способствующих созданию торгового ИИ, вам не обязательно выстраивать всю инфраструктуру самим. На деле есть смысл и даже желательно этого избежать.
Написание кода, отстройка и стабилизация настолько объемной системы может занять годы даже для опытного разработчика. Таков уж уровень сложности. Вместо этого можно использовать открытые инструменты или принимать участие в их развитии, равно как и в становлении целых платформ.
Ваш фокус должен быть на реализации сбора данных, которые позволят развить торговые идеи, а также на воплощении этих идей в торговые стратегии. Это не только является занятной частью алгоритмической торговли, но также и фактором, определяющим то, приносят ли ваши усилия положительные и стабильные результаты. Остальное считается само собой разумеющимся.
Если вы хотите сосредоточиться на разработке именно торгового интеллекта, а не целой инфраструктуры, тогда следующим шагом будет изучение открытых платформ алгоритмической торговли в поиске наиболее подходящей для ваших нужд.
Приглашаем всех в наш основной репозиторий GitHub — возможно, вас заинтересуют наши разработки. Мы выпустили все свои продукты под лицензией Apache 2.0.
Как коренной обитатель крипто-вселенной я бы даже не подумал доверить свои стратегии корпоративным агентам, которые могут изменить условия, коммерческие политики, бизнес-модель или даже ограничить в любой момент доступ. И это отнюдь не легкие опасения. В худшем сценарии корпорация может пойти по агрессивному пути и использовать знание ваших стратегий для их опережения или даже продать эти стратегии без вашего ведома. Открытое ПО устраняет все эти опасения.