Симулятор трейдера. Шаг 1.

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

 

Попытка 1. Неудачная.

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

14271097353790

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

Я пользуюсь терминалом QUIK, и он позволяет внутри себя создавать простые стратегии и сложные условия стоп-заявок. Можно еще писать роботов, но делать это нужно с помощью встроенных формочек или на внутреннем языке QPILE, а с недавнего времени и используя язык программирования Lua.

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

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

github нам поможет!
ironcat

Нет!

Впервые не смог найти ничего полезного на github’е. Как правило, все наоборот – куча разных библиотек, нужно только понять, что лучше подходит для решаемой задачи и выбрать. В области же трейдинга всё плохо. Никакого open source’a. Зато куча сайтов, на которых тебе пытаются продать уже готовых роботов, реализующих бесчисленное множество стратегий и сулящих несметные богатства.

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

Однако, одна библиотека была найдена – StockSharp. Сначала радость. Потом установка. Потом несколько дней пытался разобраться как получить примитивные данные или отправить какую-либо команду терминалу. Часть кода библиотеки StockSharp выложена в open source, часть кода закрыта, часть кода можно использовать только, если купишь лицензию. Очередные разводы на деньги. “Интерпрайз” в плохом понимании этого слова.  Универсальная система, которая подключается ко всем возможным терминалам и,  как следствие, ужасно перегруженная и плохо работающая.

Но ничего другого не нашёл.

lenta-smile-worldwide-537e0054bd1a7

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

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

И это хорошо!

thisisgood

 

Попытка 2. Уже лучше.

Спустя несколько месяцев я вернулся к проекту. Без особой надежды ещё раз поискал в сети коннекторы к QUIK’у на C# и был приятно удивлён, наткнувшись на библиотеку QuikSharp. Автор библиотеки залил первую версию в тот же месяц, когда мне надоело возиться со StockSharp и я забросил проект.

Решил проверить QuikSharp, скачал исходники, где-то за час разобрался и настроил все скрипты, и еще за пол часа, разобравшись с API, написал первые строчки кода. Примерно такие:

Quik quik = new Quik();
Order newOrder = new Order
{
   ClassCode = "TQBR",
   SecCode = "SBER",
   Operation = Operation.Buy,
   Price = 69.3m,
   Quantity = 1
};
quik.Orders.CreateOrder(newOrder);

И всё работает! Команда на покупку отправилась в терминал, заявка создалась и выполнилась. Реальные акции за реальные деньги были куплены.

И сразу сформировался план действий.

hqdefault

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

Пришлось разбираться, как работает библиотека QuikSharp.

Терминал Quik внутри себя может запускать скрипты на Lua. Эти скрипты имеют доступ к API терминала и могут как дергать данные, так и отправлять команды. Библиотека QuikSharp состоит из двух частей:

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

Чтобы добавить недостающий метод, нужно написать код на Lua, а вызов этого кода и обработку ответа обернуть, используя C#.

И вот вооружившись документацией по Lua и описанием API терминала Quik, я начал дописывать все недостающие методы. Проверочный список, составленный ранее, превратился в список задач. Реализовал методы работы со стоп-заявками и получения свечей с открытого в терминале графика. Весь добавленный функционал был отправлен автору библиотеки и впоследствии стал её частью.

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

976732803_7

Заключение.

У программистов всё просто. Решил сделать веб-приложение, игру или утилиту для мобилок. Скачиваешь SDK, выбираешь один из доступных языков и/или фреймворков и приступаешь к разработке. Сразу в бой. Прототипы. Проверка идей. Куча документации. Разбираешься, как вывести “hello world”, и можешь всем рассказывать, что владеешь технологией.

В моём же случае метода “print”, для вывода “hello world” не было. Библиотеки, выводящие в консоль текст легко и непринужденно, без подключения распределенного искусственного интеллекта и блокчейн майнеров для генераций букв ‘d’, ‘e’, ‘h’, ‘l’, ‘o’, ‘r’, ‘w’, отсутствовали. Нужно было самому реализовать метод “print” и все сопутствующие, и хорошо, что появились попутчики, облегчившие мне путь.

helloworld

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


Далее: Симулятор трейдера. Шаг 2.

Leave a Reply

avatar
  Subscribe  
Notify of