Как я писал биржевого робота для Quik. Часть 1
Материал доступен также в качестве видео:
В наш век, очень многих волнует вопрос нетрудового получения крупных сумм денег рискованными путями.
Есть какие-то черные и серые темы, мошенничество, взломы, вирусы-вымогатели и т.д., но заниматься таким я бы никому не советовал.
Получите судимость, и на нормальную работу потом устроиться будет очень трудно.
Поэтому, под хоть как-то оправданным риском в данном случае я понимаю разнообразные ставки на спорт, а так же игру на бирже.
А чтобы уменьшить риски, сделать выигрыш более-менее системным, требуется осваивать много информации и проводить регулярную аналитическую работу.
Чувствуете? Опять придется работать.
Это не всегда интересно людям, и они стараются автоматизировать и переложить на кого-то рутину, а именно загрузку данных, их анализ, принятие оптимального решения, и совершение транзакций.
В идеале должен быть программный продукт, в котором есть одна кнопка «Деньги», при нажатии на которую на счет падает круглая сумма.
Безусловно, азартные игры (в том числе на бирже под соусом солидного инвестирования) это порок, и я не агитирую играть, поскольку слабовольные люди могут легко поломать себе судьбу с помощью всего этого. Но и отговаривать не буду — я вам все-таки не нянька.
К слову, у меня был опыт и в разработке анализатора коэффициентов букмекерских контор, но было это лет 10 назад, сейчас я сильно в эту тему не погружен, и об этом как-нибудь в другой раз.
Сегодня хотелось бы поговорить о биржевой торговле, на примере московской бирже, также известной как ММВБ, ММВБ-РТС, мамба, MOEX.
И о технических аспектах организации торговых роботов.
Для торговли предоставляется биржевой терминал, который называется Quik.
Разумеется, поторговав через него, в какой-то момент мне стало интересным написать какого-то торгового робота. Который бы торговал за меня, а я бы занялся наиболее интересной частью процесса — тратил бы выигранные на бирже деньги.
Я изучил предложение на рынке конструкторов таких роботов, и решил что хотя идея набора логики из кубиков хороша для детей, не нюхавших кода, но в них недостаточно возможностей.
Как назло, еще и апи для расширения для них было на шарпе (C # ), а я все-таки больше люблю в Java/Scala, а одновременная разработка на джаве/скале и шарпе чревата шизофренией, уж не обессудьте.
Поэтому я решил, что проще накорябать на коленке своего робота для Квика на джаве/скале, а там уж как пойдет, адаптировать под плазу2, или еще под что.
Квик предоставлял несколько вариантов взаимодействия с внешним миром, а именно:
3. Онлайн подключения посредством расширений на ЛУА
Разумеется, поскольку речь про деньги, мне хотелось обеспечить наиболее быстрый обмен, поэтому я выбрал третий способ.
Язык ЛУА не является мега-популярным, и реализовывать всю логику робота в нем было бы странно, учитывая что к примеру в java/scala доступена масса библиотек, технологий и инструментов, начиная с возможности парсинга новостей, и заканчивая анализом бигдаты в хадупе и спарке.
Забегая вперед, одной лишь джавой/скалой мне ограничиться не удалось, пришлось плотно интегрировать все это хозяйство с питоном.
Тем не менее, было необходимо связать Квик через ЛУА с приложением в джава машине.
Замечательный сайт Смарт Лаба с ходу предложил прототип решения — через так называемые Windows named pipe.
Спустя пару часов решение подтвердило свою работоспособность, но с недостатками.
1. В ЛУА существуют так называемые колбеки, которые, присылают обновления стакана, а также обезличенные сделки (из которых, собственно, можно на лету рисовать свечной график).
А пример со смартлаба предполагал интерактивные запросы в квик, что существенно увеличило бы задержку.
Недолго думая, я продублировал поток, с тем чтобы один пересылал колбеки, а второй — обрабатывал в квике входящие запросы.
2. Второй недостаток был серьезнее. То ли из-за реализации работы с named pipe в джаве, то ли из-за моих кривых рук во время отладки приложения квик регулярно зависал. Как только отваливалось джава приложение, квик приходилось аварийно завершать через диспетчер задач, а частенько я не успевал сделать это вовремя, и вся машина намертво висла. Это было крайне неприятно.
3. Третье. В моем распоряжении имелся домашний сервер, собственно, просто комп с мощным многоядерным камнем, забитый под завязку оперативкой общим оъемом под сотню гигабайт, для эксперементов с бигдатой.
Разумеется, под линуском, с несколькими виртуалками внутри. Для работы с Windows named pipe, по определению, требовалась Windows, что не позволяло использовать в приложении большой объем памяти сервера, либо требовалось промежуточное звено для шлюзования команд и колбеков из named pipe в какой-то сетевой протокол.
Что было бы лишним звеном.
Короче говоря, я нашел более приличный способ — библиотеку сетевых сокетов для ЛУА, а основную идею двух каналов, оставил как есть.
Тайминги проброса данных по локальной гигабитной сетке, по моей оценке, примерно те же что и при локальной передаче через named pipe, а именно десятки миллисекунд.
На стороне робота организуется tcp сервер, слушающий несколько портов. Квик посредством скрипта на ЛУА цепляется туда, и происходит обмен данными.
Данные стаканов и обезличенных сделок обрабатываются на лету, но также складируются в сиквел базу данных — у меня Postgres, но также это могут быть например и паркетные файлы в спарке, или прости господи Json в MongoDb.
В момент, когда робот чует, что произойдет разворот курса, он делает заявку на покупку/продажу актива, или же фьючерса на актив. Одновременно с этим, можно выставить стоп-лосс, либо стоп+тейк профит, в зависимости от вашей стратегии.
Если вы верите в теории заговора, о том что брокер, видя у себя ваш стоп-лосс на тысячу рублей, спит и видит как бы его нахлобучить в сговоре с ВЭБом, вы можете реализовать собственный приватный умный стоп-лосс внутри своего робота, который, например, не будет срабатывать при длинных проколах на свече, и прочих кукловодских происках, а мужественно держаться до победного маржин-кола. )
В общем, далее все ограничивается только вашей фантазией и знанием Граалей.
Источник статьи: http://zen.yandex.ru/media/id/5ecac67da3811a33d94a3702/kak-ia-pisal-birjevogo-robota-dlia-quik-chast-1-5ee94c91cbbc2d362a05579f
Как написать торгового робота: инструменты для начинающих
Тема автоматизированных систем для торговли на бирже довольно популярна в рунете в последние несколько лет. Однако начинающим инвесторам создать своего торгового робота может быть нелегко. Сегодня мы расскажем о том, как это можно сделать без лишних затрат.
Примечание: любая инвестиционная деятельность на бирже связана с определенным риском, это нужно учитывать. Кроме того, для запуска своего торгового робота вам понадобится брокерский счет, открыть его можно онлайн. Вы можете отладить свою стратегию с помощью тестового доступа с виртуальными деньгами.
Варианты создания роботов
Существует несколько вариантов создания роботизированного софта для торговли на бирже:
- Создание роботов для работы на прямом подключении – такие системы работают «в обход» торговой системы брокера, отправляя заявки напрямую в «движок» торговой системы биржи. Этот вариант используют уже опытные трейдеры, которые готовы платить в том числе и за такой способ подключения.
- Подключение к брокерской торговой системе по API. Некоторые брокеры позволяют подключать внешний торговый софт к своим торговым системам по специальным интерфейсам. Клиенты ITI Capital могут делать это с помощью API SMARTcom. В этом случае роботы могут быть достаточно сложными.
- Автоматизация операций напрямую в торговом терминале. Наиболее простой, подходящий для новичков способ, заключается в том, чтобы автоматизировать торговлю напрямую в базовой программе любого трейдера – терминале.
Сегодня мы будем рассматривать третий вариант, поскольку он наиболее прост.
Как это работало раньше
Торговые терминалы предыдущих поколений можно было интегрировать с различными инструментами автоматизации. Одним из наиболее популярных, как ни странно, в свое время был Excel. С его помощью трейдеры могли настроить экспорт данных из торгового терминала, а также получать торговые приказы.
Меню для подключения Excel в одном из торговых терминалов прошлого поколения
Также распространенной практикой среди трейдеров было подключение к своим терминалам мощных систем технического анализа и разработки роботов вроде WealthLab и MetaStock. В таких случаях интеграция обычно осуществляется с помощью дополнительных библиотек.
В перечисленных случаях трейдер получал возможность автоматизации, и, в случае MetaStock и WealthLab, создания довольно сложных торговых систем, но связки с внешними программами часто оказывались ненадежными. С течением времени эта проблема была решена – в некоторых торговых терминалах появились встроенные языки программирования.
Как это работает теперь: изучаем язык TradeScript
В наши дни на российском рынке самый простой способ создать несложного торгового робота, работающего с системой брокера, это использование терминала SMARTx.
В нем есть специальный плагин с конструктором торговых роботов TradeScript. С помощью простого, но довольно мощного скриптового языка трейдеры могут создавать механические системы различного уровня сложности. Язык был изначально создан для разработки торговых роботов, он довольно прост в изучении, а многие алгоритмы схожи по написанию с Metastock, что облегчает работу пользователям, знакомым с этим программным пакетом.
Плюсом TradeScript по сравнению с Wealth-Lab и тем же Metastock является отсутствие необходимости создания сложных конструкций и использования различных коннекторов для передачи приказов в торговый терминал. Конструктор роботов встроен в SMARTx, что позволяет добиваться значительно более высокой надежности и быстродействия.
Вот пример торговой стратегии, записанной на TradeScript:
В пакете с TradeScript поставляет и модуль бэктестинга, который позволяет оценить продуктивность работы описанной стратегии на исторических данных. Помимо прочего, в системе реализована функция тестирования торговой системы «на лету» с использованием текущих биржевых данных, но без вывода приказа на биржу — время виртуальной сделки, цена и получившаяся «доходность» будут показываться в отдельном окне.
Кроме того пользователь может запускать столько одновременно работающих алгоритмов, сколько позволит тактовая частота процессора и память компьютера. Учитывая большое число слов и операндов скриптового языка, это означает возможность создания сколько угодно сложных торговых стратегий.
Что еще: отладка на тестовом доступе
Использование встроенной в торговый терминал функциональности по разработке торговых роботов – удобный и надежный способ автоматизации торговли. Однако несмотря на существующие функции для тестирования стратегий, не стоит пренебрегать и дополнительными возможностями отладки.
Поэтому мы рекомендуем перед запуском стратегии для торговли реальными деньгами «прогнать» ее на тестовом доступе. Этот шаг позволит отладить все моменты, включая реакцию программы на осуществленные сделки, без риска реальных финансовых потерь. Применение анализа с помощью исторических данных, проверки «на лету» и использование тестового доступа позволит максимально полно отладить вашу стратегию.
Источник статьи: http://habr.com/ru/company/iticapital/blog/470233/
10 этапов разработки торгового робота под QUIK и TSLab от Robot Scalper
К нам поступил запрос на создание многопараметрического робота, с кучей условий торговой логики и в конце с припиской: «За работу я готов оплатить 800 рублей». Как у заказчика получилась такая сумма осталось не ясно. Возможно, всё тривиально, и это просто все его доступные средства, которые остались от торговли по интуиции. А возможно человек просто не понимает какую работу нужно проделать и из чего образуется цена на торговых роботов. Но это не страшно. Мы как раз сейчас и постараемся разобраться в этом.
Итак, чтобы разработать робота нужно выполнить определенные этапы. Рассмотрим их.
- Нужно определиться с торговой стратегией и формализовать её (точки входа, стоп-лоссы, тейк-профиты, фильтры и т.п.);
- Желательно создать прототип данного робота;
- Проверить работоспособность стратегии и прототипа на исторических данных;
- Желательно провести оптимизацию стратегии и найти оптимальные значения параметров;
- Нужно провести анализ сделок и добавить общие фильтры на ситуации в которых робот часто показывает убытки. Главное, нельзя примерять переоптимизацию! Иначе в реальной торговли результаты будут сильно отличаться! После этого возвращаемся к пункту 4. И работаем до тех пор пока стратегия не будет универсальной или пока мы её не забракуем как непригодную. Так тоже бывает, и не редко.
- Теперь можно приступать к непосредственной разработке робота, например, на LUA под QUIK;
- После разработки нужно протестировать робота и убедиться в четкой работе скрипта. Если обнаружатся неточности в работе или явные баги, то их нужно исправить и заново запустить робота на тестирование;
- Для того чтобы пользователь мог легко управляться с роботом требуется сделать удобный интерфейс и подробное описание функционала, то есть создаем документацию;
- Плюс нужна подробная инструкция с картинками по установке и использованию робота для начинающих пользователей;
- И конечно же всё равно у заказчика будут появляться вопросы, на которые нам нужно отвечать. То есть, нужна техническая поддержка.
И это мы рассмотрели идеальный вариант, когда во время работы заказчик не вносит изменения в торговую стратегию.
Как Вы могли убедиться, для создания качественного торгового робота требуется довольно много времени и сил. Мы здесь даже не касаемся самого программирования, которое тоже является довольно сложным и долгим процессом.
По поводу технических инструментов мы можем порекомендовать следующие варианты:
- Для тестирования прототипа стратегии на исторических данных хорошо подойдет программа TSLab.
- Для реальной торговли на боевом счете желательно использовать роботов на LUA. В этих скриптах можно прописать всевозможные проверки торговой логики и проверки на корректность входных данных (биржа может передавать и нулевую цену актива и пустые значения, робот при этом не должен «падать» и выдавать баги). Плюс, робот на LUA подключается непосредственно в QUIK, имеет высокое быстродействие, не занимает много ресурсов компьютера и не требует ежемесячной абонентской платы.
Рентабельно ли разрабатывать таким образом роботов за 800 рублей или даже за 3-5 тыс.рублей? Конечно же нет.
Что за такие цены могут предложить на рынке? Только скачанный где-то непонятный скрипт с сомнительной документацией и конечно без качественной техподдержки. Бесплатный сыр мы все знаем где бывает. Да и скупой платит дважды.
Нужно ли платить разработчикам роботов или нет, каждый решает для себя сам. Можно и не платить, а взять и методично, по пунктам, всё сделать самостоятельно. Сколько уйдет на это времени? И какой будет конечный вариант? Зависит непосредственно от опыта, знаний и умений конкретного человека.
Чем больше у человека опыта в программировании, в трейдинге, в автоматизации бизнес-процессов, в тестировании, в умении оптимизировать стратегии, тем быстрее и качественнее будет результат. Если вы начинающий алготрейдер и у вас нет наставника с его опытом и наработками, то настраиваться сразу желательно на 6 месяцев работы и более.
Профессиональный алготрейдер может передать знания по созданию прототипов, тестированию на истории и оптимизации роботов за более короткий срок. И это будет скорее всего платная услуга.
Кстати, как вы считаете, что лучше, купить готового робота за несколько тысяч рублей или за эту же сумму научиться самостоятельно разрабатывать и тестировать роботов? Напишите в комментариях.
По различным вопросам обращайтесь в личку или на почту:
mail@robot-scalper.ru
Очень много интересной и важной информации можно найти здесь:
https://www.instagram.com/robot_scalper/
Желаем Вам успехов в трейдинге!
Берегите себя и свой депозит!
Источник статьи: http://smart-lab.ru/blog/523317.php