Ты программист и выбираешь
Api для подключения к бирже!? Это статья для тебя… В ней я опишу свой скромный опыт написания ботов с подключением через
SmartCom и
Quik. Опишу проблемы, которые возникают при подключении, и попробую сформулировать своё отношение к одному и второму способу.
Господа. Я работаю по старинке и пишу свои приводы, не пользуясь универсальными
Api вроде
StockSharp или
TsLab. Поэтому любителям этих ваших модных Платных_Закрытых_Библиотеко_Каракасов просьба идти мимо. И мне это не предлагать!
Поскольку статья получилась довольно ядовитая, сначала опишу хорошие стороны одного и второго
Api.
Хорошо
Главная положительная черта
QuikApi это надёжность. Единожды настроенное подключение TRANS2QUIK.dll не отсохнет и не повиснет. С
DDEнемного сложнее, но если правильно принимать и обрабатывать потоки, соединение также стабильно.
SmartCom хорош в плане простого и понятного интерфейса, человеко — ориентированностью, а также высокой скоростью выставления заявок (но тут всё не просто).
QuikApi
Собственно к
Quik нет полноценного
Api для подключения. Т.е. не существует волшебной (открытой и бесплатной) штуки, подключив которую к своему проекту, можно было бы выкачивать из
Quik данные и тут же отправлять через неё заявки.
Вместо этого есть следующая связка :
Рис
.1. DDE + TRANS2QUIK.dll + Qple + over9000Table = Quik Api
Т.е. чтобы начать отдавать комисс со скоростью несколько раз в секунду потребуется:
- Поднять в своей программе DDE сервер
- Разобраться со встроенным в Quik языком Qple, чтобы можно было создавать (ну или хотя бы редактировать) скрипты по конвертации свечных массивов в таблицы.
- Скрупулёзно, со слезами, создать эти 5 — 10 таблиц, данные из которых понадобятся твоему роботу. Вывести их и принять у себя в роботе.
- Прикрутить TRANS2QUIK.dll к своему проекту, и научиться подавать заявки, через этот мерзкопакостный интефейс.
Quik не удобен и на его изучение и реализацию придётся потратить очень много времени. На сайте разработчиков отсутствуют живые, и простые примеры с открытым кодом на которых начинающие программисты могли бы писать своих роботов. Библиотека
TRANS2
QUIK морально устарела лет 10 назад и хромает описание. Поддержка отсутствует. Всё сводиться к «Мы записали вашу просьбу» и «Смотрите мануал».
Отсутствуют некоторые типы ордеров. Стоп-рынок например. Если сработал стоп, зачем парится с лимитками? Всё плохо и надо крыть по любой цене. Счас напишут что надо связными заявками пользоваться. Хорошо. Только нахрена эти сложности? Там и так чтобы первую заявку отправить неделю надо колдовать.
Ещё год назад в
ARQA на сайте и демо доступ не выдавали. Похоже договорились
через откаты каким-то чудом со всеми брокерами России и думают что развиваться в сторону конечного потребителя (трейдера) вообще не нужно. Что ощущается во всём.
Кроме того
Quikне очень технологичен и уступает в скорости вообще всем...
SmartCom 3.0
1. У них есть инструкция! Красочная и понятная. Никакой неопределённости и плясок с бубнами*. Берём библиотеку, цепляем к проекту и всё*! Подключение* готово*!
2.
У них на сайте есть живой пример! Т.е. небольшая программа на
C#, в которой доступно показано как пользоваться теми или иными штуками из библиотеки. Для начинающего программиста это вообще мечта, попробовать просто пришить свою логику к готовому приводу. И судя по обсуждениям на форуме продукта, многие так и делают.
Конечно же, после своих не простых отношений с
Quik, я был очень доволен
SmartCom, когда начал с ним знакомство. Идея хороша, как и попытка её преподнести. Вот как это должно было выглядеть:
Рис.2. Простой
ApiSmartCom
1. Очень быстро выяснилось что занимать потоки приходящие с сервера больше чем на несколько секунд нельзя, т.к. это вызывает падение местного сервера
2. Потоки уходящие с запросами могут вообще не возвратиться и в дальнейшем при попытке их вызвать всё опять падает
Ну и ладно, выходим из положения:

Рис.3.
ApiSmartCom
3. Далее просто пошли не контролируемые потери связи. Читаем на форумах. Ни с того, ни с сего, сервер может потеряться от 2 до 10 раз в день. Пишут что это плата за скорость… Хорошо.
4. Далее выясняем… Не после всех потерей соединений можно восстановить связь с сервером. Нужно делать возможность полностью перегрузить Локальный сервер, переподписать все события и проч...
Делаем поток, следящий за соединением, ничего особенного:
Рис.4. Пример простейшей схемы в
DiagramDesigner
далее...
5.
Заявки могут испаряться при передаче их серверу вообще без обратной связи. При этом сервер может, как уже быть мёртвым в этот момент, так и
в обычном состояние при смерти. Надо делать потоки Эскорты каждой заявке, которые будут следить через определённое время, что произошло, дошла ли заявка, пришёл ли какой либо отклик или нет, что с потоком, который нёс заявку.
6.
Сервер, не смотря на то, что пишет, что есть
Connectможет уже умереть в это время и любое действие вызывает исключение. Включая AccessViolationException. Поэтому надо каждый вызов сервера делать левым потоком, с возможностью при перехвате исключения из любого места, или если какой-то поток перестал отвечать, уничтожать локальный сервер СмартКом и создать новый.
7.
Сервер может отваливаться по частям. В любой момент могут отсохнуть:
Данные стакана
Тики
Данные об изменившихся заявках
Выгрузка свечей
и т.д.
Всё это может случиться как по отдельности, так и всё сразу.
В общем-то, все проблемы решаемы и каждая в отдельности не такая уж и страшная, но вот только Нахера это нужно?
Рис.5. Невероятно упрощённая обёртка глючного
ApiSmartCom
8. По ночам из
SmartComиногда продолжают поступать свечи, в виде пустых интервалов! Я плакал...
9. Тестовый доступ к
SmartComотличается от реального!!! На тестовом сервере заявки периодически не проходят и отвергаются системой с объяснением: «Нельзя открывать разнонаправленные позиции с одного счёта»(ну или чёт похожее). И!!! Иногда заявка сначала отвергается системой, причём приходит подтверждение о том, что она отвергнута штатно (
Systemcancel), а затем (О ЧУДО!), через какое-то время (от нескольких секунд, до нескольких минут), заявка всё же проходит. Что в купе, а особенно последнее, не даёт нормально оттестировать
SmartComшлюз в своём роботе на демо счёте. И приходиться допиливать подключение уже на реальном счёте.
10. Наличие во многих местах различных проверок сказывается на конечной скорости выставления заявок и приёма данных. Делая не возможным (либо не надёжным) реализацию скоростных стратегий через данный тип подключения.
11. За это (
SmartCom) ещё и заплатить придётся. 600 рублей в месяц.
Из всех проблем описанных выше очевидно, что
SmartComне очень не надёжен. Хорошая такая, бэта версия, библиотеки для подключения к бирже. Не больше. Вот торгует у меня робот, вроде всё давно оттестировано, и автоматически, и в боевых условиях, и на учебном счету и реальном… А я всё равно просыпаюсь по ночам и бегу посмотреть, как у него дела и не случилось ли новых косяков в шлюзе. Которых, по всей видимости, и сосчитать не получиться.
Резюме:
Конечно же, и первый и второй способ подключения к бирже одинаково хороши.
Но с
Quikтут понятно. Старичка начали делать в нулевых и серьёзных претензий к разработчикам сложно предъявлять (постебать только остаётся). Делали из того что было и так, как это было заведено в то время, через… у. Ну а что касается
SmartCom, но это конечно полное разочарование. Ну как можно оставить столько багов в клиентской части, и напрочь забыть об оповещении о ошибках? БЛДЖАД!!! Ну, Вы хоть исключений в него добавьте, чтобы было понятно, что с ним происходит!
Для
htp торговли ни один из представленных способов подключения к торгам не подходит. Хоть
SmartComи имеет хорошие показатели скорости выставления заявок (смотри ссылки ниже), то, что он несколько раз в день 100% падает и начинает глючить, для скоростных роботов может быть смертельно опасно.
Что же выбрать из этих отечественныхчудо гуано платформ?
Для уверенных в себе программистов
SmartCom. Когда все исключительные ситуации выловлены, потоки изолированы, ордера сопровождены и любое неповиновение сервера, тут же вызывает его расстрел, а через секунду всё работает как надо, то работа со
SmartComначинает приносить радость.
Для тех, кто не в состоянии проконтролировать параллельную работу 20 потоков, однозначно
Quik. Несмотря на свою топорность, он весьма не требователен и очень стабилен. Что на первых порах гораздо важнее скорости. Хотя тут следует джва раза подумать. В том, что
SmartCom через пару версий станет стабильным, у меня сомнений нет, а вот в том, что
Quikстанет быстрее и понятнее, очень большие...
Ссылки:
quik.ru/ — сайт
Quik
quik.ru/forum/ideas/7039/7039/ — один из эпичных срачей на форуме разработчиков, в котором юзеры,
одурев от наглости, с 2005 года (ДЕВЯТЬ ЛЕТ!!!) пытаются безрезультатно добиться добавления Трэйлинг стопа в терминал. При этом ребята из тех поддержки, с каменным лицом, тролят умоляющих пользователей. Почитайте. В этом весь
Quik...
http://
www.
itinvest.
ru/
software/
smartcom/ —
nuffsaid
http://
smart-
lab.
ru/
company/
stocksharp/
blog/105916.
php — сравнение скорости выставление заявок
SmartCom,
Quikи Plaza II
forum.moex.com/viewtopic.asp?t=25629 — тоже, что и сверху, интересны комментарии разработчиков. Видимо на
SmartCom 3 возлагались большие надежды в области безопасности соединения. Не вышло...
В результате, остановился на MT5. Предельно простая, красивая штука. Все очень четко, точно, быстро и надежно.
Конечно, есть свои необычности, но сделать можно все что угодно. Если нужно соединить с внешним ПО, то к услугам DLL
(32 и 64 bit), можно через MemoryMappedFiles, можно через Named Pipes. Все очень быстро и классно. Но по факту, от внешних приблуд отказался и все стал писать на MQL, т.к. язык простой и, самое главное, объектно-ориентированный.
Минусы:
— нет акций. Только фьючи
— для очень скоростных роботов не подойдет, т.к. есть жестко прописанный лимит на 10(или 15, не помню) одновременно обрабатываемых транзакций.
В остальном сплошные плюсы. Очень надежен(сам терминал).Тем кто создал эту программу — большой респект
1. привязка к брокеру. К которому лично мне не хотелось бы привязываться. Т е если Вы перейдете из айти Вам придется все переписывать.
2. из Вашего поста понял что смартком глючное гуано.
Что же касается претензий к квику то:
«Отсутствуют некоторые типы ордеров. Стоп-рынок например. Если сработал стоп, зачем парится с лимитками? Всё плохо и надо крыть по любой цене. Счас напишут что надо связными заявками пользоваться. Хорошо. Только нахрена эти сложности?»
«пытаются безрезультатно добиться добавления Трэйлинг стопа в терминал»
Биржа нативно не поддерживает такие заявки. Имхо они правы по обоим пунктам.
А че не ТВС по DDE и парсить, некоторые к экспорту графиков цепляются даже?