Блог им. Shurik

Написание торговых роботов. Шаг 3.

Итак, долгожданное продолжение первой части.



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

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

Здесь, как обычно, вариантов несколько.
1) Вы тестировали стратегию в тестере, который поддерживается вашим брокером — TS Lab (АйтиИнвест, Алор, Финам), Wealth Lab (Церих),… — просто напросто пользуясь средствами программы и вашего брокера посылаете приказы на биржу.

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

Минусы:
1) зависимость от стороннего софта;
2) зависимость от адаптера между программой и брокером;
3) неспособность глубоко воздействовать на робота.
По сути — кроме самой стратегии вы ничего редактировать не можете. Ни как часто стратегия обрабатывается, ни как часто надо проверять переподключение, ни подключение к другому серверу в случае разрывов — Н И Ч Е Г О!;
4) порой большая ограниченность в стратегиях.
Попробуй на Wealth-Lab напиши стратегию на тиках, которая будет хранить дневную историю и считать определённые значения по объёмам / дельте / хреньте /… Мой компьютер начинал жестоко тормозить, стратегии тормозились, не было лёгкости в управлении.
Я знаю, что многие под TS Lab покупают сервера отдельные с 8 ядрами процессора и 8 Gb оперативки. Моё мнение — бред.

Первый пункт я никогда не приветствовал. Может после более глубокого изучения TS Lab моё мнение изменится.


2) Программирование стратегии.
Большой пункт.
Есть 2 варианта:
a) о чудо, в школе / институте вы изучали Basic/Pascal/C/… И вы умеете программировать на одном из современных языков — С++/C#.
b) вы программировать не умеете.
b1) учиться хотите — берёте книжку из первого поста и вперёд, постигать практикой азы.
b2) учиться не хотите. Пишите ТЗ стратегии. Как можно лучше расписывая детали о том, как должны задаваться параметры, что должен робот уметь, какие кнопки должны быть помимо кнопки «Рубить бабло», «Вывести бабло» и так далее и как можно подробнее. И в общих чертах, без мелких деталей, описываете свою стратегию. Далее с этим ТЗ обращаетесь к программисту (ко мне, к примеру :D ) c вопросом сможет ли он и если да, сколько по времени / деньгам это займёт.


Если вы всё же решили всё запрограммировать сами, то есть следующие варианты:
1) у вас простейшая стратегия на скользящих средних, которая не требовательна к скорости, которой задержки по 2-3 секунды ничего не значат. Берёте Qpile (встроенный язык в квик) и реализовывайте стратегию на нём. Подробная документация прилагается к квику; квик есть почти у каждого брокера — проблем быть не должно.
Замечу, что первые 4 стратегии, которые у меня зарабатывали, были написаны именно на Qpile. Сейчас на Qpile ничего не работает, всё переписано.

Минусы — скорость; невозможность реализации сложных стратегий.
Плюсы — простота.


У вас продвинутая стратегия и хочется реализовать её максимально удобно / продвинуто. Чтоб управление соединением, котировками, обработкой стратегии было полностью на ваших плечах.
2) SmartCom
не стоит, см. пункт 4
3) Plaza2
не стоит, см. пункт 4
4) Stock#
Библиотека, которая позволяет подключаться напрямую к терминалам / шлюзам / API брокера, минуя сторонние программы.
Всё что надо — находится под вашим полным контролем.
Доступны: SmartCom, Quik, Alpha Direct. В ближайшее время будет доступна и Plaza2.
Самое главное — не надо переписывать стратегию, если переходите от Альфы в Открытие или из Алора в Айти. Всё что будет необходимо — заменить пару строчек кода.
Более того — доступно тестирование на истории.

В общем уверен на 100%, что на российском рынке именно за этой библиотекой будущее.
Именно её простота, но в тоже время и глубина, позволяет писать абсолютно любые стратегии которые приходят в голову.
На моей машине работают одновременно порядка 12 стратегий с 4 квиками — всё реализовано в одной программе, процессора всё это есть порядка 5-10% — большинство едят квика, по 0-2%.

Почему Stock#, а не SmartCom или Plaza2? Доступны удобные интерфейсы, многие ошибки исправлены / обработны именно внутри Stock#, нет необходимости обрабатывать их самому.
В общем луче один раз увидеть / попробовать.


Минусы — необходимо время, чтоб разобраться / написать свою архитектуру; сложность не для программиста.
Плюсы — скорость, удобоство, платформонезависимость, возможность тестировать стратегии, множество удобных вспомогательных функций — реализована отправка смс, e-mail, .....

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

Нетрудно догадаться, что именно через Stock# в настоящее время у меня и реализованы все роботы. :)


Пост получился небось опять сумбурным и очень длинным. Спасибо тем, кто дочитал. :)

Продолжение следует… (а надо ли? :) )
★31
64 комментария
отличная статья!
avatar
конечно давай продолжения, неплохо было бы какие нить простенькие уроки показать))
avatar
Сам ниписал бота именно с помощью Stock#.
avatar
>Я знаю, что многие под TS Lab покупают сервера отдельные с 8 ядрами процессора и 8 Gb оперативки.
А еще бабки на лавке много чего говорят.

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

Кстати, пересчет в TSLab гибко настраивается. Есть режим пересчета по сделке, а не по интервалу.

Я писал голого робота на c# под АльфаДирект. Это сложнее, а главное нету никакого смысла все усложнять.

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

Stock# в принципе неплоха, но лишняя абстракция — это потенциально лишние баги. И снова усложнение.

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

«Роботов» которые используются большими организациями типа инвест-банков мы не берем. Это частному трейдеру просто не потянуть.

У меня работают две стратегии сейчас под VirtualBox: 1 ядро, 1 GB памяти. Нагрузка минимальная.

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

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

Кстати, еще один минус stock# что оно требует еще и терминала. TSlab, например, не требует. Это еще минус один уровень сложности и багов.
avatar
1) Попробуйте в TS Labe протестировать, к примеру, любую простенькую стратегию на тиках с анализом объёмов и построение дельты. Возможности API у TS Laba в любом случае ограничены, достаточно посмотреть форум.
А как работает TS Lab, к примеру, через SmartCom, думаю многим известно. Да, проблема не TS Lab, но я бы даже 100 тысяч рублей не доверил такой связке без присмотра. Своим же роботам я доверяю на порядки большие суммы без всякого присмотра.

2) Баги в архитектуре довольно быстро отлавливаются.

3) Используйте Plaza2 — не будет никакого терминала.
Quik — пусть старая, но тем не менее крайне стабильная программа.

Этот пост — лишь моё мнение. :)
Кстати, а в чем проблема прикрутить внешний storage для тиковых данных в TSLab/WealthLab?
avatar
Вроде нигде мной не написано что это проблема.
Ну значит я не понял смысла этой фразы:

>Попробуй на Wealth-Lab напиши стратегию на тиках, которая будет хранить дневную историю и считать определённые значения по объёмам / дельте / хреньте /

В чем тут bottleneck?
avatar
Как внешняя БД вам поможет?
Вам надо здесь и сейчас обработать тики и получить решение — когда входить, куда входить.

Всё сравнивалось и тестировалось — то что есть у меня сейчас работает в сотни раз быстрее.

Тот же Ts Lab не позволяет писать скальперские стратегии, асинхронные заявки посылать, когда важна скорость не только самого алгоритма, но и обработки заявок и событий от заявок.
Вы так и не сказали в чем bottleneck TSLab?

Во что вы упираетесь при использовании TSlab? В диск, в память, в процессор?

>Всё сравнивалось и тестировалось — то что есть у меня сейчас работает в сотни раз быстрее.
Покажите бенчмарки общественности тогда и код бенчмарков(без алгоритма).
avatar
Денис, в скорости и возможностях.
В процессор и память я упирался.

Ещё раз:
1) Попробуйте в TS Labe протестировать, к примеру, любую простенькую стратегию на тиках с анализом объёмов и построение дельты. Возможности API у TS Laba в любом случае ограничены, достаточно посмотреть форум.
Ну а с чего вы взяли что это TSlab виноват?

Я не знаю ни одной стратегии на тиках. Я вам еще раз предлагаю. Давайте алгоритм, вы пишите его на stock#, я на TSLab. Потом делаем бенчмарки и смотрим в чем затыка :-)
avatar
> Я не знаю ни одной стратегии на тиках.

Это не говорит о том, что их не существует)
avatar
Да нет, вы не поняли. Мне просто предлагают реализовать такую стратегию, а я просто их ни одной не знаю. Предлагайте алгоритм, я реализую и можно будет сделать бенчмарки.
avatar
Я не смогу составить конкуренцию, поскольку не программирую на Stock#, но стратегию могу подсказать показательную и ресурсоемкую. Если Саша захочет, то пусть попробует посоревноваться)
Стратегия заключается в том, чтобы торговать пересечение 2х скользящих средних по свечам, построенным не на привычном нам времени, а так — допустим в каждой свече 1000 проторгованных контрактов, Open — цена первого контракта из тысячи, Close — последнего, при этом если Close свечи n-1 и Open свечи n приходятся на одну и ту же сделку, то весь объем достается свече n-1, а n-ная свеча начинается со следующей по порядку сделки. То есть в свече может быть больше, чем тысяча контрактов. High и low определяются как обычно.
avatar
Ноу проблем. Я реализую этот алгоритм за час.

Stock#, кстати, позволяет выставлять порядка 200 заявок в секунду. =)
Ну это только под плазой наверное будет преимуществом)

Я просто предложил что-то, что будет жрать ресурсы для просчета. Ну и ты учитывай, что у тебя опыт уже в деле реализации по объемам) Скажешь потом какие параметры понравились, если что)
avatar
То есть здесь надо мониторить тиковые объемы и делать из них свчеи на лету по описанным правилам?

А можно пример?

Вот например, есть такие тики:

194.020 — 1001
193.000 — 100
193.004 — 200
193.006 — 999
193.007 — 2000

Какие тут будут свечи в формате OHLC?
avatar
194020 194020 194020 194020
193000 193006 193000 193006
193007 193007 193007 193007

Это гэп. Для того, чтобы быстро избавить задачу от таких проблем можно на самом деле либо увеличить объем до 50 000 или 100 000 например, либо ограничиться интрадеем. Первое лучше на мой взгляд из-за влияния на ресурсы)
avatar
Я вижу потенциальную проблему с тиками в TSlab только в том, что там тупо будет out of mem. Я не очень хорошо знаю dot net, но думаю что оно сильно на java/jvm похоже в плане потребления памяти. Поэтому я и предположил выше, что возможно надо будет сделать свой storage который будет хранить данные в более компактном виде.
avatar
Спасибо за стратегию. На днях поковыряю ее на предмет использования в TSlab. Сделаю отдельный пост по итогам.
avatar
Незачто, было бы действительно интересно если бы вы и Саша написали пост об итогах)
avatar
ниже Евгений написал.
Можно попробовать ещё, к примеру, арбитраж между площадками, где скорость выставления заявок / съеденного объёма тоже очень важна.
«Смотрите. У вас может быть баг в алгоритме, а среде запуска, в слое между средой и брокером, у брокера, на бирже. Зачем еще больше усложнять?»

А можно как-то перепечатать эти буквы, а то мысль не ясна совсем)

Stock# в любом случае будет выигрывать у любого решения, которое привязано к конкретному брокеру, поскольку у любого брокеры бывают разрывы) А то, что что-то проще на финансовых рынках преимуществом не является совсем, потому что СРАЗУ лишает преимущества))) Поимте, для того чтобы много зарабатывать на рынке нужно быть одним единственным кто знает фишку!
avatar
Пусть каждый пишет на чём хочет.
Мы же будем этим пользоваться в своих интересах :))
А интерес у нас один — купить остров)
avatar
Stock# добавляет еще один уровень абстракции, а значит и вероятность ошибки больше. Принцип KISS вам что-нибудь говорит?

А при чем тут разрывы-то? Как Stock# помогает их избежать?
avatar
А TS Lab, который вы пропагандируете, этот уровень абстракции не добавляет? :)))

Не конкретно Stock#, а написанная вами инфраструктура может позволять:
1) подключаться к другому серверу в случае разрывов;
2) перегружать роутер если он завис;
3) разрывать интернет соединение если оно висит и подключать другое;
4)…

Скорость! Ts Lab не будет обладать той скоростью, что порой так необходима.
Я не пропагандирую, я веду дискуссию.

>позволять:
>2) перегружать роутер если он завис;
>3) разрывать интернет соединение если оно висит и подключать другое;

Это не задача торгового робота или алгоритма. Это задача иного уровня ответсвтенности. Может быть вы еще в роботе будете мониторить состояние железа? :-)

По-поводу организации failover я тоже расстраиваюсь. Пока вот достаю разработчиков TSlab на эту тему. Но в принципе сделать оповещалку о том что произошло что-то плохое на смс я могу хоть сейчас. И даже могу организовать схему переключения интернет канала(сложно но могу). Просто это не задача робота еще раз. Это задача _инфраструктуры_. Робот должен просто корректно возобновлять работу, с чем собственно TSLab вполне справляется(можно перезапускать программу в любой момент).
avatar
1) TS Lab — не ещё ли один уровень абстракции, от которого вы хотите уйти?
2) Программа TS Lab если зависнет сама перезагрузится и сама перезапустит роботов?
3) TS Lab позволяет, в случае зависания одного брокера переключиться на другого брокера и хеджироваться там?

Чем TS Lab лучше своей программы + использования библиотеки Stock#?

Имхо, TS Lab подходит для простеньких алгоритмов на малой сумме денег, при этом необходим постоянный мониторинг роботов.
>TS Lab — не ещё ли один уровень абстракции, от которого вы хотите уйти?
У вас есть TSlab и есть брокер, между ними исопользуется тот или иной интерфейс. Например transaq. Терминала не надо.

>2) Программа TS Lab если зависнет сама перезагрузится и сама перезапустит роботов?
Есть перезагрузка по расписанию. Но еще раз failover — это не задача торгового агоритма. А создание железобетонной инфраструктуры — это отдельная тема, которую можно обсуждать, но отдельно.
avatar
1) Вы считаете квик нестабильным терминалом?
У вас есть Stock#, квик и инфраструктура.
Или у вас есть Stock#, Plaza2 и инфраструктура.

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

Вопрос «Чем TS Lab лучше своей программы + использования библиотеки Stock#?» остался без ответа :)

Каждый выбирает то что ему лучше и приятнее использовать. Тот инструмент, нужды которого он исполняет на 100%.
Я не могу оставить работать TS Lab и уйти на весь день. Вы можете?
На каких суммах, если не секрет, работает TS Lab у вас?
Я прав что это небольшие суммы?
>Вопрос «Чем TS Lab лучше своей программы + использования библиотеки Stock#?» остался без ответа :)
Связка проще и требует значительно меньше времени и денег, чтобы запуститься в production.

Если бы у меня были миллионы в роботах, наверное failover я бы сделал. Но для этого не обязательно сразу бежать и переписывать все на stock#. Сейчас у меня идет стадия бета тестирования, поэтому сумма пока не большая. Пока, мои алгоритмы не могут переваривать больше 20-30 контрактов в сделке(есть еще над чем поработать).
avatar
Проще != лучше.
Времени — да, денег — не требует если пишется самим.

Никто не говорил что надо переписывать на Stock#.
Если стратегия была протестирована на TS Lab — то конечно её стоит первоначально и запускать с помощью TS Lab.
Если она была протестирована в ином софте — тут возникает вопрос где лучше.

Недостатки из-за скорости, и полном контроле всей инфраструктуры / всех роботов не позволяет мне (именно мне, а не всем) построить действительно диверсифицированную платформу для торговли между несколькими площадками, HFT / арбитраж, интрадей в одном флаконе.
Мне возможностей и скорости TS Lab мало.

У меня нужды и цели чуточку больше чем мне может дать эта платформа =)
Без бенчмарков и конкретики далее дискутировать не вижу смысла.
avatar
да, и кстати.
TS Lab платный.

Для кого-то минус. Зачем платить деньги, если неизвестно ещё будет ли зарабатывать стратегия.

P.S. Да, я знаю, что сумма там маленькая.
Если возлагать задачу восстановления соединения на инфраструктуру, то в инфраструктуре возникает дополнительный блок, который может нарушить принцип KISS уже на инфраструктурном уровне.
Ответ как обычно — единого решения нет. TSLab скорее подойдет для тех у кого меньше экспертизы в C# и нет желания развивать данный навык.
avatar
Не нарушает, потому что принцип говорит делай просто, но не проще чем нужно :-)

Я не видел ни в одном профессиональном трейдерском продукте в инвестбанке, где я работал, чтобы вещами типа пропадания интернета или падения программы или недоступности того или иного сервиса занималась программа-клиент. Это нонсенс. Если вам надо построить инфраструктуру 24/7, то это делается на уровне ниже.

Теперь по-поводу TSlab. Я бы сам не отказался от обработчика разъединения с сервером брокера. По этому поводу как раз и пинаю разработчиков, как и по-поводу встроенного failover. Но в прицнипе его можно сделать и самому.

Простой гипотетический вариант.

Держать на соседнем компьютере копию образа с TSlab. И при отваливании TSlab и долгом не подключении запускать копию, настроенную например на другого брокера.
avatar
думаю он имел в виду не в сымсле избежать разрывов
а в смысле иметь возможность их обработать в своей программе
KISS это группа такая, в которой участники себе лица побелкой мазали и у них видимо не было принципов :)
Да, я понимаю, что это лишняя прослойка, но она оправдана и вот почему — Stock#, являясь платформой независимой от брокера позволяет запрограммировать автоматическое переключение на другого брокера во время сбоев у основного и захэджировать позицию. Только представьте себе хэдж Финама Открытием :) Или более сложные комбинации) Хотя конечно не у всех тут может возникнуть такая потребность, тут принято херачить на всю маржу;)
avatar
По-поводу KISS en.wikipedia.org/wiki/KISS_principle

Насчет failover ответил выше.
avatar
думаю, главное, чтобы алгоритм работал.
язык — дело десятое
avatar
Оч познавательно, продолжай еще!
А спор послушать так вообще в тему — я как раз думаю куда переходить дальше с Qpile. И у меня как раз вариант, что С++ изучал в инсте. Правда на среднем уровне.

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

имхо, было бы очень актуально.
avatar
Ссылка на библиотеку — есть в посте.
Последующие посты — раз надо, попробую писать =)
да, тема интересная и пост нужный. не бросайте это дело
avatar
Нейросети это немного из другой оперы, это из раздела нахождения торговых алгоритмов. саша же пишет скорее об организации процесса торговли.
avatar
Идея не лишена смысла, но только нужно понимать, что это непросто, очень непросто. Я тестировал разные варианты на промышленных DataMining средствах и к какому-то стабильному результату не пришел, переключившись на другие идеи.
avatar
а у меня знакомые показывали графики предсказаний нейросети вместе с обычным и там на первый взгляд все так граально, но денег они что-то пока не заработали
avatar
Да на предсказаниях вообще только в средние века стабильно зарабатывали)
avatar
Кстати, почитай более подробно про архитектуру и посмотрев немного API я увидел, что stocksharp просто дает вам возможность создать упрощенный вариант инфраструктуры, которой по сути и является TSLab. Это конечно гибче, но и значительно сложнее. То есть даже для профессионального программиста реализовать все это с ноля, покрыть тестами и вывести в production — задача не тривиальная. Вопрос. Может быть уже есть open source реализация такой структуры, чтобы человек не начинал с ноля, а реализовал бы условно говория только интерфейсы, которое относятся к Strategy?
avatar
почитав*
avatar
OpenQuant от SmartQuant ltd.
avatar
И вот, кстати, можно вполне себе connection events отслеживать также:

www.tslab.ru/docs/api/interface_t_s_lab_1_1_data_source_1_1_i_connectable.html
avatar
Да, Александр — присоединяюсь с просьбой обрисовать на русском языке как это создается, очень помогла-бы блок схема всей связки с подпрограммами и примером кода и как это все соединить воедино.
avatar
Поддерживаю cyberpunk. Было бы здорово взять какую-нибудь простую стратегию, ну например, тупо EMA за 5 дней, клоза выше -> купили на 80% от капитала, клоза ниже -> продали на 80%. И вот бы с самого начала, от кода, теста до подключения к продакту.
p.s. пост отличный, спасибо Александру.
p.p.s Пожелание Марту -> вот бы сделать какую-нить кнопку — «пост в избранное»
avatar
у S# код открытый?
avatar
да всё открыто.
Вы на бумаге можете написать, как должно работать (как Вы бы в идеале работали)?
Если нет не думайте о роботах. Вам надо сначала хотя бы в ручном трейдинге систему поиметь своей торговли.
Если да — то стоит на бумаге распиать просто: всё основано на уловиях «Если Х, то У, иначе Z». и всё. Дискретно. ДА или НЕТ. Да и Нет вызывает новую цепь «Да и Нет» но уровнем ниже (если не предусмотрено возвратом на самый первый уровень определить ДА и НЕТ)
Здравствуйте! Есть задумка автоматизировать торговлю по пересечению скользящих средних и есть много но. Поможете сделать робота на qpile или lua
avatar
Popiros, я не пишу роботов на заказ
Может посоветуете кто это делает? Адрес ссылку.
avatar
Popiros, я никогда не писал на заказ, только сам. потому советовать кого-то не могу

теги блога Александр Муханчиков

....все тэги



UPDONW
Новый дизайн