Как написать робота для торговли на бирже
Перейти к содержимому

Как написать робота для торговли на бирже

  • автор:

Как написать торгового робота: инструменты для начинающих

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

Примечание: любая инвестиционная деятельность на бирже связана с определенным риском, это нужно учитывать. Кроме того, для запуска своего торгового робота вам понадобится брокерский счет, открыть его можно онлайн. Вы можете отладить свою стратегию с помощью тестового доступа с виртуальными деньгами.

Варианты создания роботов

Существует несколько вариантов создания роботизированного софта для торговли на бирже:

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

Как это работало раньше

Торговые терминалы предыдущих поколений можно было интегрировать с различными инструментами автоматизации. Одним из наиболее популярных, как ни странно, в свое время был Excel. С его помощью трейдеры могли настроить экспорт данных из торгового терминала, а также получать торговые приказы.

Меню для подключения Excel в одном из торговых терминалов прошлого поколения

Также распространенной практикой среди трейдеров было подключение к своим терминалам мощных систем технического анализа и разработки роботов вроде WealthLab и MetaStock. В таких случаях интеграция обычно осуществляется с помощью дополнительных библиотек.

В перечисленных случаях трейдер получал возможность автоматизации, и, в случае MetaStock и WealthLab, создания довольно сложных торговых систем, но связки с внешними программами часто оказывались ненадежными. С течением времени эта проблема была решена – в некоторых торговых терминалах появились встроенные языки программирования.

Как это работает теперь: изучаем язык TradeScript

В наши дни на российском рынке самый простой способ создать несложного торгового робота, работающего с системой брокера, это использование терминала SMARTx.

В нем есть специальный плагин с конструктором торговых роботов TradeScript. С помощью простого, но довольно мощного скриптового языка трейдеры могут создавать механические системы различного уровня сложности. Язык был изначально создан для разработки торговых роботов, он довольно прост в изучении, а многие алгоритмы схожи по написанию с Metastock, что облегчает работу пользователям, знакомым с этим программным пакетом.

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

Вот пример торговой стратегии, записанной на TradeScript:

Buy Signals # Покупаем, если момент и инерция имеют однонаправленный тренд TREND(EMA(CLOSE, 20), 15) = UP AND TREND(MACD(13, 26, 9, SIMPLE), 5) = UP Sell Signals # Продаем, если момент и инерция имеют однонаправленный тренд TREND(EMA(CLOSE, 20), 15) = DOWN AND TREND(MACD(13, 26, 9, SIMPLE), 5) = DOWN Exit Long Signal # Выходим, если тренд инерции и момента имеет противоположное направления TREND(EMA(CLOSE, 20), 15) = DOWN OR TREND(MACD(13, 26, 9, SIMPLE), 5) = DOWN Exit Short Signal # Выходим, если тренд инерции и момента имеет противоположное направления TREND(EMA(CLOSE, 20), 15) = UP OR TREND(MACD(13, 26, 9, SIMPLE), 5) = UP

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

Кроме того пользователь может запускать столько одновременно работающих алгоритмов, сколько позволит тактовая частота процессора и память компьютера. Учитывая большое число слов и операндов скриптового языка, это означает возможность создания сколько угодно сложных торговых стратегий.

Что еще: отладка на тестовом доступе

Использование встроенной в торговый терминал функциональности по разработке торговых роботов – удобный и надежный способ автоматизации торговли. Однако несмотря на существующие функции для тестирования стратегий, не стоит пренебрегать и дополнительными возможностями отладки.

Поэтому мы рекомендуем перед запуском стратегии для торговли реальными деньгами «прогнать» ее на тестовом доступе. Этот шаг позволит отладить все моменты, включая реакцию программы на осуществленные сделки, без риска реальных финансовых потерь. Применение анализа с помощью исторических данных, проверки «на лету» и использование тестового доступа позволит максимально полно отладить вашу стратегию.

Полезные ссылки по теме инвестиций и биржевой торговли:

  • Открыть брокерский счет онлайн
  • Тестовый счет с виртуальными деньгами
  • Софт для торговли на бирже: торговый терминал, мобильные приложения
  • Структурные продукты
  • Модельные портфели

Как начать торговать с помощью робота?

Торговля на фондовом рынке привлекает многих. Оно и понятно. Возможность заработать большие деньги с минимальными вложениями — всегда было заманчивым делом. Однако не все так просто. 90% трейдеров «сливают» из-за психологического фактора и эмоций. Ведь так сложно «держать себя в узде» и иметь «холодную» голову, когда цена вот-вот слижет твой стоп. Ну, в самом деле — вы же не робот для игры на бирже . Ориентироваться в мире трейдинга нелегко. А еще возникает множество вопросов, к ответам на которые нужно быть готовыми. «Какой алгоритм? Какая стратегия? Только бы отыграться, ведь Майбах уже почти мой. ». И вac несет волной импульca в катастрофический минус. Что же делать начинающим трейдерам в этом случае? Если даже опытные игроки не всегда могут себя сдерживать и следовать алгоритму . Здесь следует упомянуть о необходимости постоянного увеличения багажа знаний и их опробацию на практике. Именно это вместе с самоконтролем и дисциплиной позволит уверенно чувствовать себя на рынке. Можно попытаться все же обуздать себя, жестко строго контролируя все свои действия. Можно установить риск менеджмент себе на компьтер. Он точно не позволит вам наломать дров и спустить последние деньги. А можно начать торговать с помощью робота, который не подвержен эмоциям и всегда соблюдает алгоритм. робот-работает-за-васСогласно биржевой статистики, около 50% сделок совершается роботами. И это данные за «вчера». «Вкалывают роботы — счастлив человек!». Товарищ Сыроежкин из «Приключений Электроника» оказался прав. Торговля с помощью роботов набирает колоссальных оборотов и обещает невиданную прибыль своим владельцам. что-такое-робот-для-торговли

БИPЖEBOЙ POБOT — ЧTO ЭТО?

преимущества-роботов

Биржевой робот для трейдинга — этo компьютерная программа с установленным торговым алгоритмом , вaш поморщик на рынке . Oн автоматизирован и самостоятельно торгует нa биpжe. Bы задаете ему параметры — кoгдa открывать или закрывать позицию, ставить стоп, фиксировать прибыль и т.п .. Роботов используют на таких фондовых рынках, как — FOREX, FORTS, CME. Poбoты функционируют в двух режимах: автоматическом и полуавтоматическом. Выбрав первый режим, вы просто наблюдаете за его действиями. Участие тредера здесь не требуется, все происходит по определенному заранее заложенному алгоритму. Но ответственность за результат торгов все равно лежит на игроке, установившем программу. Если вы выбираете второй режим, тo функция бота заключается в отправке сигнала и рекомендации по открытию или закрытию сделки. А вы сами дoлжны пpинять peшeниe.

ПРЕИМУЩЕСТВА И НЕДОСТАТКИ

Доходность торговых роботов выражается не только в финансовом выражении, а и во временном. Они могут приносит прибыль круглосуточно, ведь компьютерная программа не знает усталости. Ocнoвныe пpeимущecтвa биpжeвыx poбoтoв: 1) Возможность заниматься своим делом, работать, а не «пялитьcя» нa графики до рези в глазах. Bы мoжeтe спокойно поехать в отпуск или проводить время с семьей, пока робот за вас активно увеличивает ваш капитал. 2) Никакого эмоционального перегруза и психологического давления во время торгов. Ведь постоянная торговля — этo для трейдера большой стресс. Вы просто наслаждаетесь жизнью и движение на бирже вам только в радость. З) Робот всегда точно выполняет алгоритм и не отступает от него . В отличие от вас с вашей нерешительностью , домыслами и ожиданиями пo поводу тренда. 4) И наконец, как только поступил сигнал на заключение сделки, робот реагирует мгновенно. Такая скорость реакции, отслеживания информации и ее обработки дocтупнa нe кaждoму. минусы-роботовHo у любoй, даже золотой медали, есть и обратная сторона. Kaким бы идеальным робот не был, все же торговля роботом на бирже имеет свои «минуcы»: 1) Он не обладает гибкостью ума и может неправильно среагировать на резкое изменение тренда. He paз случались ситуации, когда был резкий рост доллара по отношению к рублю, мнoгиe poбoты нe мoгли cпpaвитьcя co cвoим зaдaниeм. Трейдеры теряли деньги. А ситуацию мог бы спасти более интуитивный трейдинг. 2) При использовании робота т орговцы вынуждeны платить абонентскую плату. Это помимо комиссии за брокерское обслуживание. 3) Необходимость регулярной модернизации программы, поскольку нужно следовать за развитием рынка. Робот, торгующий на форексе, обеспечит трейдеру получение прибыли за короткий период. Установленная программа обработает данные по множеству графиков и даст рекомендацию или самостоятельно осуществит сделку по валютной паре в оптимальное время. Главное преимущество умных помощников — автоматический выбор лучших условий для проведения операции с целью сокращения потерь. Особенно это важно, если не просматривается визуально направление тренда. где-найти-биржевого-робота

ГДЕ ПРИОБРЕСТИ БОТА?

В MetaTrader 4 есть бесплатная библиотека роботов и индикаторов — Code Base . Вы можете ознакомится с 950 роботами и выбрать любой из 2000 индикаторов. Скачивайте понравившиеся и запускаете в торговлю. На платформе Tradematic вы можете приобрести готовую торговую стратегию или создать свою. Она рассчитана на новичков в трейдинге, имеет приятный интерфейс и несложна в управлении. На различных сайтах вы можете просто купить торгового робота. Цена колеблется от 350 до 5000 долларов, в зависимости от «навороченности» робота. Еще вариант — найти хорошего программиста, который создаст такого робота на основе вашей торговой системы. Только будьте осторожны, тщательно выбирайте специалиста. Недобросовестный человек, получив доступ к вашей системе, может использовать ее в своих целях.

Виды торговых роботов

  • есть специальные роботы для форекса
  • другие предназначены для рынка бинарных опционов
  • а также есть отдельная категория торговых роботов CFD.

В соответствии с торговыми платформами выделяют 2 группы роботов — от платформы MetaTrader и других платформ.

Для различных инвестиционных стратегий также есть различные виды роботов:

  • для скальпинга на форексе
  • для долгосрочной торговли
  • для бинарных опционов.

Насколько прибыльны торговые роботы

Что касается людей, которые их разрабатывают, то в теории все они потенциально могут стать миллионерами. Так как отчетливо понимают желание многих заработать побольше денег и делают все, чтобы форекс-роботы стали незаменимыми в торговле.

Тут еще есть другая сторона вопроса — смысл продавать вновь созданных роботов кому-то вместо того, чтобы использовать их для собственного обогащения? Но даже с хорошим роботом все не настолько просто, как кажется. Боты действительно способны эффективно торговать, но только на ограниченных периодах времени.

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

Но и это не надолго — рынок постоянно меняется. И только опытный трейдер с навыками и развитой интуицией способен понять, когда стоит входить в рынок, а когда нет. Поэтому при создании собственных роботов все эти факторы тоже надо учитывать и понимать, что нельзя один раз создать роботизированный алгоритм и почивать на лаврах.

Существуют ли бесплатные торговые роботы?

В теории да. Но по факту давайте рассуждать логически — способен ли бесплатный или дешевый бот приносить прибыль в размере сотен или тысяч долларов из месяца в месяц? Если бы это было так, вряд ли бы их продавали так дешево.

Хотя бесплатные советники встречаются — но не все из них проходили тестирование на истории, тем более многократные тесты в течение первого года или полугода. А без таких бэк-тестов прогнозировать результаты торговли робота — неблагодарное занятие. Поэтому торговать на них категорически нельзя.

На различных трейдерских сайтах есть подборки роботов, которые протестированы энтузиастами. Вот что они рекомендуют:

  • начинающим трейдерам с небольшим депозитом можно брать SMA-108 и Phoenix
  • опытным консервативным трейдерам стоит присмотреться к роботам с доходностью 10%-50% — это Shift и Crosspoint
  • агрессивным трейдерам подойдут Boomerang и Mr. Martingale, которые демонстрируют 500%-1000% за 6 месяцев на истории.

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

ВМЕСТО ЗАКЛЮЧЕНИЯ

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

Написать своего робота можно и самому. Но здесь важным пунктом будут четкие алгоритмы и наличие отработанной торговой системы.

Хотите написать пошаговый алгоритм и создать работающую торговую стратегию? Cмотрите программы и курсы от Александра Герчика и выбирайте то, что необходимо именно вам

Часто задаваемые вопросы
Что такое робот для торговли на бирже?

Торговый робот это программное обеспечение, которое автоматизирует торговлю согласно установленному алгоритму.

Как торгуют роботы?

Робот работает в двух режимах — автоматическом и полуавтоматическом. В первом варианте робот делает анализ рынка, подбор инструмента и заключение сделок. Во втором заключение сделок ложится на трейдера.

Какие минусы у робота для торговли на бирже?

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

Результаты в трейдинге индивидуальны и зависят от опыта и личной дисциплины. Улучшить свои навыки и дисциплину можно на нашем Курсе: «Трейдинг Основы»

Подписывайся на рассылку!

которую можно будет настраивать из личного кабинета

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

Перед прочтением этой статьи — ВАЖНО следующее: основная цель данной статьи заключается в том, чтобы показать как просто можно создать торгового робота, который может торговать российскими акциями или зарубежными акциями. Важно понимать, что создавая бота, вы лично несете ответственность за принимаемые им решения, инвестиционные операции и связанные с ними риски. Я не несу ответственности за решения, которые вы можете принять после прочтения этого материала. И я не даю никаких инвестиционных рекомендаций или советов. Не забывайте, что боты способны принести большие убытки, поэтому используйте их с осторожностью.

Пару слов обо мне

Программирование для меня это хобби и любимое дело. А так я сертифицированный системный архитектор. Поэтому прошу не особо ругать за код:‑)

Выбор брокера и библиотек

Как вы знаете, брокеров много))) но нам нужны те, у которых есть API — программный интерфейс через который наш торговый робот сможет отправлять заявки на покупку и продажу акций.

В этой статье будем рассматривать Российских брокеров для торговли Российскими акциями, если вы захотите торговать иностранными акциями — то это тоже можно сделать через них же — через СПБ биржу. (код торгового робота не поменяется — поменяется только название тикера — торговой бумаги, которой вы будете торговать).

Чтобы вас долго не мучать с выбором хорошего брокера для торгового бота, я приведу мои решения, которые сформировались после длительной практики по написанию торговых ботов, работающих в live режиме — прямо сейчас торгующих российскими акциями.

список сделок за сегодня, таймфрейм H1

Нужный и важный компонент в разработке торгового бота — это возможность тестирования вашей стратегии на истории, например используя простую библиотеку BackTrader.

1й вариант — если очень сильно хочется иметь робота, который может торговать практически через любого брокера — то есть очень хорошее решение использовать библиотеку QuikPy в связке с библиотекой BackTraderQuik — использование этих двух библиотек позволит вашему торговому роботу работать с любым брокером, у которого есть возможность предоставить вам торговый терминал Quik. А этот торговый терминал есть у большинства брокеров.

Если вам интересно, как это настроить и сделать, я могу рассказать в отдельной подробной статье, просто голосуйте за это! )))

Множество примеров по этой связке специально для вас выложил вот здесь.

2й вариант — он немного ограничивает в выборе брокеров, но даёт прекрасную возможность общаться с разработчиками API брокеров, и они!! заметьте быстро и эффективно исправляют косяки) и добавляют функционал — это большой плюс!

Для брокера Финам — API еще в разработке ))) библиотеки FinamPy + BackTraderFinam

Для брокера Тинькофф — библиотека BackTraderTinkoff
* Несколько примеров кода опубликовал в их репозитории — пример стратегии которая использует только API Тинькофф

Для брокера Алор — библиотеки AlorPy и BackTraderAlor

ОФФТОПИК: Если кому интересно подключение к криптобирже — то я написал свою библиотеку backtrader_binance, она работает так же, т. е. один и тот же код, можно использовать для разных активов, вот про нее статья.

Итак, выбираем последнего брокера — Алор. )) Если вам интересно увидеть как написать торгового робота для Финам или Тинькофф — как это настроить и сделать, я могу рассказать в отдельной подробной статье, просто голосуйте за это! )))

Приступаем к написанию торгового бота

Подготовка окружения

  1. Устанавливаем последнюю версию Python 3.11;
  2. Устанавливаем среду разработки PyCharm Community 2023.1;
  3. Запускаем PyCharm Community;
  4. В нём создаем новый проект, давайте его назовём alor_trade_robot и укажем что создаем виртуальное окружение Virtualenv, с Python 3.11 => нажимаем «Create»;

Создание нового проекта для алго-трейдинга

  1. После того, как проект создался и в нём создалось виртуальное окружение, мы стали готовы к установке необходимых библиотек))) Кликаем внизу слева на «Terminal» для открытия терминала, в котором как раз и будем вводить команды установки библиотек;

Открытый терминал проекта

  1. Устанавливаем необходимые библиотеки: В терминале вводим команды для подключения к брокеру Алор по API: git clone https://github.com/WISEPLAT/AlorPy для интеграции API Алора с Backtrader: git clone https://github.com/WISEPLAT/BackTraderAlor после этих манипуляций у нас появилось две папки AlorPy и 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, и бары пришли

Как мы видим — тест удался — бары пришли.

Теперь можно приступать к созданию первого торгового робота!!

Создание торгового робота для торговли акциями

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

импорт необходимых_библиотек класс Индикаторов класс Стратегии/Торговой системы # --- основной раздел --- подключение по API к бирже задание параметров запуска стратегии запуск стратегии получение данных по тикеру/тикерам по API обработка этих данных стратегией выставление заявок на покупку/продажу возврат результатов из стратегии вывод результатов

Как мы видим, нам осталось реализовать пункты:

  • «обработка этих данных стратегией»;
  • «выставление заявок на покупку/продажу»;
  • возврат результатов из стратегии;
  • вывод результатов.

Остальные пункты сделаны в этом примере — код достаточно интуитивный, но я всё равно приведу его здесь, ещё раз, отключив лишнее — комментируя — специально не удаляя, чтобы вам легче было сравнить.

Итак основной файл для запуска торговой стратегии называется 02 — Symbols.py, вот его код:

from datetime import date, datetime from backtrader import Cerebro, TimeFrame from BackTraderAlor.ALStore import ALStore # Хранилище Alor from my_config.Config import Config # Файл конфигурации import Strategy as ts # Торговые системы # Несколько тикеров для нескольких торговых систем по одному временнОму интервалу if __name__ == '__main__': # Точка входа при запуске этого скрипта symbols = ('MOEX.SBER', 'MOEX.GAZP', 'MOEX.LKOH', 'MOEX.GMKN',) # Кортеж тикеров store = ALStore(UserName=Config.UserName, RefreshToken=Config.RefreshToken, Boards=Config.Boards, Accounts=Config.Accounts) # Хранилище Alor cerebro = Cerebro(stdstats=False) # Инициируем "движок" BackTrader. Стандартная статистика сделок и кривой доходности не нужна for symbol in symbols: # Пробегаемся по всем тикерам # data = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, fromdate=date.today(), LiveBars=False) # Исторические и новые бары тикера с начала сессии data = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=15, fromdate=datetime(2021, 10, 4), LiveBars=False) # Исторические и новые бары тикера с начала сессии cerebro.adddata(data) # Добавляем тикер # cerebro.addstrategy(ts.PrintStatusAndBars, name="One Ticker", symbols=('MOEX.SBER',)) # Добавляем торговую систему по одному тикеру # cerebro.addstrategy(ts.PrintStatusAndBars, name="Two Tickers", symbols=('MOEX.GAZP', 'MOEX.LKOH',)) # Добавляем торговую систему по двум тикерам cerebro.addstrategy(ts.PrintStatusAndBars, name="All Tickers") # Добавляем торговую систему по всем тикерам cerebro.run() # Запуск торговой системы 

Внесенные в него изменения:

  • поменял таймфрейм на M15;
  • оставил применение торговой системы/стратегии ко всем тикерам;
  • и дату старта получения баров установил на datetime(2021, 10, 4).

Теперь основной файл стратегии Strategy.py, вот его код:

import backtrader as bt class PrintStatusAndBars(bt.Strategy): """ - Отображает статус подключения - При приходе нового бара отображает его цены/объем - Отображает статус перехода к новым барам """ params = ( # Параметры торговой системы ('name', None), # Название торговой системы ('symbols', None), # Список торгуемых тикеров. По умолчанию торгуем все тикеры ) def log(self, txt, dt=None): """Вывод строки с датой на консоль""" dt = bt.num2date(self.datas[0].datetime[0]) if not dt else dt # Заданная дата или дата последнего бара первого тикера ТС print(f', ') # Выводим дату и время с заданным текстом на консоль def __init__(self): """Инициализация торговой системы""" self.isLive = False # Сначала будут приходить исторические данные def next(self): """Приход нового бара тикера""" # if self.p.name: # Если указали название торговой системы, то будем ждать прихода всех баров # lastdatetimes = [bt.num2date(data.datetime[0]) for data in self.datas] # Дата и время последнего бара каждого тикера # if lastdatetimes.count(lastdatetimes[0]) != len(lastdatetimes): # Если дата и время последних баров не идентичны # return # то еще не пришли все новые бары. Ждем дальше, выходим # print(self.p.name) for data in self.datas: # Пробегаемся по всем запрошенным тикерам if not self.p.symbols or data._name in self.p.symbols: # Если торгуем все тикеры или данный тикер self.log(f' -  - Open=, High=, Low=, Close=, Volume=', bt.num2date(data.datetime[0])) def notify_data(self, data, status, *args, **kwargs): """Изменение статсуса приходящих баров""" data_status = data._getstatusname(status) # Получаем статус (только при LiveBars=True) print(f' - - ') # Статус приходит для каждого тикера отдельно self.isLive = data_status == 'LIVE' # В Live режим переходим после перехода первого тикера 

Внесенные изменения в него:

  • в функции def next(self): — закомментил синхронность получения баров — т.к. для моей стратегии это не нужно.

Делаем контрольный запуск, чтобы удостовериться, что все работает и ничего не сломали:

контрольный запуск

Видим, что пришли 15-минутные бары и все ОК.

. 24.04.2023 19:45, MOEX.GMKN - Minutes 15 - Open=15676.00, High=15682.00, Low=15672.00, Close=15678.00, Volume=216 24.04.2023 20:00, MOEX.SBER - Minutes 15 - Open=235.23, High=235.23, Low=235.03, Close=235.07, Volume=10064 24.04.2023 20:00, MOEX.GAZP - Minutes 15 - Open=181.87, High=182.00, Low=181.80, Close=181.94, Volume=13728 24.04.2023 20:00, MOEX.LKOH - Minutes 15 - Open=4707.50, High=4707.50, Low=4705.00, Close=4706.00, Volume=1439 24.04.2023 20:00, MOEX.GMKN - Minutes 15 - Open=15672.00, High=15682.00, Low=15672.00, Close=15682.00, Volume=153 24.04.2023 20:15, MOEX.SBER - Minutes 15 - Open=235.03, High=235.11, Low=235.00, Close=235.06, Volume=11403 24.04.2023 20:15, MOEX.GAZP - Minutes 15 - Open=181.87, High=182.30, Low=181.85, Close=182.16, Volume=29052 24.04.2023 20:15, MOEX.LKOH - Minutes 15 - Open=4706.00, High=4714.00, Low=4705.50, Close=4714.00, Volume=2092 24.04.2023 20:15, MOEX.GMKN - Minutes 15 - Open=15682.00, High=15682.00, Low=15676.00, Close=15682.00, Volume=265 24.04.2023 20:30, MOEX.SBER - Minutes 15 - Open=235.06, High=235.11, Low=235.03, Close=235.05, Volume=4995 24.04.2023 20:30, MOEX.GAZP - Minutes 15 - Open=182.16, High=182.23, Low=181.91, Close=181.96, Volume=18775 24.04.2023 20:30, MOEX.LKOH - Minutes 15 - Open=4714.00, High=4714.00, Low=4711.00, Close=4712.00, Volume=642 24.04.2023 20:30, MOEX.GMKN - Minutes 15 - Open=15682.00, High=15694.00, Low=15680.00, Close=15692.00, Volume=440 24.04.2023 20:45, MOEX.SBER - Minutes 15 - Open=235.04, High=235.11, Low=235.02, Close=235.06, Volume=10582 24.04.2023 20:45, MOEX.GAZP - Minutes 15 - Open=181.96, High=181.96, Low=181.70, Close=181.81, Volume=13281 24.04.2023 20:45, MOEX.LKOH - Minutes 15 - Open=4712.00, High=4714.00, Low=4710.00, Close=4711.00, Volume=2349 24.04.2023 20:45, MOEX.GMKN - Minutes 15 - Open=15694.00, High=15696.00, Low=15686.00, Close=15686.00, Volume=180 24.04.2023 21:00, MOEX.SBER - Minutes 15 - Open=235.06, High=235.10, Low=235.01, Close=235.10, Volume=7533 24.04.2023 21:00, MOEX.GAZP - Minutes 15 - Open=181.81, High=181.94, Low=181.75, Close=181.91, Volume=5271 24.04.2023 21:00, MOEX.LKOH - Minutes 15 - Open=4711.00, High=4711.00, Low=4710.00, Close=4711.00, Volume=1955 24.04.2023 21:00, MOEX.GMKN - Minutes 15 - Open=15688.00, High=15694.00, Low=15688.00, Close=15692.00, Volume=137 24.04.2023 21:15, MOEX.SBER - Minutes 15 - Open=235.10, High=235.15, Low=235.09, Close=235.15, Volume=9973 24.04.2023 21:15, MOEX.GAZP - Minutes 15 - Open=181.91, High=181.97, Low=181.82, Close=181.89, Volume=7075 24.04.2023 21:15, MOEX.LKOH - Minutes 15 - Open=4711.00, High=4713.00, Low=4710.50, Close=4712.50, Volume=1519 24.04.2023 21:15, MOEX.GMKN - Minutes 15 - Open=15692.00, High=15698.00, Low=15688.00, Close=15698.00, Volume=229 24.04.2023 21:30, MOEX.SBER - Minutes 15 - Open=235.14, High=235.18, Low=235.11, Close=235.17, Volume=7582 24.04.2023 21:30, MOEX.GAZP - Minutes 15 - Open=181.87, High=182.14, Low=181.86, Close=182.03, Volume=9900 24.04.2023 21:30, MOEX.LKOH - Minutes 15 - Open=4713.00, High=4713.00, Low=4708.50, Close=4709.50, Volume=2170 24.04.2023 21:30, MOEX.GMKN - Minutes 15 - Open=15696.00, High=15698.00, Low=15690.00, Close=15694.00, Volume=73 24.04.2023 21:45, MOEX.SBER - Minutes 15 - Open=235.16, High=235.30, Low=235.13, Close=235.15, Volume=22209 24.04.2023 21:45, MOEX.GAZP - Minutes 15 - Open=182.03, High=182.15, Low=182.01, Close=182.01, Volume=5444 24.04.2023 21:45, MOEX.LKOH - Minutes 15 - Open=4709.50, High=4712.00, Low=4708.00, Close=4710.50, Volume=894 24.04.2023 21:45, MOEX.GMKN - Minutes 15 - Open=15690.00, High=15696.00, Low=15660.00, Close=15694.00, Volume=938 24.04.2023 22:00, MOEX.SBER - Minutes 15 - Open=235.15, High=235.26, Low=235.11, Close=235.22, Volume=11980 24.04.2023 22:00, MOEX.GAZP - Minutes 15 - Open=182.04, High=182.13, Low=181.90, Close=182.11, Volume=10208 24.04.2023 22:00, MOEX.LKOH - Minutes 15 - Open=4711.00, High=4719.00, Low=4709.00, Close=4717.00, Volume=4481 24.04.2023 22:00, MOEX.GMKN - Minutes 15 - Open=15694.00, High=15700.00, Low=15690.00, Close=15700.00, Volume=444 24.04.2023 22:15, MOEX.SBER - Minutes 15 - Open=235.25, High=235.28, Low=235.22, Close=235.22, Volume=8336 24.04.2023 22:15, MOEX.GAZP - Minutes 15 - Open=182.11, High=182.11, Low=181.96, Close=182.05, Volume=5406 24.04.2023 22:15, MOEX.LKOH - Minutes 15 - Open=4718.50, High=4719.00, Low=4716.50, Close=4719.00, Volume=2532 24.04.2023 22:15, MOEX.GMKN - Minutes 15 - Open=15700.00, High=15702.00, Low=15688.00, Close=15700.00, Volume=161 24.04.2023 22:30, MOEX.SBER - Minutes 15 - Open=235.24, High=235.24, Low=235.18, Close=235.20, Volume=3598 24.04.2023 22:30, MOEX.GAZP - Minutes 15 - Open=182.05, High=182.07, Low=181.96, Close=181.99, Volume=6737 24.04.2023 22:30, MOEX.LKOH - Minutes 15 - Open=4718.50, High=4719.00, Low=4716.50, Close=4717.00, Volume=1011 24.04.2023 22:30, MOEX.GMKN - Minutes 15 - Open=15698.00, High=15700.00, Low=15688.00, Close=15698.00, Volume=134 24.04.2023 22:45, MOEX.SBER - Minutes 15 - Open=235.20, High=235.20, Low=235.02, Close=235.08, Volume=14638 24.04.2023 22:45, MOEX.GAZP - Minutes 15 - Open=182.00, High=182.11, Low=181.99, Close=182.06, Volume=3898 24.04.2023 22:45, MOEX.LKOH - Minutes 15 - Open=4718.00, High=4719.00, Low=4714.00, Close=4717.00, Volume=1931 24.04.2023 22:45, MOEX.GMKN - Minutes 15 - Open=15692.00, High=15700.00, Low=15692.00, Close=15692.00, Volume=185 24.04.2023 23:00, MOEX.SBER - Minutes 15 - Open=235.09, High=235.15, Low=235.03, Close=235.10, Volume=9085 24.04.2023 23:00, MOEX.GAZP - Minutes 15 - Open=182.06, High=182.09, Low=182.00, Close=182.03, Volume=7404 24.04.2023 23:00, MOEX.LKOH - Minutes 15 - Open=4716.50, High=4719.00, Low=4715.00, Close=4718.00, Volume=1214 24.04.2023 23:00, MOEX.GMKN - Minutes 15 - Open=15698.00, High=15710.00, Low=15690.00, Close=15690.00, Volume=604 24.04.2023 23:15, MOEX.SBER - Minutes 15 - Open=235.10, High=235.17, Low=235.03, Close=235.14, Volume=12324 24.04.2023 23:15, MOEX.GAZP - Minutes 15 - Open=182.03, High=182.10, Low=181.69, Close=181.86, Volume=19210 24.04.2023 23:15, MOEX.LKOH - Minutes 15 - Open=4717.50, High=4717.50, Low=4714.50, Close=4716.00, Volume=509 24.04.2023 23:15, MOEX.GMKN - Minutes 15 - Open=15698.00, High=15700.00, Low=15688.00, Close=15694.00, Volume=78

Теперь можно приступать к самому интересному — написанию торговой стратегии для робота!

Пишем стратегию для торгового робота

Все будем тестировать на истории — делать backtesting для нашей торговой стратегии.

1) устанавливаем, сколько денег у нас на счету и размер комиссии

cerebro.broker.setcash(3000000) # Устанавливаем сколько денег cerebro.broker.setcommission(commission=0.01) # Установить комиссию

2) результат работы торговой стратегии возвращаем в главный файл и выводим на экран

print('Стоимость портфеля: %.2f' % cerebro.broker.getvalue()) print('Свободные средства: %.2f' % cerebro.broker.get_cash())

пункты 1) и 2) добавляем в файл 02 — Symbols.py

3) если вы захотите включить live режим работы вашей торговой стратегии, то это делается следующими четырьмя строчками ‑. но не рекомендую этого делать, т.к. все заявки на покупку и продажу сразу начнут попадать на биржу и будут пытаться выполняться так, как у вас написано в коде!! — если вы пробегаетесь по истории — то и скрипт будет пытаться выставить в рынок по «старой» цене. а текущая цена далеко уже не та. БУДЬТЕ ЗДЕСЬ ВНИМАТЕЛЬНЫ! Для live режима — не пробегайтесь по истории.

exchange = 'MOEX' # Биржа portfolio = Config.PortfolioStocks # Портфель фондового рынка broker = store.getbroker(use_positions=False, portfolio=portfolio, exchange=exchange) # Брокер Alor cerebro.setbroker(broker) # Устанавливаем брокера

Этот код не добавляем! Просто для инфо, как включить live режим.

Класс торговой системы имеет несколько основных методов:

  1. init — итак понятно — здесь инициализируем вспомогательные переменные и индикаторы для потоков данных;
  2. start — здесь однократно вспомогательным переменным присваиваем значения;
  3. next — вызывается каждый раз при приходе нового бара по тикеру;
  4. notify_order — вызывается, когда происходит покупка или продажа;
  5. notify_trade — вызывается когда меняется статус позиции;
  6. notify_data — вызывается когда меняется статус прихода бара на live режим.

Вы можете по желанию расширять/добавлять новые методы/функционал.

4) В init добавляем:

self.order = None self.orders_bar_executed = <>

5) В start добавляем:

for data in self.datas: # Пробегаемся по всем запрошенным тикерам ticker = data._dataname # имя тикера self.orders_bar_executed[ticker] = 0

6) В next добавляем:

ticker = data._dataname # имя тикера _close = data.close[0] # текущий close _low = data.low[0] # текущий low _high = data.high[0] # текущий high _open = data.open[0] # текущий close # Проверка, мы в рынке? if not self.position: # Ещё нет. мы МОГЛИ БЫ КУПИТЬ, если бы. if self.data.close[0] < self.data.close[-1]: # текущее закрытие меньше предыдущего закрытия if self.data.close[-1] < self.data.close[-2]: # ПОКУПАЙ, ПОКУПАЙ, ПОКУПАЙ. (с параметрами по умолчанию) self.log('BUY CREATE, %.2f' % self.data.close[0]) # Следим за созданным ордером, чтобы избежать второго дублирующегося ордера self.order = self.buy(data=data) # , size=size) else: # Уже в рынке? . мы могли бы продать try: # продаём после 5 баров от момента покупки. if len(self) >= (self.orders_bar_executed[data._name] + 5): # ПРОДАВАЙ, ПРОДАВАЙ, ПРОДАВАЙ. (с параметрами по умолчанию) self.log('SELL CREATE, %.2f' % self.data.close[0]) # Следим за созданным ордером, чтобы избежать второго дублирующегося ордера self.order = self.sell(data=data) except: print("error. ")

7) добавляем функцию notify_trade:

def notify_trade(self, trade): if not trade.isclosed: return self.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' % (trade.pnl, trade.pnlcomm))

8) добавляем функцию notify_order:

def notify_order(self, order): ticker = order.data._name size = order.size if order.status in [order.Submitted, order.Accepted]: # Buy/Sell order submitted/accepted to/by broker - Nothing to do return # Проверка, мы в рынке? # Внимание: брокер может отклонить заявку, если недостаточно денег if order.status in [order.Completed]: if order.isbuy(): self.log('BUY EXECUTED, %.2f' % order.executed.price) elif order.issell(): self.log('SELL EXECUTED, %.2f' % order.executed.price) self.bar_executed = len(self) self.orders_bar_executed[order.data._name] = len(self) elif order.status in [order.Canceled, order.Margin, order.Rejected]: self.log('Order Canceled/Margin/Rejected') # Запись: отложенного ордера - нет self.order = None

пункты 4), 5), 6), 7) и 8) добавляем в файл стратегии Strategy.py

В принципе описание кода достаточно интуитивно показывает смысл стратегии, что мы всегда покупаем и продаем через 5 баров.

Стратегия: мы всегда покупаем и продаем через 5 баров

Итак, код файла 02 — Symbols.py:

from datetime import date, datetime from backtrader import Cerebro, TimeFrame from BackTraderAlor.ALStore import ALStore # Хранилище Alor from my_config.Config import Config # Файл конфигурации import Strategy as ts # Торговые системы # Несколько тикеров для нескольких торговых систем по одному временнОму интервалу if __name__ == '__main__': # Точка входа при запуске этого скрипта symbols = ('MOEX.SBER', 'MOEX.GAZP', 'MOEX.LKOH', 'MOEX.GMKN',) # Кортеж тикеров store = ALStore(UserName=Config.UserName, RefreshToken=Config.RefreshToken, Boards=Config.Boards, Accounts=Config.Accounts) # Хранилище Alor cerebro = Cerebro(stdstats=False) # Инициируем "движок" BackTrader. Стандартная статистика сделок и кривой доходности не нужна cerebro.broker.setcash(3000000) # Устанавливаем сколько денег cerebro.broker.setcommission(commission=0.01) # Установить комиссию for symbol in symbols: # Пробегаемся по всем тикерам # data = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, fromdate=date.today(), LiveBars=False) # Исторические и новые бары тикера с начала сессии data = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=15, fromdate=datetime(2021, 10, 4), LiveBars=False) # Исторические и новые бары тикера с начала сессии cerebro.adddata(data) # Добавляем тикер # cerebro.addstrategy(ts.PrintStatusAndBars, name="One Ticker", symbols=('MOEX.SBER',)) # Добавляем торговую систему по одному тикеру # cerebro.addstrategy(ts.PrintStatusAndBars, name="Two Tickers", symbols=('MOEX.GAZP', 'MOEX.LKOH',)) # Добавляем торговую систему по двум тикерам cerebro.addstrategy(ts.PrintStatusAndBars, name="All Tickers") # Добавляем торговую систему по всем тикерам results = cerebro.run() # Запуск торговой системы print('Стоимость портфеля: %.2f' % cerebro.broker.getvalue()) print('Свободные средства: %.2f' % cerebro.broker.get_cash()) 

Итак, код файла Strategy.py

import backtrader as bt class PrintStatusAndBars(bt.Strategy): """ - Отображает статус подключения - При приходе нового бара отображает его цены/объем - Отображает статус перехода к новым барам """ params = ( # Параметры торговой системы ('name', None), # Название торговой системы ('symbols', None), # Список торгуемых тикеров. По умолчанию торгуем все тикеры ) def log(self, txt, dt=None): """Вывод строки с датой на консоль""" dt = bt.num2date(self.datas[0].datetime[0]) if not dt else dt # Заданная дата или дата последнего бара первого тикера ТС print(f', ') # Выводим дату и время с заданным текстом на консоль def __init__(self): """Инициализация торговой системы""" self.isLive = False # Сначала будут приходить исторические данные self.order = None self.orders_bar_executed = <> def start(self): for data in self.datas: # Пробегаемся по всем запрошенным тикерам ticker = data._dataname # имя тикера self.orders_bar_executed[ticker] = 0 def next(self): """Приход нового бара тикера""" # if self.p.name: # Если указали название торговой системы, то будем ждать прихода всех баров # lastdatetimes = [bt.num2date(data.datetime[0]) for data in self.datas] # Дата и время последнего бара каждого тикера # if lastdatetimes.count(lastdatetimes[0]) != len(lastdatetimes): # Если дата и время последних баров не идентичны # return # то еще не пришли все новые бары. Ждем дальше, выходим # print(self.p.name) for data in self.datas: # Пробегаемся по всем запрошенным тикерам if not self.p.symbols or data._name in self.p.symbols: # Если торгуем все тикеры или данный тикер self.log(f' -  - Open=, High=, Low=, Close=, Volume=', bt.num2date(data.datetime[0])) ticker = data._dataname # имя тикера _close = data.close[0] # текущий close _low = data.low[0] # текущий low _high = data.high[0] # текущий high _open = data.open[0] # текущий close # Проверка, мы в рынке? if not self.position: # Ещё нет. мы МОГЛИ БЫ КУПИТЬ, если бы. if self.data.close[0] < self.data.close[-1]: # текущее закрытие меньше предыдущего закрытия if self.data.close[-1] < self.data.close[-2]: # ПОКУПАЙ, ПОКУПАЙ, ПОКУПАЙ. (с параметрами по умолчанию) self.log('BUY CREATE, %.2f' % self.data.close[0]) # Следим за созданным ордером, чтобы избежать второго дублирующегося ордера self.order = self.buy(data=data) # , size=size) else: # Уже в рынке? . мы могли бы продать try: # продаём после 5 баров от момента покупки. if len(self) >= (self.orders_bar_executed[data._name] + 5): # ПРОДАВАЙ, ПРОДАВАЙ, ПРОДАВАЙ. (с параметрами по умолчанию) self.log('SELL CREATE, %.2f' % self.data.close[0]) # Следим за созданным ордером, чтобы избежать второго дублирующегося ордера self.order = self.sell(data=data) except: print("error. ") def notify_trade(self, trade): if not trade.isclosed: return self.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' % (trade.pnl, trade.pnlcomm)) def notify_order(self, order): ticker = order.data._name size = order.size if order.status in [order.Submitted, order.Accepted]: # Buy/Sell order submitted/accepted to/by broker - Nothing to do return # Проверка, мы в рынке? # Внимание: брокер может отклонить заявку, если недостаточно денег if order.status in [order.Completed]: if order.isbuy(): self.log('BUY EXECUTED, %.2f' % order.executed.price) elif order.issell(): self.log('SELL EXECUTED, %.2f' % order.executed.price) self.bar_executed = len(self) self.orders_bar_executed[order.data._name] = len(self) elif order.status in [order.Canceled, order.Margin, order.Rejected]: self.log('Order Canceled/Margin/Rejected') # Запись: отложенного ордера - нет self.order = None def notify_data(self, data, status, *args, **kwargs): """Изменение статуса приходящих баров""" data_status = data._getstatusname(status) # Получаем статус (только при LiveBars=True) print(f' - - ') # Статус приходит для каждого тикера отдельно self.isLive = data_status == 'LIVE' # В Live режим переходим после перехода первого тикера 

Теперь давайте запустим эту стратегию и посмотрим результат!

результат запуска стратегии

Стоимость портфеля: 1 294 456.74

Свободные средства: 45 568 288.40

Круто? Да? )))

Сразу скажу, что это не грааль — и в коде есть небольшая ошибка, которая приводит к таким ошеломляющим результатам)))

Кому интересно, заснял видео с разоблачением такой сверх доходности, доступно по ссылке.

Иногда лучше один раз увидеть, чем сто раз прочитать

Поэтому создание этой стратегии есть по шагам в видео, доступно по ссылке

Итог

Напоминаю, что цель данной статьи была показать — насколько легко теперь вы можете создавать своих собственных торговых роботов. Ни каких финансовых консультаций или рекомендаций не даю — просто пишем код для торгового бота. И без многих проверок — не запускайте торгового робота в live режиме.

Итак, просто пишите код торгового робота, тестируете его на истории, включаете Live режим, и запускаете в работу)

Как мне видится, получилось довольно интересно:‑) И жду ваших коммитов / фиксов / идей!

P. S. Это код выложил на GitHub по этой ссылке. Не забудьте свой конфиг файл положить в my_config\Config.py

Всем хорошего дня! Спасибо за уделенное время! Если считаете полезным такие статьи то жду вашей позитивной оценки))

  • торговые роботы
  • бот
  • trading
  • trading robot
  • trading bot
  • backtrader
  • trading strategy
  • algo-trading
  • торговый бот
  • как сделать торгового робота

Как создать торгового робота и не потерять время

Как создать торгового робота и не потерять время

Торговля на финансовых рынках сопряжена с множеством рисков, в числе которых самый главный — это риск совершить ошибку при принятии торгового решения. Мечта каждого трейдера – поставить вместо себя торгового робота, автомат, который всегда в отличной форме, не знает усталости и не подвержен людским слабостям: страху, жадности и нетерпению.

Как создать торгового робота и не потерять время

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

Наличие торговой системы является необходимым условием для торговли, и эта система, конечно, должна быть прибыльной. Когда новичок приходит на рынок, на него буквально обрушивается лавина информации, в которой не так-то просто разобраться. И на помощь здесь приходят книги и форумы трейдеров.

К сожалению, не все авторы книг являются успешными трейдерами, и не все успешные трейдеры являются авторами книг. Многие специализированные ресурсы создаются только для заработка их хозяевами, ведь торговать на свои деньги гораздо сложнее, чем выпускать прогнозы и обучать торговым системам.

Каждый трейдер должен самостоятельно пройти все стадии на пути создания собственной торговой системы. Не зря говорят, что не важно, по какой системе ты торгуешь, главное, чтобы ты действительно торговал по этой системе. Без этого торговля на рынке превращается в азартную игру, исход которой предрешен.

Торговые роботы и Forex

Считается, что рынок Forex обладает огромной ликвидностью и позволяет торговать 24 часа в сутки в отличие от многих других рынков. Поэтому многие трейдеры пытаются создать торговые роботы именно для торговли на валютном рынке, ведь он представлен достаточно большим количеством инструментов.

Правда, скептики заявляют, что на самом деле все валютные пары сильно скоррелированы между собой, и волатильность на форексе слишком маленькая. Но их противники отвечают, что, несмотря на наличие корреляции, каждая валютная пара имеет свой характер, а малая волатильность компенсируется большим плечом.

В любом случае, инструменты форекса являются привлекательными для создания торговых роботов, и большинство сторонников автоматического трейдинга именно на валютных парах оттачивают свои навыки.

Клиентские терминалы MetaTrader 4 и MetaTrader 5 специально разработаны для удобного создания автоматических торговых систем, но при этом их интерфейс продуман и также удобен для ручной торговли.

Как приступить к созданию торгового робота?

Встречается множество подходов к построению автоматической торговой системы. Выделим только несколько основных из них.

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

Зачастую сторонники такого подхода знают слишком много математики и совсем не знают/не интересуются рынком. Рынок для них — чистая абстракция, одна из разновидностей интеллектуальной игры. Такой подход обычно ведет к многолетним изучениям и разработкам, результат в виде работающей автоматической торговой системы сам по себе не является важным.

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

Такой подход наиболее понятен и удобен для обучения торговле на рынке. Чаще всего именно его проповедуют трейдеры, получившие всеобщее признание. Недостатком подхода является необходимость постоянно находиться у монитора и отслеживать все необходимые инструменты на экране монитора.

В конце концов трейдер начинает задумываться над автоматизацией торговых процессов, и тут выясняется самая большая проблема – сложность формализации торговых правил при попытке перенести торговые правила на язык алгоритмов. Трейдеры, которые пытаются заказать торговый робот профессионалам, не всегда могут сформулировать правила торговли и найти общий язык с программистами.

Третий подход основан на попытке создать «черный ящик» на основе нейронных сетей с помощью готовых инструментов, широко представленных на рынке в специализированном ПО и в математических пакетах. Строительство своей собственной автоматической торговой системы с применением элементов искусственного интеллекта является очень интересной и увлекательной задачей даже для новичков, так как не требует ни глубокой математической подготовки, ни опыта программирования – все делается с помощью визуальных средств.

От трейдера в этом случае требуются базовое знание индикаторов технического анализа, умение подготовить необходимые ценовые данные и навыки работы с конкретным пакетом по работе с нейронными сетями. Главным недостатком такого подхода является то, что полученный с помощью специализированных инструментов по работе с нейронными сетями торговый автомат на самом деле является «черным ящиком» — принципы его работы неизвестны самому трейдеру, и нельзя в общем случае предсказать, какая фаза рынка ему не понравится.

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

Но «без труда не вынешь и рыбку из пруда», и программист зачастую вместо торгового робота начинает писать с нуля на известном ему языке программирования всю нужную инфраструктуру – получение и обработка ценовых данных, визуальное представление графиков и индикаторов, собственные средства по тестированию стратегии на истории и так далее.

В процессе этой работы он получает много полезного опыта. Но при этом он, чаще всего, ни на йоту не приближается к конечной цели – созданию автоматической торговой системы. И если даже он пройдет весь путь до конца, то где гарантия, что написанный робот окажется прибыльным? А если он захочет написать другую торговую систему? Нужно все перестраивать и разбираться с новыми неизбежными ошибками программирования.

Есть еще и пятый путь – попытаться купить готовую торговую систему в виде торгового робота и торговать с его помощью, при этом трейдер выступает в качестве оператора или настройщика. Такой вариант существенно экономит время (не требуется изучать множество новых вещей) и позволяет сразу же окунуться в мир автоматической торговли.

Главный недостаток такого подхода проистекает из его достоинств – вы не знаете, как работает данный торговый робот и на каких принципах он построен. И если даже продавец предоставил вам подробное описание заложенной в нем торговой системы, вы никогда не будете в ней уверены до конца.

Впрочем, 100%-ную гарантию не дает ни один подход, кроме депозита в банке. Но это не совсем то, за чем идет человек, интересующийся биржей и возможностями спекулятивного преумножения капитала.

Какой путь в автоматический трейдинг выбрать трейдеру?

Каждый из пяти описанных подходов имеет свои преимущества и соответствует своему типу трейдера. Вряд ли вы без хорошего математического багажа выберете первый путь – попытку аналитического описания рынка. И маловероятно, что вы сразу же пойдете путем строительства торгового робота на основе нейронных сетей. Хотя оба этих варианта очень привлекательны и интересны и предоставляют хорошую зарядку для ума.

Далее в статье мы поговорим только о втором подходе, который уже является классическим. Именно с него начинает свой путь в автотрейдинг подавляющее большинство трейдеров, так как знание технического анализа еще никто не отменял при освоении основ торговли на рынках.

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

Первые шаги по созданию торгового робота

Для написания автоматической торговой системы требуются навыки программирования и знание всех тонкостей обработки торговых запросов. Но вы можете на первом этапе начать знакомство с уже готовыми экспертами – торговыми роботами из бесплатной библиотеки Code Base .

Скачайте любой эксперт (торговый робот) и запустите его в тестере стратегий клиентского терминала MetaTrader 4 или MetaTrader 5. Выберите один участок истории с ярко выраженным трендом и второй участок, на котором цена находится в диапазоне/флете. Проведите оптимизацию входных параметров эксперта и посмотрите, как они отличаются на этих двух участках.

Запустите на трендовом участке эксперт с оптимальными параметрами для флета, и наоборот – на флетовом участке с параметрами для тренда. Посмотрите, насколько сильно меняются торговые результаты, как меняются распределения сделок и остальные статистические параметры. Таким образом, вы узнаете, как сильно может меняться поведение торговой системы при изменении ситуации на рынке.

Желательно таким путем исследовать несколько классических торговых стратегий на разных участках истории и на разных инструментах. Такая обкатка в тестере может оказаться хорошей прививкой на будущее от подгонки торговой системы под конкретную историю и поможет лучше понимать суть трендовых и контртрендовых систем.

Следующим шагом может стать создание более сложных торговых систем на основе комбинации уже существующих простых сигналов из набора Мастера MQL 5. Вы можете, еще не прибегая к программированию, проверить и развивать свою торговую интуицию, отсеивая плохие сигналы одной системы с помощью фильтра на основе другой системы.

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

Научитесь из всего набора входных параметров выявлять именно те, которые влияют на торговую систему. Не принимайте во внимание второстепенные параметры, которые отнимают время при оптимизации, но не влияют на саму логику системы. Помните, что хорошая торговая система всегда допускает небольшой люфт по второстепенным параметрам, но при этом не делает драматических провалов при небольшом изменении характера рынка.

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

Программирование торгового робота

Вы изучили/изучаете язык программирования MQL 4 или MQL 5 и готовы написать свой первый советник для клиентского терминала MetaTrader . Здесь тоже возможно несколько вариантов.

Во-первых, вы можете разобрать несколько уже готовых торговых роботов по опубликованным статьям, чтобы лучше понимать тонкости программирования.

Во-вторых, вы можете задавать вопросы на форуме MQL4.community или MQL5.community, если самостоятельно не смогли разобраться в каких-то моментах. Обычно остальные участники сообщества охотно помогают новичкам, если видят их искреннюю заинтересованность в изучении предмета.

В-третьих, вы можете заказать доработку или разработку советника или индикатора в сервисе Работа, если по каким-то причинам не можете сделать нужную программу самостоятельно. Но даже при заказе торгового робота через фриланс-сервис вам желательно хорошо разбираться в вопросах тестирования стратегий, чтобы говорить с разработчиком на одном языке.

Кроме того, знание языка программирования на базовом уровне позволит вам впоследствии самому вносить мелкие исправления и изменения в полученный код уже после завершения работы. Ведь не будете же вы по каждому мелкому поводу обращаться к другому программисту, гораздо быстрее и проще сделать это самому.

«Всё украдено до вас»

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

Как найти собственную торговую систему или хотя бы знать, в каком направлении нужно сосредоточить поиски?

Военные во всех странах склонны к чрезмерному уровню секретности, и не зря на этот счет существует множество анекдотов, среди которых есть и такой: «Военная тайна заключается не в том, что вы это знаете» — говорит инструктор курсантам военного училища, — «а в том, что это знаете именно вы». С торговыми системами ситуация примерно такая же: большинство трейдеров используют простые известные торговые идеи, только с небольшими доработками, например, в виде использования трейлинг стопа (Trailing Stop) или подтверждения сигналов от трендовых индикаторов.

Существует множество закрытых трейдерских форумов, на которых идет совместная разработка или доработка секретных торговых систем и куда закрыт вход простым смертным. Самое интересное, что ничего секретного на них найти нельзя, всегда берется старая классическая идея, вроде «торгуй по тренду» и доводится до совершенства с помощью каких-то новых неизвестных широкой публике индикаторов.

Поэтому вы можете смело брать доступные в исходном виде коды торговых роботов и пытаться найти правильное их использование на тех или иных инструментах и таймфреймах. Тут на память сразу приходит другая избитая поговорка: «Вы не любите кошек? Вы просто не умеете их готовить!» В это трудно поверить, но вероятность того, что вы придумаете что-то принципиально новое, очень мала. Тут главное всё правильно сделать самому из доступных ингредиентов и не думать, что кто-то сверхумный пользуется какими-то секретными разработками из лабораторий NASA. В этом и заключается секрет Грааля.

Редкая птица долетит до середины Днепра.

«Если торговые идеи лежат буквально под ногами, то почему ими никто не пользуется?» — возникает резонный вопрос. Ответ на него кроется, вероятно, в человеческой психологии. Многие банки и крупные инвестиционные фонды содержат в своих штатах трейдеров, которые торгуют по расписанным правилам и в объемах, которые им позволены. Но почему-то редко когда институциональные трейдеры уходят на вольные хлеба и начинают торговать на свои деньги.

Получается, что нужна не только сама торговая стратегия, но и железная дисциплина, чтобы выполнять все её правила. Многие трейдеры с горечью убеждались, что они такие же смертные, как и все остальные, и им не чужды все те проблемы психологии, которые описаны в книгах. И осознав, что самый большой враг трейдера — это он сам, трейдер задумывается о создании торгового робота, который будет работать вместо него и снимет с него психологическую нагрузку.

Отклоняясь немного от темы, приведем в пример легендарную группу «Черепахи», которая успешно торговала на множестве рынков в конце 20-го века. Почитайте «Путь черепах», и вы поймете, что главное в профессии трейдера именно железная внутренняя дисциплина, а не какая-то суперсекретная система. Увы, большинство не сможет торговать по прибыльной стратегии, даже если получит её даром.

Проблема заключается в том, что большинство торговых стратегий, которые успешно торгуются вручную, с трудом поддаются формализации и переложению на язык компьютеров. Те стратегии, которые легче всего запрограммировать, например, на пересечении двух скользящих средних, являются слишком простыми и требуют множество уточнений и доработок, чтобы ими можно было пользоваться на деле. Таким образом, простая идея обрастает множеством внешних параметров, которые позволяют роботу избежать ложных входов и ошибок, хорошо видимых человеку. Возникает проблема оптимизации торгового робота. В итоге она не должна превратиться в переоптимизацию и подгонку под конкретный участок истории.

Именно для борьбы с подгонкой в тестере терминала MetaTrader 5 существует возможность форвардного тестирования на найденных при оптимизации параметрах системы. Если результаты форвард-тестирования торговой стратегии не сильно отличаются от результатов, полученных на участке оптимизации, то есть надежда, что торговый робот будет достаточно стабилен некоторое время после его запуска в онлайн-торговлю. Длина интервала для проведения оптимизации параметров и длительность этого «некоторого времени» зависят от конкретной торговой системы.

Таким образом, оптимизация торгового робота перед его запуском в онлайн-торговлю по сути напоминает раскручивание пращи — от того как тщательно мы раскрутили и швырнули снаряд из пращи, зависит насколько далеко и точно он улетит от точки броска. Хорошо построенный торговый робот продержится на счете с положительным результатом более длительное время, чем его собрат, полученный в результате подгонки. Можно сказать, что Грааль — это работающая идея и правильная корректировка параметров, проводимая время от времени при изменении рыночных условий.

Иллюстрацией для такого примера могут служить результаты Чемпионата по автоматической торговле Automated Trading Championship, проводимого уже в течение многих лет. Все участники перед началом соревнований проходят автоматические проверки присланных экспертов — торговых роботов на интервале с января по конец июля. Главным требованием для прохождения такой проверки является полученная прибыль за восемь месяцев тестирования. Но менее половины допущенных к Чемпионату роботов остаются в плюсе после трехмесячной автономной работы.

Вы также можете попробовать свои силы в создании и правильной настройке своего торгового робота, чтобы принять участие в Чемпионате и получить результаты форвард-тестирования своего детища. Тем более что участие является бесплатным, а призы ощутимыми. Как говорится — «Welcome»!

Заключение

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

Большинство трейдеров приходит к мысли, что зачастую их действия при торговле нарушают их же собственные торговые правила. Пусть не все торговые системы можно автоматизировать, но даже для них в большинстве случаев можно создать вспомогательные инструменты в виде индикаторов, аналитических систем и фильтров ложных сигналов.

Мы не даем здесь конкретных рекомендаций по изучению языка MQL4 или MQL5, на эту тему написано много других полезных статей. Цель данной публикации состояла в том, чтобы дать начальное представление о том, как и с чего начать создание собственного торгового робота для терминалов MetaTrader 4 и MetaTrader 5.

Надеемся, что эта статья сэкономит новичкам время и укажет нужное направление в нелегком деле создания автоматической торговой системы.

Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.

Другие статьи автора
  • Работа с ONNX-моделями в форматах float16 и float8
  • Регрессионные модели библиотеки Scikit-learn и их экспорт в ONNX
  • Запускаем MetaTrader VPS впервые — пошаговая инструкция
  • Классификационные модели библиотеки Scikit-learn и их экспорт в ONNX
  • Библиотека численного анализа ALGLIB в MQL5
  • Оценка ONNX-моделей при помощи регрессионных метрик
  • Матрицы и векторы в MQL5: функции активации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *