Datafeed QUIK и MySQL через ODBC

29Янв07

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

Были испробованы многие варианты:
1. Excel via DDE
2. Metastock file via XTick
3. ODBC plugin

Но все из них пришлось выбросить либо из-за излишней тормознутости, либо по другим объективным причинам мешающим работать в реал тайме на нашем рынке. Как всегда пришлось писать что-то свое.
Передо мной стояли следующие проблемы:
1. Тормознутось чисто ODBC дата плугина, т.к. он пытается загрузить сразу все записи из базы данных + приходится работать с таблицей «Все сделки» а это 100-200к записей в день (в основном не нужных)
2. Тормознутость DDE плагина через Excel в периоды активности на рынке, плюс пропуск некоторых сделок (т.к. ами обновляет раз в 1 сек), а как следствие ситуации когда в терминале стопы срабатывали, а Ами об этом ничего не знал.
3. Разночтения в базах данных, если было запущено несколько Амиброкеров.

А в идеале я хотел получить следующее
1. Быстрый дата плагин, работающий через базу Амиброкера.
2. Получение котировок в реальном времени, без пропуска даже одной котировки, и все это чтобы не противоречило п.1
3. Отказаться от использования экселя
4. Отсутствие разночнений в базах нескольких запущенных одновременно Амиброкеров.

Инструментарий
1. Амиброкер 4.80.1
2. Quik 5.03
3. MySQL 5.0.24a — подойдет любой стабильный релиз 5й версии.
4. ODBC Connector for MySQL
5. MySQL GUI tools
Все для Мискула можно найти на сайте http://dev.mysql.com/downloads/

Как работает ?
1. Делаем экспорт «Таблицы текущих параметров» по ODBC в таблицу MySQL.
2. Из таблицы «Текущие параметры» Quik’a при обновлении информации о каждой сделке, эта информация преобразуется в 5мин бар, и поступает в таблицу Quotations, а уже из этой таблички Амиброкер цапает последний 5-ти минутный бар, чтобы добавить в свою базу данных.
3. Как вы уже надеюсь поняли Амиброкер цепляется к MySQL через ODBC.

В общем получилось нечто вроде DDE через Excel только менее тормознутое + экспорт происходит не тиками а целыми 5-ти минутными барами без потери данных из-за задержки в обновлении.

Плагин с табличками можно скачать из этой ветки (возможно понадобится регистрация)
Краткая инструкция по установке
1. Скачивается архив с плагином и sql файлом, можно найти по предыдущей ссылке.
2. Плагин dll копируется в папку Амиброкера plugins.
3. В MySQL загружается архивированная БД (AmiSQLEngine.sql) — это можно сделать с помошью MySQL Administrator — пункт RESTORE.
4. Ами настраивается, для кушания odbc котировок. Подробные инструкции здесь. Имя таблицы с котировками — quotations. ODBC плугин переписан так, чтобы забирать только последнюю котировку.
5. Настраивает экспорт из Квика таблицы текущих параметров. Обязательными полями являются — цена последней сделки, кодбумаги(должен быть = названию символа в Ами!), цена последней сделки, количество последней сделки, время последней сделки — время является обязательным!

Механизм экспорта и преобразования котировок
Весь механизм построен на триггерах. Триггер — специальные процедуры вызываемые перед или после определенных дествий, в нашем случае это триггеры на update, т.е. вызываются перед каждым обновлением таблицы текущих параметров.
С каждой новой котировкой (обновлением таблицы) формируются OHLC бары и объем, также происходит нормировка по времени, в данном случае на 5-минутные бары, их значения записываются в таблицу quotations, а из нее уже берутся Амиброкером.
Нужно отметить, что Амиброкер по соображениям производительности, читает только последний бар из таблицы, а всю историю он накапливает в своем кеше.

known bugs
1. Не решена проблема присущая всем Streaming Quotes — невозможность бекфилла
2. Проблема с фьючерсами ФОРТС, т.к. там вместо поля время последней, поле время последнего изменения. Из-за этого в БД поступают ненормированные по времени котировки. Следует избегать добавления в таблицу текущих значений инструментов без поля время последней сделки! Будь то фьючерсы или индексы!



6 Responses to “Datafeed QUIK и MySQL через ODBC”

  1. 1 saykel

    Спасибо, а Нельзя ли выслать Плагин с табличками на мой емейл?
    saykel84@mai.ru

  2. 2 Андрей

    Подскажите., экспорт из квика в ексель таблицы всех сделок только по одной бумаге например РАО а это порядка 50К сделок в день, далее эти сделки разделяются на куплю продажу и передаются в екселевские диаграммы экспорт идет через дде, но при сильной активности начинает накапливаться отставание в екселе то есть сделки не успевают обсчитываться в итоге на екселевских графиках образуются резкие движняки со значительным отставанием если постоянно не обновлять экспорт то отставание копиться и компенсируется только когда рынок успокаивается, как избавиться от этой проблемы. файл в екселе 50 метров размером получается в конце дня

  3. Эксель конечно не предназначен для обработки такого объема информации, думаю лучше использовать вывод по ODBC в какую нибудь нормальную БД (но не аксесс) MySQL или MsSQL подойдут, причем входные данные можно обрабатывать Trigger’ами как угодно. Причем в этм случае никакой потери данных не будет.

    А обработанные данные уже из БД можно читать из VBA макросов Excel’я через ODBC интерфейс, строить графики и все что угодно.

  4. 4 zionman

    Уважаемый Angel’s death вопрос по поводу MySQL
    на шаге 3:
    — В MySQL загружается архивированная БД (AmiSQLEngine.sql) — это можно
    сделать с помошью MySQL Administrator — пункт RESTORE.)

    Запускаю Administrator высвечивается окно для входа, там
    -Stored connection
    -Server Host
    -Username
    -Password
    C логином и паролем все понятно, но что делать с Server Host не понятно
    Пробовал разное писать, но ничего не помогает
    Пишет Could not connect to the specified instance
    MySQL Error 2003 (или Error 1130)
    Cant connect to MySQL Server
    Откуда взять HostName и как войти в базу.
    (компьютер один без сетки, сервер вроде запущен и немного скорфигурирован в Config Wizard) ???
    Евгений.

  5. Для локального компьютера server host = localhost


  1. 1 future market

Оставьте комментарий