Вперед, только вперед...

QUIK + DDE = Быстрый торговый робот

Источник: Quik-profit

Хотите, чтобы Ваш торговый робот быстро получал данные из торгового терминала QUIK?

Можно! Наилучший способ этого достичь — научить QUIK экспортировать данные напрямую в вашего робота!

Более того это можно сделать, написав всего лишь пять строчек кода! Как?

Легко скажу я Вам, если использовать готовый модуль QuikDDE.

Что из себя представляет модуль QuikDDE?

Модуль QuikDDE – набор библиотек, которые позволяют программисту соединить своего торгового робота с торговым терминалом QUIK. Данный модуль написан на языке высокого уровня Microsoft C#.

QuikDDE состоит из DDE сервера, который принимает данные от QUIK и доставляет их вашему роботу в том виде, в каком они требуются.

Обратите внимание! Вам больше не потребуется использовать Excel листы для передачи данных! Скорость возрастает многократно!

Вот лишь маленький пример привода, написанного с использованием QuikDDE:

Да, это обычный стакан котировок, который в онлайн (!) режиме дублирует аналогичный стакан в Quik!

Все это стало возможно благодаря, разработанному нами, модулю QuikDDE.

Скачать QuikDDE можно здесь: http://download.quikprofit.ru/quikdde.zip
Получать данные очень легко!

Пример:
Создание DDE сервера:

1
2
3
4
QuikDDE.ddesrv DdeServerHandler = new QuikDDE.ddesrv("QuikDDE_DEMO");
DdeServerHandler.OnPokeData += new
QuikDDE.ddesrv.DdeEventHandler(GetDDEData);
DdeServerHandler.Register();

где “QuikDDE_DEMO” — имя DDE сервера, который указывается при экспорте данных в терминале QUIK, а функция GetDDEData – функция обработки полученных данных.

GetDDEData:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void GetDDEData(object sender, QuikDDE.DdeData Data)
{
Console.WriteLine("dde data has arrived");
Console.WriteLine("Topic: " + Data.TopicName + " ; Item: " +
Data.ItemName);
for (int i = 0; i < Data.DataTable.RowsCount; i++)
{
for (int j = 0; j < Data.DataTable.ColsCount; j++)
{
Console.Write(Data.DataTable[i, j] + "; ");
}
Console.WriteLine();
}
}

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

1
2
3
4
5
6
7
8
9
10
11
private void DdeData(object sender, QuikDDE.DdeData e)
{
/// Пришли цены
if (String.Compare(("SBER03_Prices"), e.Topic, true) == 0)
{
}
/// Пришли данные о транзакциях
else if (String.Compare("Orders_Order", e.Topic, true) == 0)
{
}
}

В данном примере, мы сортируем данные, на два типа: данные о ценах (экспортируется стакан) и данные о заявках.
К слову в QuikDDE нет каких либо ограничений на кол-во экспортируемых таблиц. В наших разработках, через этот модуль принимаются данные более чем из 20 таблиц.

 

Главная положительная черта Quik Api это надёжность. Единожды настроенное подключение TRANS2QUIK.dll не отсохнет и не повиснет. С DDE немного сложнее, но если правильно принимать и обрабатывать потоки, соединение также стабильно.

SmartCom хорош в плане простого и понятного интерфейса, человеко — ориентированностью, а также высокой скоростью выставления заявок (но тут всё не просто).

 

 

Источник: Sib-Algo

Quik Api

Собственно к Quik нет полноценного Api для подключения. Т.е. не существует волшебной (открытой и бесплатной) библиотеки, подключив которую к своему проекту, можно было бы выкачивать из Quik данные и тут же отправлять через неё заявки. Вместо этого есть следующая связка :

 

Quik

Рис.2. DDE + TRANS2QUIK.dll + Qple + over9000Table = Quik Api

Т.е. чтобы начать отдавать комисс со скоростью несколько раз в секунду потребуется:

  1. Поднять в своей программе DDE сервер
  2. Разобраться со встроенным в Quik языком Qple, чтобы можно было создавать (ну или хотя бы редактировать) скрипты по конвертации свечных массивов в таблицы.
  3. Скрупулёзно, со слезами, создать эти 5 — 10 таблиц, данные из которых понадобятся твоему роботу. Вывести их и принять у себя в роботе.
  4. Прикрутить TRANS2QUIK.dll к своему проекту, и научиться подавать заявки, через этот мерзкопакостный интефейс.

 

Quik не удобен и на его изучение и реализацию придётся потратить очень много времени. На сайте разработчиков отсутствуют живые, и простые примеры с открытым кодом на которых начинающие программисты могли бы писать своих роботов. Библиотека TRANS2QUIK морально устарела лет 10 назад и хромает описание. Поддержка отсутствует. Всё сводиться к «Мы записали вашу просьбу» и «Смотрите мануал».

Отсутствуют некоторые типы ордеров. Стоп-рынок например. Если сработал стоп, зачем парится с лимитками? Всё плохо и надо крыть по любой цене. Счас напишут что надо связными заявками пользоваться. Хорошо. Только нахрена эти сложности? Там и так чтобы первую заявку отправить неделю надо колдовать.

 

Quik -> xlTable -> DDE -> Ваш торговый робот

Источник: тут

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

Существует несколько способов экспортировать данные из Quik:

ODBC

DDE

Поговорим подробнее о втором способе.

Dynamic Data Exchange

DDE механизм взаимодействия приложений в операционных системах Microsoft Windows и OS/2. Хотя этот механизм до сих пор поддерживается в последних версиях Windows, в основном он заменён на более мощные механизмы, например OLE.

Quik, при экспорте данных через DDE, использует формат Fast Table Format или его еще называют XlTable.

Fast Table Format

Формат Fast Table Format (XlTable) предназначен для максимальной скорости передачи данных через механизм DDE в Microsoft Excel. XlTable представляет собой последовательность блоков данных, которые представляют последовательность ячеик таблицы. Каждый блок данных состоит из трех частей:

WORD tdt /* тип таблицы */
WORD cb /* количество байтов для данных */
BYTE data[cb] /* массив данных длиною cb */

Первый блок всегда типа tdtTable. В нем описывается количество строк, столбцов в таблице.
Пример: 10 00 04 00 01 00 03 00 – cb = 4, в таблице 3 столбца, 1 строка.

Ячейки таблицы всегда «рядоориентированные».Т.е. в последовательности байтов, сначала идут данные первой ячейки в первой ряду, затем второй ячейки первого ряда, а уже затем ячейки второго, третьего ряда и т.д. Также стоит отметить, что ячейки с одинаковым типом данных, в последовательности байтов идут друг за другом в одном блоке данных.

Типы блоков данных:

НазваниеЗначение

tdtTable0×0010

tdtFloat0×0001

tdtString0×0002

tdtBool0×0003

tdtError0×0004

tdtInt0×0005

tdtSkip0×0006

Основным достоинством обмена данных используя DDE является то, что обмен данными происходит в режиме реального времени.

Ещё год назад в ARQA на сайте и демо доступ не выдавали. Похоже договорились через откаты каким-то чудом со всеми брокерами России и думают что развиваться в сторону конечного потребителя (трейдера) вообще не нужно. Что ощущается во всём.

Кроме того Quik не очень технологичен и уступает в скорости вообще всем… Есть мнение что пройдёт лет 5 — 10 и про такую платформу иже и не вспомнят…

Справочник

Dynamic Data Exchange and XlTable Format - now

Экспорт котировок из Quik в Excel - тут

СУПЕР пример создания простого робота на языке Qpile - тут

 

 

<< Вернуться на предыдущую страницу