Итак, долгожданное продолжение
первой части.
После первых шагов у вас есть протестированная стратегия, которая показывает отличный профит на истории при устраивающих вас просадках.
Более того, вы уверены, что стратегия не заглядывает в будущее, использует только ту информацию, которая доступна здесь и сейчас.
Что делать дальше, как поскорее начинать заполнять чемоданы деньгами?
Как запустить стратегию на биржу?
Здесь, как обычно, вариантов несколько.
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# в настоящее время у меня и реализованы все роботы. :)
Пост получился небось опять сумбурным и очень длинным. Спасибо тем, кто дочитал. :)
Продолжение следует… (а надо ли? :) )
А еще бабки на лавке много чего говорят.
Вообще, из аргументов что надо писать робота полностью самому(без среды) принимается только аргумент что надо работать с очень высокой скоростью. В TSLab будет некоторый оверхед. Я правда тиковых стратегий еще не реализовывал, поэтому скажем так, аргмуент потенциально весомый. Но надо сделать бенчмарки прежде чем утверждать, что это не возможно. У вас этих бенчмарков, я так понимаю — нет.
Кстати, пересчет в TSLab гибко настраивается. Есть режим пересчета по сделке, а не по интервалу.
Я писал голого робота на c# под АльфаДирект. Это сложнее, а главное нету никакого смысла все усложнять.
Аргумент привязки к TSlab тоже не выдерживает критики. Портирование робота под другую платформу со сходными влзможностями занимает несколько дней вместе с тестированием.
Stock# в принципе неплоха, но лишняя абстракция — это потенциально лишние баги. И снова усложнение.
Смотрите. У вас может быть баг в алгоритме, а среде запуска, в слое между средой и брокером, у брокера, на бирже. Зачем еще больше усложнять?
«Роботов» которые используются большими организациями типа инвест-банков мы не берем. Это частному трейдеру просто не потянуть.
У меня работают две стратегии сейчас под VirtualBox: 1 ядро, 1 GB памяти. Нагрузка минимальная.
В TSLab например вполне себе полноценный c# и возможность цеплять любые готовые библиотеки. При этом вы имеет среду запуска, отладки, тестирования и эксплуатации. Плюс у вас уже есть GUI для графиков и прочего.
Вот простой пример. TSlab предоставляет thread-safe среду для вашего робота. Когда же выпишите сами, то вам надо быть приличного уровня программистом, чтобы управляться с несколькими потоками, синхронизацией, обработкой сетевых ошибок и т.д. и т.п. Как правило среди программистов-прикладников, которых большинство среди тех кто делает роботы, таких не очень много(их и в профессии то немного).
Кстати, еще один минус stock# что оно требует еще и терминала. TSlab, например, не требует. Это еще минус один уровень сложности и багов.
А как работает TS Lab, к примеру, через SmartCom, думаю многим известно. Да, проблема не TS Lab, но я бы даже 100 тысяч рублей не доверил такой связке без присмотра. Своим же роботам я доверяю на порядки большие суммы без всякого присмотра.
2) Баги в архитектуре довольно быстро отлавливаются.
3) Используйте Plaza2 — не будет никакого терминала.
Quik — пусть старая, но тем не менее крайне стабильная программа.
Этот пост — лишь моё мнение. :)
>Попробуй на Wealth-Lab напиши стратегию на тиках, которая будет хранить дневную историю и считать определённые значения по объёмам / дельте / хреньте /
В чем тут bottleneck?
Вам надо здесь и сейчас обработать тики и получить решение — когда входить, куда входить.
Всё сравнивалось и тестировалось — то что есть у меня сейчас работает в сотни раз быстрее.
Тот же Ts Lab не позволяет писать скальперские стратегии, асинхронные заявки посылать, когда важна скорость не только самого алгоритма, но и обработки заявок и событий от заявок.
Во что вы упираетесь при использовании TSlab? В диск, в память, в процессор?
>Всё сравнивалось и тестировалось — то что есть у меня сейчас работает в сотни раз быстрее.
Покажите бенчмарки общественности тогда и код бенчмарков(без алгоритма).
В процессор и память я упирался.
Ещё раз:
1) Попробуйте в TS Labe протестировать, к примеру, любую простенькую стратегию на тиках с анализом объёмов и построение дельты. Возможности API у TS Laba в любом случае ограничены, достаточно посмотреть форум.
Я не знаю ни одной стратегии на тиках. Я вам еще раз предлагаю. Давайте алгоритм, вы пишите его на stock#, я на TSLab. Потом делаем бенчмарки и смотрим в чем затыка :-)
Это не говорит о том, что их не существует)
Стратегия заключается в том, чтобы торговать пересечение 2х скользящих средних по свечам, построенным не на привычном нам времени, а так — допустим в каждой свече 1000 проторгованных контрактов, Open — цена первого контракта из тысячи, Close — последнего, при этом если Close свечи n-1 и Open свечи n приходятся на одну и ту же сделку, то весь объем достается свече n-1, а n-ная свеча начинается со следующей по порядку сделки. То есть в свече может быть больше, чем тысяча контрактов. High и low определяются как обычно.
Stock#, кстати, позволяет выставлять порядка 200 заявок в секунду. =)
Я просто предложил что-то, что будет жрать ресурсы для просчета. Ну и ты учитывай, что у тебя опыт уже в деле реализации по объемам) Скажешь потом какие параметры понравились, если что)
А можно пример?
Вот например, есть такие тики:
194.020 — 1001
193.000 — 100
193.004 — 200
193.006 — 999
193.007 — 2000
Какие тут будут свечи в формате OHLC?
193000 193006 193000 193006
193007 193007 193007 193007
Это гэп. Для того, чтобы быстро избавить задачу от таких проблем можно на самом деле либо увеличить объем до 50 000 или 100 000 например, либо ограничиться интрадеем. Первое лучше на мой взгляд из-за влияния на ресурсы)
Можно попробовать ещё, к примеру, арбитраж между площадками, где скорость выставления заявок / съеденного объёма тоже очень важна.
А можно как-то перепечатать эти буквы, а то мысль не ясна совсем)
Stock# в любом случае будет выигрывать у любого решения, которое привязано к конкретному брокеру, поскольку у любого брокеры бывают разрывы) А то, что что-то проще на финансовых рынках преимуществом не является совсем, потому что СРАЗУ лишает преимущества))) Поимте, для того чтобы много зарабатывать на рынке нужно быть одним единственным кто знает фишку!
Мы же будем этим пользоваться в своих интересах :))
А при чем тут разрывы-то? Как Stock# помогает их избежать?
Не конкретно Stock#, а написанная вами инфраструктура может позволять:
1) подключаться к другому серверу в случае разрывов;
2) перегружать роутер если он завис;
3) разрывать интернет соединение если оно висит и подключать другое;
4)…
Скорость! Ts Lab не будет обладать той скоростью, что порой так необходима.
>позволять:
>2) перегружать роутер если он завис;
>3) разрывать интернет соединение если оно висит и подключать другое;
Это не задача торгового робота или алгоритма. Это задача иного уровня ответсвтенности. Может быть вы еще в роботе будете мониторить состояние железа? :-)
По-поводу организации failover я тоже расстраиваюсь. Пока вот достаю разработчиков TSlab на эту тему. Но в принципе сделать оповещалку о том что произошло что-то плохое на смс я могу хоть сейчас. И даже могу организовать схему переключения интернет канала(сложно но могу). Просто это не задача робота еще раз. Это задача _инфраструктуры_. Робот должен просто корректно возобновлять работу, с чем собственно TSLab вполне справляется(можно перезапускать программу в любой момент).
2) Программа TS Lab если зависнет сама перезагрузится и сама перезапустит роботов?
3) TS Lab позволяет, в случае зависания одного брокера переключиться на другого брокера и хеджироваться там?
Чем TS Lab лучше своей программы + использования библиотеки Stock#?
Имхо, TS Lab подходит для простеньких алгоритмов на малой сумме денег, при этом необходим постоянный мониторинг роботов.
У вас есть TSlab и есть брокер, между ними исопользуется тот или иной интерфейс. Например transaq. Терминала не надо.
>2) Программа TS Lab если зависнет сама перезагрузится и сама перезапустит роботов?
Есть перезагрузка по расписанию. Но еще раз failover — это не задача торгового агоритма. А создание железобетонной инфраструктуры — это отдельная тема, которую можно обсуждать, но отдельно.
У вас есть Stock#, квик и инфраструктура.
Или у вас есть Stock#, Plaza2 и инфраструктура.
2) Речь идёт не только о реализации алгоритма, но и о написании архитектуры, которая будет зарабатывать деньги. И которой можно доверить миллионы. И за которой не надо будет следить весь день.
Вопрос «Чем TS Lab лучше своей программы + использования библиотеки Stock#?» остался без ответа :)
Каждый выбирает то что ему лучше и приятнее использовать. Тот инструмент, нужды которого он исполняет на 100%.
Я не могу оставить работать TS Lab и уйти на весь день. Вы можете?
На каких суммах, если не секрет, работает TS Lab у вас?
Я прав что это небольшие суммы?
Связка проще и требует значительно меньше времени и денег, чтобы запуститься в production.
Если бы у меня были миллионы в роботах, наверное failover я бы сделал. Но для этого не обязательно сразу бежать и переписывать все на stock#. Сейчас у меня идет стадия бета тестирования, поэтому сумма пока не большая. Пока, мои алгоритмы не могут переваривать больше 20-30 контрактов в сделке(есть еще над чем поработать).
Времени — да, денег — не требует если пишется самим.
Никто не говорил что надо переписывать на Stock#.
Если стратегия была протестирована на TS Lab — то конечно её стоит первоначально и запускать с помощью TS Lab.
Если она была протестирована в ином софте — тут возникает вопрос где лучше.
Недостатки из-за скорости, и полном контроле всей инфраструктуры / всех роботов не позволяет мне (именно мне, а не всем) построить действительно диверсифицированную платформу для торговли между несколькими площадками, HFT / арбитраж, интрадей в одном флаконе.
Мне возможностей и скорости TS Lab мало.
У меня нужды и цели чуточку больше чем мне может дать эта платформа =)
TS Lab платный.
Для кого-то минус. Зачем платить деньги, если неизвестно ещё будет ли зарабатывать стратегия.
P.S. Да, я знаю, что сумма там маленькая.
Ответ как обычно — единого решения нет. TSLab скорее подойдет для тех у кого меньше экспертизы в C# и нет желания развивать данный навык.
Я не видел ни в одном профессиональном трейдерском продукте в инвестбанке, где я работал, чтобы вещами типа пропадания интернета или падения программы или недоступности того или иного сервиса занималась программа-клиент. Это нонсенс. Если вам надо построить инфраструктуру 24/7, то это делается на уровне ниже.
Теперь по-поводу TSlab. Я бы сам не отказался от обработчика разъединения с сервером брокера. По этому поводу как раз и пинаю разработчиков, как и по-поводу встроенного failover. Но в прицнипе его можно сделать и самому.
Простой гипотетический вариант.
Держать на соседнем компьютере копию образа с TSlab. И при отваливании TSlab и долгом не подключении запускать копию, настроенную например на другого брокера.
а в смысле иметь возможность их обработать в своей программе
Да, я понимаю, что это лишняя прослойка, но она оправдана и вот почему — Stock#, являясь платформой независимой от брокера позволяет запрограммировать автоматическое переключение на другого брокера во время сбоев у основного и захэджировать позицию. Только представьте себе хэдж Финама Открытием :) Или более сложные комбинации) Хотя конечно не у всех тут может возникнуть такая потребность, тут принято херачить на всю маржу;)
Насчет failover ответил выше.
язык — дело десятое
А спор послушать так вообще в тему — я как раз думаю куда переходить дальше с Qpile. И у меня как раз вариант, что С++ изучал в инсте. Правда на среднем уровне.
А след часть будет?
— типа примера простейшей проги, МА пересекает цену, со скринами как что выглядит, какой софт надо поставить, где скачать библиотеку, как взаимодействовать с quik'ом и т.п.?
имхо, было бы очень актуально.
Последующие посты — раз надо, попробую писать =)
www.tslab.ru/docs/api/interface_t_s_lab_1_1_data_source_1_1_i_connectable.html
p.s. пост отличный, спасибо Александру.
p.p.s Пожелание Марту -> вот бы сделать какую-нить кнопку — «пост в избранное»
Вы на бумаге можете написать, как должно работать (как Вы бы в идеале работали)?
Если нет не думайте о роботах. Вам надо сначала хотя бы в ручном трейдинге систему поиметь своей торговли.
Если да — то стоит на бумаге распиать просто: всё основано на уловиях «Если Х, то У, иначе Z». и всё. Дискретно. ДА или НЕТ. Да и Нет вызывает новую цепь «Да и Нет» но уровнем ниже (если не предусмотрено возвратом на самый первый уровень определить ДА и НЕТ)