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

Перед прочтением этой статьи — ВАЖНО следующее: основная цель данной статьи заключается в том, чтобы показать как просто можно создать торгового робота, который может торговать российскими акциями или зарубежными акциями. Важно понимать, что создавая бота, вы лично несете ответственность за принимаемые им решения, инвестиционные операции и связанные с ними риски. Я не несу ответственности за решения, которые вы можете принять после прочтения этого материала. И я не даю никаких инвестиционных рекомендаций или советов. Не забывайте, что боты способны принести большие убытки, поэтому используйте их с осторожностью.
Пару слов обо мне
Программирование для меня это хобби и любимое дело. А так я сертифицированный системный архитектор. Поэтому прошу не особо ругать за код:‑)
Выбор брокера и библиотек
Как вы знаете, брокеров много))) но нам нужны те, у которых есть 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: от стратегии до успешного алготрейдинга

Торговый робот – это программный инструмент на языке Python, который автоматизирует процесс торговли на финансовых рынках. Он основан на заранее определенных стратегиях и правилах, которые позволяют роботу принимать торговые решения и исполнять сделки без необходимости вмешательства человека. В этой статье мы рассмотрим важные аспекты создания торгового робота на языке программирования Python и его использование в алготрейдинге.
Преимущества использования торгового робота
Использование торгового робота в алготрейдинге имеет множество преимуществ. Во-первых, робот способен обрабатывать и анализировать большие объемы данных намного быстрее, чем человек. Он может анализировать множество финансовых инструментов и рыночных условий одновременно, что позволяет ему принимать более информированные торговые решения.
Во-вторых, торговый робот работает без эмоций. Человеческие эмоции, такие как страх или жадность, могут негативно сказываться на процессе принятия решений в торговле. Робот же работает на основе заранее определенных стратегий и правил, что позволяет ему оставаться объективным и исключает влияние эмоций на торговые решения.
Зачем использовать Python для разработки торгового робота?
Python является одним из наиболее популярных языков программирования для разработки торговых роботов. Он обладает рядом преимуществ, которые делают его идеальным выбором для алготрейдинга.
Во-первых, Python имеет простой и понятный синтаксис, который делает его доступным для разработчиков всех уровней. Это позволяет быстро создавать и тестировать новые стратегии торговли.
Во-вторых, Python имеет огромное сообщество разработчиков и множество библиотек, специализированных на финансовом анализе и алготрейдинге. Библиотеки, такие как pandas, numpy и matplotlib, обеспечивают мощные инструменты для работы с финансовыми данными, а библиотека backtrader позволяет создавать и тестировать торговые стратегии.
Кроме того, Python является переносимым и поддерживает множество операционных систем, что делает его универсальным языком для разработки торговых роботов.
Создание торгового робота на Python
Шаг 1: Установка Python и необходимых библиотек
Первый шаг в создании торгового робота на Python – установка интерпретатора Python и необходимых библиотек. Python можно скачать с официального сайта и установить на свой компьютер. Для работы с финансовыми данными и разработки торговых стратегий важно также установить библиотеки, такие как pandas, numpy и matplotlib. Установка библиотек производится с помощью менеджера пакетов pip.
Шаг 2: Определение стратегии торговли
Прежде чем приступить к разработке торгового робота, необходимо определить стратегию торговли. Стратегия – это набор правил и алгоритмов, по которым робот будет принимать решения о входе и выходе из сделок. Стратегия может основываться на различных подходах, таких как технический анализ, фундаментальный анализ или статистические модели. Важно четко определить правила стратегии и параметры, которые будут использоваться роботом для принятия решений.
Шаг 3: Получение данных для анализа
Для разработки торгового робота необходимо иметь доступ к финансовым данным для анализа. Есть несколько способов получения данных, включая использование специализированных финансовых API, веб-скрапинг или использование исторических данных. API (Application Programming Interface) предоставляют доступ к актуальным данным о котировках, ордерах и исполнении сделок. Веб-скрапинг позволяет получать данные с веб-сайтов финансовых рынков. Исторические данные можно скачать или приобрести у поставщиков данных. Важно выбрать источник данных, который соответствует вашим потребностям и стратегии торговли.
Шаг 4: Анализ данных и разработка торговых сигналов
После получения данных необходимо проанализировать их и разработать торговые сигналы. Анализ данных может включать в себя различные техники, такие как вычисление технических индикаторов, проведение статистического анализа или применение машинного обучения. Разработанные торговые сигналы определяют условия для входа и выхода из сделок. Важно тщательно протестировать и оптимизировать торговые сигналы на исторических данных, чтобы убедиться в их эффективности.
Шаг 5: Разработка модуля управления портфелем
Управление портфелем является важной частью работы торгового робота. Модуль управления портфелем определяет, какие активы будут включены в портфель, какие позиции будут открыты и как будет распределен капитал между различными активами. Этот модуль также управляет размером позиции и риском, а также может принимать решения о ребалансировке портфеля в соответствии с заданной стратегией.
Шаг 6: Тестирование и оптимизация робота
После завершения разработки робота необходимо провести тестирование и оптимизацию. Тестирование позволяет оценить производительность робота на исторических данных и проверить его соответствие заданным правилам и стратегии. Оптимизация включает в себя настройку параметров стратегии и улучшение ее производительности. Важно использовать различные методы тестирования, такие как backtesting и forward testing, чтобы обеспечить стабильность и надежность работы робота.
Взаимодействие с биржей и исполнение сделок
Выбор биржи и получение API-ключей
Для взаимодействия с биржей и выполнения сделок необходимо выбрать подходящую биржу и получить API-ключи. API-ключи предоставляют доступ к функциям биржи, таким как получение данных о котировках и ордерах, выполнение сделок и управление портфелем. Каждая биржа имеет свои требования и процедуру получения API-ключей, которые следует изучить и выполнить.
Работа с API биржи для получения данных и выполнения сделок
После получения API-ключей можно начать работу с API биржи. API позволяет получать актуальные данные о котировках, ордерах и исполнении сделок, а также выполнять торговые операции. Важно правильно настроить запросы к API и обрабатывать полученные данные в соответствии с логикой вашего робота. Также следует учитывать ограничения и правила биржи, чтобы избежать возможных ошибок и проблем при взаимодействии.
Управление рисками и мониторинг результатов
Разработка модуля управления рисками
Управление рисками является важным аспектом торговли. Разработка модуля управления рисками позволяет контролировать потенциальные убытки и риски. Этот модуль определяет механизмы ограничения убытков, такие как стоп-лосс ордера или тейк-профит ордера, а также размер позиции и другие параметры, которые влияют на уровень риска. Управление рисками помогает сохранить стабильность и защитить портфель от больших потерь.
Мониторинг и анализ результатов торгового робота
Мониторинг результатов является важной частью работы торгового робота. Регулярный мониторинг позволяет отслеживать производительность робота, результаты его торговых операций и общее финансовое состояние портфеля. Анализ результатов помогает выявить сильные и слабые стороны робота, выявить необходимость внесения корректировок или изменений в стратегии. Также важно анализировать статистические данные, такие как доходность, максимальная просадка, коэффициент Шарпа и другие показатели, чтобы оценить эффективность и стабильность работы робота.
Заключение
В данной статье мы рассмотрели процесс создания торгового робота на языке программирования Python с нуля. Мы описали важные шаги, начиная от установки Python и необходимых библиотек, до разработки стратегии торговли, анализа данных и взаимодействия с биржей. Управление рисками и мониторинг результатов также были рассмотрены как важные аспекты успешной работы торгового робота.
Python предоставляет широкие возможности для разработки торговых роботов благодаря своей простоте, гибкости и богатому набору библиотек. Однако важно помнить, что разработка и использование торгового робота требуют тщательного тестирования, оптимизации и контроля. Постоянное улучшение стратегии и адаптация к изменениям на рынке являются ключевыми факторами успешной торговли.
FAQs
1. Можно ли использовать другой язык программирования для разработки торгового робота? Да, можно использовать и другие языки программирования для разработки торгового робота. Однако Python широко используется в алготрейдинге благодаря своей простоте, гибкости и богатому набору библиотек.
2. Каковы основные преимущества использования торгового робота? Основные преимущества использования торгового робота включают автоматизацию процесса торговли, анализ больших объемов данных, отсутствие эмоционального влияния и возможность работы круглосуточно.
3. Каким образом торговый робот взаимодействует с биржей? Торговый робот взаимодействует с биржей через API (Application Programming Interface). API позволяют получать данные о котировках, ордерах и исполнении сделок, а также выполнять торговые операции в соответствии с заданной стратегией.
4. Как важно управление рисками в алготрейдинге? Управление рисками является критически важным аспектом в алготрейдинге. Разработка и настройка модуля управления рисками позволяет контролировать потери и максимизировать прибыль, обеспечивая устойчивость и стабильность торгового процесса.
5. Каким образом мониторинг результатов помогает в улучшении работы торгового робота? Мониторинг результатов позволяет отслеживать производительность торгового робота в реальном времени. Анализ полученных данных позволяет выявить проблемные области и внести необходимые корректировки в стратегию торговли, что в конечном итоге может привести к улучшению результатов.
Как написать торгового робота: инструменты для начинающих

Тема автоматизированных систем для торговли на бирже довольно популярна в рунете в последние несколько лет. Однако начинающим инвесторам создать своего торгового робота может быть нелегко. Сегодня мы расскажем о том, как это можно сделать без лишних затрат.
Примечание: любая инвестиционная деятельность на бирже связана с определенным риском, это нужно учитывать. Кроме того, для запуска своего торгового робота вам понадобится брокерский счет, открыть его можно онлайн. Вы можете отладить свою стратегию с помощью тестового доступа с виртуальными деньгами.
Варианты создания роботов
Существует несколько вариантов создания роботизированного софта для торговли на бирже:
- Создание роботов для работы на прямом подключении – такие системы работают «в обход» торговой системы брокера, отправляя заявки напрямую в «движок» торговой системы биржи. Этот вариант используют уже опытные трейдеры, которые готовы платить в том числе и за такой способ подключения.
- Подключение к брокерской торговой системе по API. Некоторые брокеры позволяют подключать внешний торговый софт к своим торговым системам по специальным интерфейсам. Клиенты ITI Capital могут делать это с помощью API SMARTcom. В этом случае роботы могут быть достаточно сложными.
- Автоматизация операций напрямую в торговом терминале. Наиболее простой, подходящий для новичков способ, заключается в том, чтобы автоматизировать торговлю напрямую в базовой программе любого трейдера – терминале.
Как это работало раньше
Торговые терминалы предыдущих поколений можно было интегрировать с различными инструментами автоматизации. Одним из наиболее популярных, как ни странно, в свое время был Excel. С его помощью трейдеры могли настроить экспорт данных из торгового терминала, а также получать торговые приказы.

Меню для подключения Excel в одном из торговых терминалов прошлого поколения
Также распространенной практикой среди трейдеров было подключение к своим терминалам мощных систем технического анализа и разработки роботов вроде WealthLab и MetaStock. В таких случаях интеграция обычно осуществляется с помощью дополнительных библиотек.
В перечисленных случаях трейдер получал возможность автоматизации, и, в случае MetaStock и WealthLab, создания довольно сложных торговых систем, но связки с внешними программами часто оказывались ненадежными. С течением времени эта проблема была решена – в некоторых торговых терминалах появились встроенные языки программирования.
Как это работает теперь: изучаем язык TradeScript
В наши дни на российском рынке самый простой способ создать несложного торгового робота, работающего с системой брокера, это использование терминала SMARTx.
В нем есть специальный плагин с конструктором торговых роботов TradeScript. С помощью простого, но довольно мощного скриптового языка трейдеры могут создавать механические системы различного уровня сложности. Язык был изначально создан для разработки торговых роботов, он довольно прост в изучении, а многие алгоритмы схожи по написанию с Metastock, что облегчает работу пользователям, знакомым с этим программным пакетом.

Плюсом TradeScript по сравнению с Wealth-Lab и тем же Metastock является отсутствие необходимости создания сложных конструкций и использования различных коннекторов для передачи приказов в торговый терминал. Конструктор роботов встроен в SMARTx, что позволяет добиваться значительно более высокой надежности и быстродействия.
Вот пример торговой стратегии, записанной на TradeScript:
В пакете с TradeScript поставляет и модуль бэктестинга, который позволяет оценить продуктивность работы описанной стратегии на исторических данных. Помимо прочего, в системе реализована функция тестирования торговой системы «на лету» с использованием текущих биржевых данных, но без вывода приказа на биржу — время виртуальной сделки, цена и получившаяся «доходность» будут показываться в отдельном окне.

Кроме того пользователь может запускать столько одновременно работающих алгоритмов, сколько позволит тактовая частота процессора и память компьютера. Учитывая большое число слов и операндов скриптового языка, это означает возможность создания сколько угодно сложных торговых стратегий.
Что еще: отладка на тестовом доступе
Использование встроенной в торговый терминал функциональности по разработке торговых роботов – удобный и надежный способ автоматизации торговли. Однако несмотря на существующие функции для тестирования стратегий, не стоит пренебрегать и дополнительными возможностями отладки.
Поэтому мы рекомендуем перед запуском стратегии для торговли реальными деньгами «прогнать» ее на тестовом доступе. Этот шаг позволит отладить все моменты, включая реакцию программы на осуществленные сделки, без риска реальных финансовых потерь. Применение анализа с помощью исторических данных, проверки «на лету» и использование тестового доступа позволит максимально полно отладить вашу стратегию.
Разработка инфраструктуры и торговых ботов для ИИ-трейдинга
![]()
Примечание: данная статья преследует исключительно образовательные и развлекательные цели, не являясь прямой финансовой рекомендацией. Редакция каналов Better Programming и Nuances of Programming не несет никакой ответственности за возможные последствия предпринимаемых вами действий в области биржевой торговли.
Алгоритмический трейдинг выстраивается на основе данных, которые для этого всесторонне анализируются. Систематическая торговля, снаряженная таким научным подходом, существенно выигрывает перед дискреционной, основанной на интуитивных методах.
Тем не менее было бы ошибочным и легкомысленным предположить, что ИИ-трейдинг базируется на одной только науке о данных. В основу этой стратегии ложится совокупность нескольких сложных принципов, что требует целостного подхода.
Освоение принципов торговли и их взаимосвязей должно стать первым и наиболее важным требованием при начале проекта по автоматизации трейдинга. Вторым условием будет инфраструктура ПО, которая поможет эти принципы задействовать.
Статья основана на трехлетнем опыте группы друзей, с головой погруженных в автоматизированную торговлю криптовалютой. Она ориентирована на разработчиков, ученых по данным и трейдеров, рассматривающих вход в область алгоритмического трейдинга.
В этой статье я по пунктам расскажу, что необходимо для становления ИИ-торговли, опираясь на сотни часов опыта, которые были проведены в исследовании различных подходов. Я также расскажу об уроках, которые усвоил в процессе формирования инфраструктуры автоматизированной коллективной торговли, и пролью свет на доступные для сообщества инструменты.
Для начала определимся со значениями трех терминов, которые зачастую употребляются неоднозначно, что может вносить неясность.
- Торговая система — структура для обработки низкоуровневой логики, которая упорядочивает процесс и методы, используемые для реализации и внедрения торговых стратегий.
- Торговая стратегия — описание набора действий или событий, выполняемого по стадиям. События активируются при выполнении точных условий, описывающих конкретные ситуации на рынке. Стратегии формируются, чтобы достичь определенной цели в рамках более обширного плана торговой системы посредством открытия позиций и управления ими.
- Торговый бот — это программа, которая во время торговых сессий на основе доступных наборов данных применяет ту или иную логику, определенную в торговой стратегии. Сессии могут быть как тестовыми, где задействуются симуляции, так и реальными торговыми ситуациями, подразумевающими управление действительными ордерами на бирже.
Вид сверху
Говоря в общем, торговая стратегия реализует ряд инструкций для принятия решений на основе анализа данных рынка. Из этого следует, что качество торговой логики напрямую зависит от возможностей данного анализа.
Начнем с рассмотрения логики, программируемой человеком, а реализации ИИ оставим для других статей.
Торговые идеи формируются на основе анализа и визуализации данных.
Чтобы придумать правила, определяющие, когда покупать активы, а когда продавать, трейдеру нужно сформулировать гипотезу на основе торговых идей. Одна из наиболее актуальных областей для формирования торговых идей опирается на технический анализ.
Несмотря на то, что по мнению некоторых людей рынки ведут себя стохастически, большинство трейдеров верят, что поведение рынков во многом определяется человеческой психологией принятия торговых решений. Так как люди склонны следовать (по меньшей мере поддаваться влиянию) эмоциям, например страху или жадности, то и реагируют они предсказуемым образом, когда сталкиваются с определенными стимулами среды. В некотором смысле трейдеры верят, что это ведет к формированию среди хаотичных движений цены активов неких паттернов.
Несомненно, на цену влияют и другие факторы, которые могут приводить к формированию паттернов в разных временных масштабах. Например, микро- и макроэкономические принципы, влияющие на конкретный рынок, спрос и предложение, взаимодействие с другими рынками, глобальная политика, основные средства и др. Именно такие многосторонние и неограниченные наборы переменных и влияют на рынки, делая их прогнозирование столь сложным.
Так как алгоритмическая торговля основывается на аналитике данных, а в основе программируемой человеком логики лежат в основном наблюдения за паттернами, можно заключить, что визуализация данных также является важным компонентом. Есть причина, почему дискреционные трейдеры проводят бесчисленные часы, просто наблюдая графики рынков: они стремятся принимать решения на основе того, что видят. Как алгоритмический трейдер, вы тоже можете посматривать на графики, но тратить на это уже не так много времени, как традиционные рыночные дилеры. В вашем случае это поможет продумать торговые идеи, которые затем вы воплотите в качестве правил торговых стратегий.
Торговые стратегии вырабатываются в результате реализации, тестирования и доработки торговых идей.
Как только торговую идею удалось описать в форме правил, нужно протестировать стратегию и посмотреть, как она себя покажет в отношении исторических данных — то, что мы называем ретроспективным тестированием — и в отношении реальных данных, что мы называем бумажный трейдинг.
Тестирование торговых стратегий является важнейшим аспектом систематической торговли, поскольку точность и надежность тестов напрямую влияют на то, как они соотносятся с реальностью. Чтобы созданные тесты имели хоть какое-то значение в прогнозировании реального качества торговли, в них должны учитываться принципы реального трейдинга и все влияющие на торговые сессии переменные. В качестве примера можно привести комиссионные сборы за обмен валюты и проскальзывание, означающее разницу между курсом, по которому устанавливаются ордера, и тем, по которому они фактически исполняются биржевым механизмом сопоставления ордеров.
Эффективность живой торговли определяется оптимальностью внедрения автоматизированных торговых стратегий.
Внедрение таких стратегий в торговые сессии сравнимо с критически важным финансовым приложением, управляющим реальными деньгами. Торговый бот должен быть исключительно надежен, для чего необходимо его основательно тестировать и подвергать контролю качества.
Он также должен быть гибок и обладать функциональностью для отслеживания действий стратегий, таких как поддержание учетных записей, предоставление диапазона для администрирования, перемещения или отмены ордеров и т.д.
Чуть позже мы поговорим и о других важных моментах. Сейчас же стоит отметить, что алгоритмическая торговля требует серьезной инфраструктуры.
Освоение ключевых принципов
Как следует из раздела “Взгляд сверху”, для надежного проектирования, тестирования и внедрения торговых стратегий требуется основательная инфраструктура ПО. Мы вкратце рассмотрим ее наиболее важные элементы, которые в совокупности будем называть платформой.
Подключение биржи
Интерес общества к тем или иным биржам криптовалют то разгорается, то затухает. Когда мы только начали работать с торговыми ботами, Poloniex находилась в верху пищевой цепочки. Через несколько месяцев, к моменту, когда наша инфраструктура находилась в пригодной к использованию начальной стадии, Poloniex уже выпала из Топ-20 биржевого списка.
Причина, по которой важно торговать именно на популярных биржах, заключается в том, что только они могут предложить надлежащую ликвидность, то есть достаточный объем заявок (ордеров на покупку) и запросов (ордеров продажи). Таким образом один ордер уже не сможет существенно повлиять на стоимость.
Вам не обязательно придерживаться какой-то конкретной биржи. По меньшей мере ваша платформа должна иметь возможность подключаться к более, чем одной популярной бирже. Это особенно важно, если вы хотите воспользоваться неэффективностью бирж, например определять, приводят ли одни из них к более широким движениям цен, чем другие.
Биржи предоставляют API, который может со временем изменяться. Поэтому поддерживание различных коннекторов является долгосрочной задачей.
Ваша платформа должна уметь обрабатывать всевозможные проблемы подключений и постоянно гарантировать целостность извлекаемых из бирж данных, а также транзакций.
Подключение через интернет особо важных приложений несет в себе ряд сложностей. Существует немало регулярно возникающих проблем, которые могут оборвать, затянуть или нарушить соединение с биржей на прикладном уровне, сетевом, на уровнях API биржи и внутренних систем, а также между любым их этих уровней.
Сбор данных
Вам необходимы надежные рыночные данные, как для тестирования реализации торговой идеи, так и для принятия торговых решений. Это означает, что вам нужно обрабатывать исторические наборы данных, а также те, что поступают с бирж в реальном времени.
Биржи предоставляют сырые торговые данные или свечи небольшими частями. Вам же нужен доступ ко всей истории рынка, чтобы можно было провести статистические исследования и использовать долгосрочные индикаторы, такие как скользящие средние.
Один пробел в данных может изменить их анализ непредвиденным образом, поэтому процесс извлечения информации с бирж и построения датасетов должен быть сверхнадежен.
Сырая информация рынка является лишь стартовой точкой для бесчисленных трансформаций, которые вам необходимо сделать в поиске паттернов, корреляций и торговых возможностей.
Ваша платформа должна обеспечивать типичные исследования технического анализа, но также предоставлять инструменты для проведения собственных.
Именно это будет отличать сведения, которые вы сможете получить из данных, от того, что стандартно доступно для рядовых трейдеров.
Визуализация данных
Люди — визуальные создания. Хоть наш мозг и заключен в “черный ящик”, у нас есть развитые сенсоры для восприятия среды и отправки ценной информации в центральную нервную систему для интерпретации. Зрение при этом является нашим основным сенсором.
Алгоритмы хороши в вычислении чисел, но как человек, вы имеете существенное преимущество за счет способности визуализировать данные. Именно это и нужно, чтобы обнаружить в них ключевые моменты и придумать эффективные торговые идеи.
Для максимально эффективного анализа данных в вашей платформе должна быть интегрирована система графиков. Идеальным сценарием будет проводить расчеты с использованием признаков, позволяющих отражать всевозможные данные на типичных рыночных графиках. С помощью них вы сможете сравнивать наборы данных в поиске визуальных ключей, которых может не хватать в алгоритмах.
Тестирование стратегии
У вас должна быть возможность беспрепятственного тестирования алгоритмов в ретроспективе на исторических датасетах. Кроме того, нужно иметь возможность тестировать стратегию на перспективу, используя живые данные, как без размещения на бирже действительных ордеров — то есть без бумажной торговли — так и с размещением реальных ордеров с небольшой долей капитала, что называется форвард-тестированием.
Ни показатели ретроспективного, ни форвард-тестирования нельзя считать точными предикторами будущей эффективности, но если ваши стратегии не покажут себя хорошо в тестах, то уж точно не будет смысла доверять им свой капитал в реальных торгах.
Торговый бот должен уметь симулировать живую торговлю максимально точно как при ретроспективном тестировании, так и во время бумажной торговли. Он должен симулировать события биржи, такие как исполнение ордеров, учитывая нюансы отслеживания ордеров и администрирование, что будет описано в следующем разделе. Чем ближе симуляции будут к реальности, тем вероятнее их прогнозы будут соответствовать эффективности при живой торговле.
Это основная функциональность тестирования, необходимая до начала внедрения стратегий в реальные торги. Тем не менее есть и более продвинутые возможности платформ, которые могут оказать огромное влияние на эффективность стратегий. Некоторые из них будут полезны на ранних стадиях при проектировании стратегий и в фазе их доработки.
В качестве примера можно назвать анализ поведения стратегии не только в виде обобщенного отчета по результативности ретроспективного теста, а также на основе графической симуляции каждой сделки непосредственно в виде графиков. Такой функционал делает возможным тонкий анализ торговых правил, продвигая тонкую настройку и оптимизацию на новый уровень.
Аналогичным образом очень желательно задействовать надежное решение по отладке стратегии. Чрезвычайно важно иметь постоянный доступ к информации среды выполнения, обрабатываемой торговым ботом, чтобы эффективно обнаруживать потенциальные недостатки в определениях правил.
Управление ордерами
Размещение ордеров на первый взгляд может показаться несложной задачей. Однако торговый бот должен обладать достаточным интеллектом, чтобы также отслеживать ордера и управлять ими.
Ордера могут исполняться по разным ставкам, могут исполняться с постепенным повышением за период времени или не исполняться совсем. При каждом частичном исполнении биржа взимает соответствующую комиссию, которую тоже нужно учитывать. При этом курс может не совпадать с запланированным алгоритмом по нескольким причинам, включая проскальзывание, округление десятичных разрядов и т.п. Все эти случаи должны обрабатываться ботом, чтобы торговая сессия синхронизировалась с происходящими на бирже событиями.
Более того, бот должен выполнять хотя бы некоторые базовые операции учета балансов, чтобы выделенный капитал использовался в торговых сессиях должным образом.
Масштабируемое внедрение
Одно из основных преимуществ автоматизированного трейдинга по сравнению с ручным — это возможность работать с практически неограниченным числом стратегий. На этапе готовности ваша операция может состоять из нескольких стратегий, реализующихся на нескольких рынках ряда бирж. Для воплощения этой возможности вам потребуется инфраструктура ПО, координирующая использование ресурсов, эффективное управление которыми также является частью торгового ИИ.
Вашей платформе необходима возможность координировать развертывание сбора данных и торговые задачи на нескольких машинах, чтобы общий процесс мог масштабироваться по мере развития стратегий. При этом координирование должно происходить эффективно, позволяя стратегиям, работающим на одном рынке и бирже, использовать общий источник данных.
Масштабируемость инфраструктуры
Успешная платформа автоматизированного трейдинга должна иметь возможность опробовать различные подходы в поиске и использовании торговых возможностей. Описанные ранее ключевые принципы составляют фундамент инфраструктуры, подходящей для технического, статистического, сентимент-анализа и практически любого подхода, основанного на сборе данных.
С чего начать
Есть много путей, по которым можно пойти в направлении успешного алгоритмического криптотрейдинга. Первым вопросом потребуется обозначить цели, то есть решить, чего именно вы хотите достичь.
Если вы хотите просто попробовать свои силы и посмотреть, как оно пойдет, тогда вам наверняка не стоит утруждать себя всем тем, о чем мы здесь написали.
В серьез же обратить внимание на этот материал стоит, если вы хотите преуспеть именно в алгоритмической торговле. Успех подразумевает достижение положительных и стабильных торговых результатов. На непрофессиональном языке можно сказать просто, что успех влечет за собой последовательное зарабатывание денег.
К счастью, для освоения основных принципов, способствующих созданию торгового ИИ, вам не обязательно выстраивать всю инфраструктуру самим. На деле есть смысл и даже желательно этого избежать.
Написание кода, отстройка и стабилизация настолько объемной системы может занять годы даже для опытного разработчика. Таков уж уровень сложности. Вместо этого можно использовать открытые инструменты или принимать участие в их развитии, равно как и в становлении целых платформ.
Ваш фокус должен быть на реализации сбора данных, которые позволят развить торговые идеи, а также на воплощении этих идей в торговые стратегии. Это не только является занятной частью алгоритмической торговли, но также и фактором, определяющим то, приносят ли ваши усилия положительные и стабильные результаты. Остальное считается само собой разумеющимся.
Если вы хотите сосредоточиться на разработке именно торгового интеллекта, а не целой инфраструктуры, тогда следующим шагом будет изучение открытых платформ алгоритмической торговли в поиске наиболее подходящей для ваших нужд.
Приглашаем всех в наш основной репозиторий GitHub — возможно, вас заинтересуют наши разработки. Мы выпустили все свои продукты под лицензией Apache 2.0.
Как коренной обитатель крипто-вселенной я бы даже не подумал доверить свои стратегии корпоративным агентам, которые могут изменить условия, коммерческие политики, бизнес-модель или даже ограничить в любой момент доступ. И это отнюдь не легкие опасения. В худшем сценарии корпорация может пойти по агрессивному пути и использовать знание ваших стратегий для их опережения или даже продать эти стратегии без вашего ведома. Открытое ПО устраняет все эти опасения.