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

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

Время на прочтение
4 мин

Количество просмотров 28K

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

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

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

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

  • Создание роботов для работы на прямом подключении – такие системы работают «в обход» торговой системы брокера, отправляя заявки напрямую в «движок» торговой системы биржи. Этот вариант используют уже опытные трейдеры, которые готовы платить в том числе и за такой способ подключения.
  • Подключение к брокерской торговой системе по 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 поставляет и модуль бэктестинга, который позволяет оценить продуктивность работы описанной стратегии на исторических данных. Помимо прочего, в системе реализована функция тестирования торговой системы «на лету» с использованием текущих биржевых данных, но без вывода приказа на биржу — время виртуальной сделки, цена и получившаяся «доходность» будут показываться в отдельном окне.

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

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

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

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

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

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

На каких языках программирования пишут торговых роботов – вопрос не праздный и не имеющий однозначного ответа.

Наиболее распространённым и интересующим вопросом у пользователей, начинающих заниматься алгоритмической торговлей, является: «На каком языке программирования лучше всего создавать торгового робота?».

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

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

Программирование торговых роботов: инструменты, язык для разработки

Содержание

  1. В чем преимущества и недостатки самостоятельной разработки робота для торгов
  2. Какие шаги включает в себя процесс разработки торгового робо-советника
  3. Финансовый анализ, заложенные алгоритмы, торговый движок
  4. Как выбрать язык для программирования торговых роботов
  5. Отладка и тестирование торгового робота на виртуальном счете
  6. Знание каких языков программирования необходимы для создания торгового робота – разработка бота от А до Я
  7. MetaQuotes Language 5
  8. С#
  9. Java
  10. Python
  11. Инструменты, которые понадобятся при разработки робота для трейдинга
  12. Wealth-Lab
  13. MetaStock
  14. Omega Research
  15. TSLab
  16. StockSharp
  17. LiveTrade
  18. SmartX
  19. Основные этапы разработки бота для торговой площадки
  20. Этап 1: идея и детальные описания будущей системы
  21. Этап 2: предварительное тестирование
  22. Этап 3: анализ роботизированной системы
  23. Этап 4: ядро
  24. Этап 5: разработка торговой стратегии
  25. Этап 6: тестирование
  26. Этап 7: анализирование результатов
  27. Возможно ли разработать торгового робота для биржевой работы без навыков программирования?
  28. Способ 1: Написание торгового робота, используя инструменты внутреннего языка вашего программного обеспечения
  29. Способ 2: использование табличного процессора Excel
  30. Способ 3: использование аналитических платформ
  31. Способ 4: применение в процессе разработки трейдингового робота языков программирования

В чем преимущества и недостатки самостоятельной разработки робота для торгов

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

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

  • возможно стратегия, заложенная вами в бота, окажется прибыльной;
  • не каждый трейдеры имеет возможность оплатить услугу, так как стоимость создания скрипта может начинаться от 5$ и заканчиваться тысячами;
  • редко, когда система устраивает покупателя после первого раза, чаще код отправляется на доработку, чтобы исправить недочёты;
  • вы не сможете разобраться, что написал специалист, если не знаете языка программирования, что в итоге обесценит товар.

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

Однако и тут можно столкнуться со следующими неприятностями:

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

Какие шаги включает в себя процесс разработки торгового робо-советника

Финансовый анализ, заложенные алгоритмы, торговый движок

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

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

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

Создание алгоритмов для трейдинга, логика торговых роботов:

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

Чтобы создать максимально подробный первичный образ робота, ответьте себе на следующие вопросы:

  1. Нужно знать по какой стоимости приобретать тот или иной актив. Если мы выложили, а заявка по-прежнему висит, цена ушла. Берем по расценкам рынка?
  2. Что делать, если заявка отыграла себя только на половину? Остаток продаём по рыночной стоимости? Через какой промежуток времени?
  3. Отключаем робота раньше, чем завершиться торги? Насколько раньше? Будет ли он основан на спокойной волатильном боковике или, наоборот, на всплеске?
  4. В какие дни робот будет осуществлять торговлю? На протяжении всей недели или в активно волатильные дни – в понедельник и пятницу?
  5. Какие останавливающие приказы будут запрограммированы в робо-советнике?

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

Как выбрать язык для программирования торговых роботов

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

Если у вас уже есть определенные знания в сфере программирования и вы владеете, например, С#, то скорее всего вы будете писать стационарное приложение, в котором будет применено API торгового терминала вашего брокера, допустим это будет программный продукт QUIK.

Программирование торговых роботов: инструменты, язык для разработки

Интересно! Если вы не сталкивались с программированием, но хотите обрести эти навыки и разработать собственного бота, обратите внимание на языки QPILE и QLUA, которые встроены в рабочий комплекс QUIK.

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

Третьим шагом будет проверка нашей работы, когда робот сформирован и написан.

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

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

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

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

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

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

Знание каких языков программирования необходимы для создания торгового робота – разработка бота от А до Я

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

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

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

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

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

  • торговый двигатель – доступная и простая система, отвечающая за выполнение легких задач, создается на языках C, C++;
  • торговый робот для управления настройками – данная система отвечает за управление алгоритмами и редактирует интерфейс пользователя, включает в себя механизмы представления результатов торговли; пишется программа на языках C++, С#, Java и подобные;
  • сервис для тестирования рабочей платформы на основе исторических данных и подбора параметров для торговли – модуль отвечает за тестирование новых алгоритмов, осуществляющееся на основе исторических данных, а также заново настраивает текущие алгоритмы; для написания используются только скриптовые языки программирования.

Программирование торговых роботов: инструменты, язык для разработки

Востребованные языки программирования исходя из анализа рынка (безотносительно к разработке трейдинговых роботов)

Так какой же язык программирования для написания торгового робота выбрать: Java, Python, C# или C++?

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

Наибольшим спросом пользуются следующие языки: MetaQuotes Language 5, C#, Java, Python и C++. Последние два являются наиболее простыми для изучения.

Программирование торговых роботов: инструменты, язык для разработки

Amibroker

MetaQuotes Language 5

Данный язык программирования похож на C++, на нем пишутся и разрабатываются программы для сервиса Meta Trader 5, используемой для торговли на биржах Forex, Futures и других.

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

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

Программирование торговых роботов: инструменты, язык для разработки

Главными функциями программы являются:

  1. Консультант – автоматическая торговая система, которая привязывается к определенному графику.
  2. Графическое отображение рассчитанных зависимостей – это индикатор, разработанный клиентом в качестве дополнения к уже встроенных в систему датчикам.
  3. Скрипт – сценарий, где прописан ход действий, созданный для единоразового автоматического выполнения.
  4. Библиотека – совокупность общедоступных функций, где хранятся и распространяются часто используемые модули клиентских программ. Автоматически библиотеки никакие функции не выполняют.
  5. Включаемый файл – первоначальный текст часто используемых модулей пользовательских программ.

С#

Данный язык программирования был разработан компанией Microsoft. Он многофункционален и удобен по всем параметрам: широкий простор для написания роботов, простота в использовании инструментов, безопасность и надежность.

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

Обратите внимание! Используя библиотеки, пользователь экономит время на создание брокера и откладку кода. Ведь раньше пользователь, который хотел создать индивидуальную автоматическую систему, должен был сперва написать библиотеку, а для этого требуются достаточно серьёзные знания в сфере программирования. Отнюдь, чтобы создать программного биржевого брокера, достаточно воспользоваться языком C#.

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

Java

Если сравнивать Java с вышеописанным языком программирования, то можно сделать вывод, что они практически идентичны.

Java является объектно-ориентированным языком программирования, на котором работают многие высокоуровневые функции, важные для создания роботов.

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

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

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

Обратите внимание! Язык программирования Java можно эксплуатировать отдельно от программируемого сервиса.

Python

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

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

Инструменты, которые понадобятся при разработки робота для трейдинга

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

Wealth-Lab

Данный сервис является самым эффективным на рынке для технической оценки, создания и тестирования роботизированных систем. Основным языком программирования здесь является WealthScript. Здесь также используются различные языки для написания библиотек и программ с поддержкой CLI.

Программирование торговых роботов: инструменты, язык для разработки

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

Обратите внимание! Данная схема имеет множество ограничений, поэтому с ней тяжело работать на российских фондовых биржах.

Как выбрать язык программирования для создания торгового робота – программирование для трейдера:

MetaStock

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

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

Программирование торговых роботов: инструменты, язык для разработки

Omega Research

Данный сервис предоставляет площадку для тестирования роботизированных инвестиционных брокеров, а также проводит полный их механический анализ. Основным языком программирования здесь является Easy Language, похожий на Pascal.

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

TSLab

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

Программирование торговых роботов: инструменты, язык для разработки

StockSharp

Программный инструмент StockSharp является бесплатным в базовой версии, но имеет расширенную версию Pro, в которой наиболее широкий и привлекательный функционал. Основным языком программирования является C#.

Программирование торговых роботов: инструменты, язык для разработки

LiveTrade

Данный продукт является плодом работы петербуржской русской компании Cofite. Через встроенный в сервис терминал можно запускать роботов, а в продукте Robotlab от той же компании разрабатывать их.

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

Программирование торговых роботов: инструменты, язык для разработки

SmartX

Торговая площадка SmartX являет собой не привычный терминал, а полноценный программный продукт, включающий в себя векторный язык программирования TradeScript, созданный специально для разработки роботизированных инвестиционных брокеров в США американской компанией Modulus Financial Engineering

Программирование торговых роботов: инструменты, язык для разработки

.

Главными преимуществами программного продукта являются:

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

Программирование торговых роботов: инструменты, язык для разработки

Основные этапы разработки бота для торговой площадки

Этап 1: идея и детальные описания будущей системы

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

Чтобы сформулировать идею было проще, задайте себе четыре важных вопроса, найти ответы на которые непросто, но они быстро продвинут разработку робота вперед:

В чем заключается идея вашей торговой стратегии?

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

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

Этап 2: предварительное тестирование

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

Обратите внимание! Чтобы разобраться с основным функционалом робота-консультанта нужно выделить несколько дней свободного времени.

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

Этап 3: анализ роботизированной системы

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

Условно они делятся на две категории:

  • торговые;
  • дизайнерские.

Торговые риски – все те моменты, которые будут упущены в процессе разработки торгового алгоритма.

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

Этап 4: ядро

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

Этап 5: разработка торговой стратегии

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

  • расписание продаж (когда стратегия открывает и закрывает позиции);
  • автоматизация торговой стратегии (чем меньше элементов использовано, тем лучше).

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

Этап 6: тестирование

После написания торговой стратегии ее необходимо протестировать на виртуальном счете или реальных торгах.

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

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

Этап 7: анализирование результатов

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

Важно! Необходимо постоянно обновлять информацию и не пренебрегать записями в данном журнале.

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

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

ТОП-4 доступных и простых способа написания автоматизированного брокера без знания языков программирования

Не всегда есть время и возможность разбираться и изучать программные языки, но всё-таки есть огромное желание создать свою систему. И это реально!

Способ 1: Написание торгового робота, используя инструменты внутреннего языка вашего программного обеспечения

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

Программирование торговых роботов: инструменты, язык для разработки

Робот для Quik на LUA

Способ 2: использование табличного процессора Excel

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

Для написания автоматизированного инвестиционного брокера будет необходимо познакомиться с самым примитивным языком – VBA. Синтаксис легок, так что много времени его изучение не займет.

Недостатками использования табличного процессора Excel являются замедленная работа и некоторые проблемы при внедрении робота в торговую систему.

Способ 3: использование аналитических платформ

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

Способ 4: применение в процессе разработки трейдингового робота языков программирования

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

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

Итак, мы разобрались, как разработать собственного торгового робота и что для этого требуется.

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

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

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

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

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

3 наиболее популярных крипто-торговых стратегий: Создание рынка (Market Making), Арбитраж, Стратегии следования за трендом.

Создание рынка (Market Making)

Это стратегия, в которой происходит непрерывная покупка и продажа, для того чтобы отразить разницу между ценой покупки и продажи. Чтобы сделать это, трейдер должен разместить лимитные ордера по обе стороны от книги заявок (order book), чтобы получить прибыль от спреда (spread). Тем не менее, эта стратегия будет иметь свои ограничения в условиях низкой ликвидности или во время предыдущей экстремальной конкуренции.

Арбитраж

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

Стратегия следования за трендом

Целью этой стратегии является выявление тренда актива и выполнение сделок на основе базового тренда. Стратегия следования за трендом пытается получить прибыль путем анализа импульса актива в заданном направлении. Трейдеры, которые выполняют эту стратегию, войдут в длинную позицию, когда криптовалюта торгуется вверх (long position), и продают позицию (short position), когда тренд разворачивается.

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

Простой торговый бота с использованием TradingView

А пока давайте приведем пример торгового бота, который может быть построен с использованием TradingView (TV). Прежде всего, важно создать сценарий стратегии, потому что сценарий стратегии может быть протестирован, и TV предоставит подробные результаты вашей стратегии.

Код ниже, представляет простую стратегию EMA (exponential moving average), в которой вход и выход происходят при пересечении быстрой и медленной экспоненциальной скользящей средней (EMA). Это можно вставить в Pine Editor TV.

Пример торговой стратегии

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading (WBT)

//@version=4
strategy(«EMA cross», overlay=true)

//Inputs
fast_ema=ema(close, 9)
slow_ema=ema(close, 21)

plot(fast_ema, color=color.red)
plot(slow_ema, color=color.blue)

//Strategy Conditions
entry_long = crossover(fast_ema, slow_ema)
exit_long = crossunder(fast_ema, slow_ema)

entry_short= crossover(slow_ema, fast_ema)
exit_short= crossunder(slow_ema, fast_ema)

//Strategy Execution
strategy.entry(«Long», long=true, when=entry_long)
strategy.close(«Long», when=exit_long)

strategy.entry(«Short», long=false, when=entry_short)
strategy.close(«Short», when=exit_short)

Пример торговой стратегии Kirill Osaulenko

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

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

Пример study сценария с той же стратегией

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading (WBT)

//@version=4
study(«EMA cross», overlay=true)

//Inputs
fast_ema=ema(close, 9)
slow_ema=ema(close, 21)

plot(fast_ema, color=color.red)
plot(slow_ema, color=color.blue)

//Strategy Conditions
entry_long = crossover(fast_ema, slow_ema)
exit_long = crossunder(fast_ema, slow_ema)

entry_short= crossover(slow_ema, fast_ema)
exit_short= crossunder(slow_ema, fast_ema)

//Strategy Execution

alertcondition(entry_long, title=»Enter Long»)
alertcondition(exit_long, title=»Exit Long»)
alertcondition(entry_short, title=»Enter Short»)
alertcondition(exit_short, title=»Exit Short»)

plotshape(series=entry_long, text=»Long», style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(series=exit_long, text=»EXIT Long»,style=shape.triangledown, location=location.abovebar, color=color.purple, size=size.small)
plotshape(series=entry_short, text=»Short», style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
plotshape(series=exit_short, text=»EXIT Short»,style=shape.triangleup, location=location.belowbar, color=color.purple, size=size.small)

Пример study сценария с той же стратегией Kirill Osaulenko

Теперь вы можете создавать оповещения (alerts) для вашего торгового актива и выбирать условия оповещения и действия.

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

JavaScript, Из песочницы, Node.JS, Криптовалюты


Рекомендация: подборка платных и бесплатных курсов дизайна интерьера — https://katalog-kursov.ru/

Начнем писать трейдинг бота, который будет работать на криптобирже Binance. Бот должен уметь:

  1. торговать самостоятельно, принося какой-то доход

  2. должен быть удобен для создания и обкатывания различных стратегий торговли

  3. тестировать стратегию на исторических данных

Пожалуй, начнем с архитектуры

У нас есть биржа Binance, у которой есть шикарное api. Поэтому архитектура могла бы выглядеть так:

Вызвать пару методов “купи дешевле” и “продай дороже”. Но задача для нас написать такого бота, при котором условный программист-трейдер сможет создавать и тестировать на прибыльность новые стратегии. Поэтому, необходимо отделить логику торговли от всего прочего. А также модулю логики должно быть все равно к какой бирже его подключили: к реальному API или к псевдо-API (для тестирования). С учетом всего этого получилась примерно вот такая архитектура:

Базу выбрал PostgreSQL. Тут нет никакого тайного умысла. Вы можете использовать любую. 

В связи с тем, что каждый модуль стоит внимания, это все не поместится в одну статью. Поэтому я начинаю мини-сериал: «Пишем качественного трейд бота на JS». Поэтому подписывайтесь, устраивайтесь поудобней — начинаем

Сервис для логов

Простой класс, который принимает на вход префикс для логирования и имеет два метода log и error. Эти методы печатают лог с текущим временем и перфиксом:

class LoggerService {
  constructor(prefix) {
    this.logPrefix = prefix
  }

  log(...props) {
    console.log(new Date().toISOString().substr(0, 19), this.logPrefix, ...props)
  }

  error(...props) {
    console.error(new Date().toISOString().substr(0, 19), this.logPrefix, ...props)
  }
}

Теперь подключим биржу

yarn add node-binance-api

Добавим класс BaseApiService. Сделаем в нем инициализацию Binance SDK, а также применим сервис LoggerService. Учитывая мой опыт с Binance могу сразу сказать, что в зависимости от торговой пары мы должны слать цену и обьем с разным количеством знаков после запятой. Все эти настройки для каждой пары можно взять, сделав запрос futuresExchangeInfo(). И написать методы для получения количества знаков после запятой для цены getAssetPricePrecision и объема getAssetQuantityPrecision.

class BaseApiService {
  constructor({ client, secret }) {
    const { log, error } = new Logger('BaseApiService')
    this.log = log
    this.error = error

    this.api = new NodeBinanceApi().options({
      APIKEY: client,
      APISECRET: secret,
      hedgeMode: true,
    })
    this.exchangeInfo = {}
  }

  async init() {
    try {
      this.exchangeInfo = await this.api.futuresExchangeInfo()
    } catch (e) {
      this.error('init error', e)
    }
  }

  getAssetQuantityPrecision(symbol) {
    const { symbols = [] } = this.exchangeInfo
    const s = symbols.find(s => s.symbol === symbol) || { quantityPrecision: 3 }
    return s.quantityPrecision
  }

  getAssetPricePrecision(symbol) {
    const { symbols = [] } = this.exchangeInfo
    const s = symbols.find(s => s.symbol === symbol) || { pricePrecision: 2 }
    return s.pricePrecision
  }
}

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

async futuresOrder(side, symbol, qty, price, params={}) {
  try {
    qty = Number(qty).toFixed(this.getAssetQuantityPrecision(symbol))
    price = Number(price).toFixed(this.getAssetPricePrecision(symbol))
    if (!params.type) {
      params.type = ORDER.TYPE.MARKET
    }
    const res = await this.api.futuresOrder(side, symbol, qty, price || false, params)
    this.log('futuresOrder', res)
    return res
  } catch (e) {
    console.log('futuresOrder error', e)
  }
}

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

class TradeService {
  constructor({client, secret}) {
    const { log, error } = new LoggerService('TradeService')
    this.log = log
    this.error = error
    this.api = new NodeBinanceApi().options({
      APIKEY: client,
      APISECRET: secret,
      hedgeMode: true,
    })
    this.events = new EventEmitter()
  }

  marginCallCallback = (data) => this.log('marginCallCallback', data)

  accountUpdateCallback = (data) => this.log('accountUpdateCallback', data)

  orderUpdateCallback = (data) => this.emit(data)

  subscribedCallback = (data) => this.log('subscribedCallback', data)

  accountConfigUpdateCallback = (data) => this.log('accountConfigUpdateCallback', data)

  startListening() {
    this.api.websockets.userFutureData(
      this.marginCallCallback,
      this.accountUpdateCallback,
      this.orderUpdateCallback,
      this.subscribedCallback,
      this.accountConfigUpdateCallback,
    )
  }

  subscribe(cb) {
    this.events.on('trade', cb)
  }

  emit = (data) => {
    this.events.emit('trade', data)
  }
}

При помощи метода из SDK this.api.websockets.userFutureData подписываемся на события из биржы. Самой главный колбек для нас this.orderUpdateCallback . Он вызывается каждый раз когда меняется статус у ордера. Ловим это событие и прокидываем через EventEmitter тому, кто на это событие подписался, используя метод subscribe.

Перейдем к базе данных

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

yarn add sequelize-cli -D
yarn add sequelize
npx sequelize-cli init

Добавим docker-compose.yml файл для локальной базы:

version: '3.1'

services:
  db:
    image: 'postgres:12'
    restart: unless-stopped
    volumes:
      - ./volumes/postgresql/data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: example
      POSTGRES_DB: bot
    ports:
      - 5432:5432
    networks:
      - postgres


networks:
  postgres:
    driver: bridge

А также добавляю миграции и модели. User, Order

Продолжение следует.

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

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

progr

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

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

1. Разработку форекс робота начинаем с идеи

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

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

Написать форекс советника

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

2. 4 важных вопроса перед разработкой

Но перед этим попытайтесь ответить себе на следующие вопросы:

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

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

[info_block align=»right» linkText=»Форекс советники» linkUrl=»https://fortrader.org/forex-ea-testing/» imageUrl=»http://files.fortrader.org/uploads/2016/08/robot.jpg»]Исследование торговых роботов с возможностью скачать советника.[/info_block]

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

3. Конструктор советников – не проходим мимо!

У новичков на валютном рынке часто возникает множество вопросов, ответы на которые бывают не совсем очевидны, либо являются лишь вопросом неопытности оного. Будучи начинающим трейдером, достаточно прочитать одну книгу Билла Вильямса, чтобы на всю жизнь подменить понятие торгового хаоса торговым порядком. Затем такие люди удивляются, почему вот здесь да не купить, а вот здесь да не продать, и заказывают у программистов советник по пересечению двух скользящих средних. А ведь на начальных этапах обучения это вполне можно отдать на откуп готовым инструментам разработки. Одной из таких как раз является MQL5 Wizard – мастер по созданию советников для MetaTrader 5.

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

4. MQL5 Wizard. Сделать советник за 5 минут

Итак, для начала запускаем MetaTrader 5 и переходим в редактор приложений (кнопка F4). На верхнем меню жмем кнопку «Создать» и в появившимся диалоге выбираем генерацию нового советника.

Мастер советников MetaTrader

Дальше нужно указать название советника и основные входные параметры.

Мастер советников MetaTrader

Добавляем модули торговых сигналов. Модули могут быть как стандартные, так и разработанные сообществом (вы тоже можете поучаствовать в данном процессе).

Параметры сигналов советника

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

Варианты торговых сигналов советника

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

параметры модуля сигналов

Обычный трейлинг стоп или закрытие сделки по значениям индикатора – на ваш выбор.

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

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

5. Хочу программировать непростого советника? Написание технического задания

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

Написание ТЗ для робота

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

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

6. Напишите мне советник по индикатору

Пример плохого задания для создания торгового советника – его отсутствие. Само намерение заказчика может быть и понятно: есть индикатор, нужно написать торгового робота, ну а дальше что?

[info_block align=»right» linkText=»Вникайте в процесс!»]»Старайтесь вникать в процесс работы и всего, что непосредственно касается реализации идеи вашего советника»[/info_block]

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

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

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

7. Выбор исполнителя

Если у вас нет опыта работы с фриланс-биржами, попробуйте представить себе субэкваториальную версию ада. На самом деле, не все так страшно, но некоторые нюансы все же стоит учитывать.

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

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

Реализация торгового советника

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

[info_block align=»right» linkText=»Все в ваших руках»]»В ваших интересах контролировать процесс создания советника вашей мечты. Просите проводить промежуточные этапы работ, участвуйте в бета-тесте и не брезгуйте узнавать технические подробности.»[/info_block]

Один из типичных примеров – недопонимание форматов файлов и их значения. Вроде: «У меня тут есть .dll библиотека (.exe файл или .ex4 программа), не могли бы вы быстренько поправить то и то, а я вам за это копеечку закину? Нет? А почему? Василий мне сделал советника за 5 баксов, а вы плохой разработчик значит!».

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

8. Сдача советника – включайтесь в работу!

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

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

Принять участие в разработке своего робота

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

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

[info_block align=»right» linkText=»Безопасный Мартингейл» linkUrl=»https://fortrader.org/learn/forex-trader/bezopasnyj-martingejl-kak-otdelnymi-elementami-martingejla-uvelichit-pribylnost-strategii.html» imageUrl=»http://files.fortrader.org/uploads/2016/07/coins-730×487.jpg»]Как отдельными элементами Мартингейла увеличить прибыльность стратегии?[/info_block]

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

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

Заключение

Великие деятели, как Альберт Хофманн, не дадут соврать. Опыт создания своего продукта бесценен. Если же вы пришли на валютный рынок по собственному желанию, поверьте, это надолго.

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

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

Вам также будет интересно

  • Как из запаздывающего индикатора сделать работающий Грааль?
  • ECN или MTF – выбираем агрегатор ликвидности
  • Сетка ордеров на форекс: 2 варианта популярной стратегии

Чтобы создать торгового робота, нужна торговая система

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

Начнем писать трейдинг бота, который будет работать на криптобирже Binance. Бот должен уметь:

  1. торговать самостоятельно, принося какой-то доход

  2. должен быть удобен для создания и обкатывания различных стратегий торговли

  3. тестировать стратегию на исторических данных

Пожалуй, начнем с архитектуры

У нас есть биржа Binance, у которой есть шикарное api. Поэтому архитектура могла бы выглядеть так:

Вызвать пару методов “купи дешевле” и “продай дороже”. Но задача для нас написать такого бота, при котором условный программист-трейдер сможет создавать и тестировать на прибыльность новые стратегии. Поэтому, необходимо отделить логику торговли от всего прочего. А также модулю логики должно быть все равно к какой бирже его подключили: к реальному API или к псевдо-API (для тестирования). С учетом всего этого получилась примерно вот такая архитектура:

Базу выбрал PostgreSQL. Тут нет никакого тайного умысла. Вы можете использовать любую. 

В связи с тем, что каждый модуль стоит внимания, это все не поместится в одну статью. Поэтому я начинаю мини-сериал: «Пишем качественного трейд бота на JS». Поэтому подписывайтесь, устраивайтесь поудобней — начинаем

Сервис для логов

Простой класс, который принимает на вход префикс для логирования и имеет два метода log и error. Эти методы печатают лог с текущим временем и перфиксом:

class LoggerService {
  constructor(prefix) {
    this.logPrefix = prefix
  }

  log(...props) {
    console.log(new Date().toISOString().substr(0, 19), this.logPrefix, ...props)
  }

  error(...props) {
    console.error(new Date().toISOString().substr(0, 19), this.logPrefix, ...props)
  }
}

Теперь подключим биржу

yarn add node-binance-api

Добавим класс BaseApiService. Сделаем в нем инициализацию Binance SDK, а также применим сервис LoggerService. Учитывая мой опыт с Binance могу сразу сказать, что в зависимости от торговой пары мы должны слать цену и обьем с разным количеством знаков после запятой. Все эти настройки для каждой пары можно взять, сделав запрос futuresExchangeInfo(). И написать методы для получения количества знаков после запятой для цены getAssetPricePrecision и объема getAssetQuantityPrecision.

class BaseApiService {
  constructor({ client, secret }) {
    const { log, error } = new Logger('BaseApiService')
    this.log = log
    this.error = error

    this.api = new NodeBinanceApi().options({
      APIKEY: client,
      APISECRET: secret,
      hedgeMode: true,
    })
    this.exchangeInfo = {}
  }

  async init() {
    try {
      this.exchangeInfo = await this.api.futuresExchangeInfo()
    } catch (e) {
      this.error('init error', e)
    }
  }

  getAssetQuantityPrecision(symbol) {
    const { symbols = [] } = this.exchangeInfo
    const s = symbols.find(s => s.symbol === symbol) || { quantityPrecision: 3 }
    return s.quantityPrecision
  }

  getAssetPricePrecision(symbol) {
    const { symbols = [] } = this.exchangeInfo
    const s = symbols.find(s => s.symbol === symbol) || { pricePrecision: 2 }
    return s.pricePrecision
  }
}

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

async futuresOrder(side, symbol, qty, price, params={}) {
  try {
    qty = Number(qty).toFixed(this.getAssetQuantityPrecision(symbol))
    price = Number(price).toFixed(this.getAssetPricePrecision(symbol))
    if (!params.type) {
      params.type = ORDER.TYPE.MARKET
    }
    const res = await this.api.futuresOrder(side, symbol, qty, price || false, params)
    this.log('futuresOrder', res)
    return res
  } catch (e) {
    console.log('futuresOrder error', e)
  }
}

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

class TradeService {
  constructor({client, secret}) {
    const { log, error } = new LoggerService('TradeService')
    this.log = log
    this.error = error
    this.api = new NodeBinanceApi().options({
      APIKEY: client,
      APISECRET: secret,
      hedgeMode: true,
    })
    this.events = new EventEmitter()
  }

  marginCallCallback = (data) => this.log('marginCallCallback', data)

  accountUpdateCallback = (data) => this.log('accountUpdateCallback', data)

  orderUpdateCallback = (data) => this.emit(data)

  subscribedCallback = (data) => this.log('subscribedCallback', data)

  accountConfigUpdateCallback = (data) => this.log('accountConfigUpdateCallback', data)

  startListening() {
    this.api.websockets.userFutureData(
      this.marginCallCallback,
      this.accountUpdateCallback,
      this.orderUpdateCallback,
      this.subscribedCallback,
      this.accountConfigUpdateCallback,
    )
  }

  subscribe(cb) {
    this.events.on('trade', cb)
  }

  emit = (data) => {
    this.events.emit('trade', data)
  }
}

При помощи метода из SDK this.api.websockets.userFutureData подписываемся на события из биржы. Самой главный колбек для нас this.orderUpdateCallback . Он вызывается каждый раз когда меняется статус у ордера. Ловим это событие и прокидываем через EventEmitter тому, кто на это событие подписался, используя метод subscribe.

Перейдем к базе данных

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

yarn add sequelize-cli -D
yarn add sequelize
npx sequelize-cli init

Добавим docker-compose.yml файл для локальной базы:

version: '3.1'

services:
  db:
    image: 'postgres:12'
    restart: unless-stopped
    volumes:
      - ./volumes/postgresql/data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: example
      POSTGRES_DB: bot
    ports:
      - 5432:5432
    networks:
      - postgres


networks:
  postgres:
    driver: bridge

А также добавляю миграции и модели. User, Order

Продолжение следует.

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

Понравилась статья? Поделить с друзьями:
  • Как написать бота для телеграмм на python
  • Как написать бота для твича
  • Как написать бота для страницы вк
  • Как написать бота для спама
  • Как написать бота для сайта