SkillAgentSearch skills...

Q2Ami

Data-source plugin for AmiBroker to fetch data from remote QUIK terminal over the network

Install / Use

/learn @Arech/Q2Ami

README

Short description in English: this project makes a data-source plugin for great AmiBroker software, that obtains quotes data in real-time from QUIK terminal using t18qsrv proxy-server plugin for QUIK. QUIK terminal is commonly used to trade Russian stock/futures/etc market. You probably have to understand Russian in order do what the QUIK is used for, so I don't see much sence in making a full translation of the project description. However, note that the code comments are still written mostly in English.

Плагин AmiBroker для получения данных из QUIK по сети

Терминал AmiBroker на сегодняшний день является, вероятно, одним из лучших средств (лучшим?) для работы с финансовыми таймсериями. Благодаря наличию системы плагинов, в AmiBroker можно в режиме реального времени загружать данные из любых источников.

Терминал QUIK, широко используемый на Российском рынке, в своей поставке содержит плагин для передачи данных в AmiBroker, однако этот плагин требует, чтобы и QUIK и AmiBroker работали бы одновременно на одной машине. Это не всегда удобно и даже возможно из-за различных проблем разрядности, совместимости и т.д.

Проект Q2Ami с помощью работающего внутри QUIK прокси t18qsrv даёт возможность разнести по разным машинам работающий с серверами брокера экземпляр QUIK и терминал AmiBroker, в который по сети будут передаваться котировки. Другими словами, связка Q2Ami+t18qsrv позволяет передавать на другую машину и выводить в AmiBroker поток обезличенных сделок.

Код плагина устроен таким образом, что позволяет "на лету" выполнять преобразования потока сделок в любой нужный вид (вам придётся написать нужный код для этого) и выводить результат в отдельный тикер AmiBroker. В качестве примера см. реализацию класса ::t18::_Q2Ami::modes::ticks в файле q2ami_convs.h. Ваши реализации сохраните в "../t18+/Q2Ami/exp_convs.h" и в его конце незабудьте задать определение типу Conv_Modes_t аналогично тому, как это сделано в q2ami_convs.h, тогда ваши конвертеры подхватятся автоматически.

Статус кода

В целом, можно охарактеризовать скорее как "стабильная бета v2", т.к., в основном, всё работает правильно, но есть нюансы:

  1. отсутствует код восстановления соединения с прокси t18qsrv при потере связи. В случае потери соединения необходимо перезапустить AmiBroker (обычно это не большая и очень редкая проблема, поскольку в силу незащищённости канала передачи данных между Q2Ami и t18qsrv, решение имеет смысл использовать лишь внутри одной защищённой локальной сети, где разрывы соединений - крайне редкое, если вообще не вероятное, явление).

  2. Иногда после конфигурирования базы через Ami File/Database settings.../Configure почему-то не отправляются запросы к серверу на подписку на данные тикера. Перезапуск Ami всё решает.

Условия использования

Программа поставляется на условиях стандартной лицензии свободного ПО GNU GPLv3. Если вы хотите использовать плагин или его часть так, как лицензия прямо не разрешает, пишите на aradvert@gmail.com, договоримся.

Если вы зарабатываете с участием плагина деньги, то, наверняка, должны понимать сколько труда стоит создать такую работу. Сделайте донат для покрытия расходов на разработку на своё усмотрение. За деталями так же пишите на aradvert@gmail.com.

Дополнительная информация

Код содержит некоторые файлы из AmiBroker SDK, разрешённые к распространению. Эти файлы помечены заголовком:

///////////////////////////////////////////////////////////////////////
// Copyright (c) 2001-2010 AmiBroker.com. All rights reserved. 
//
// Users and possessors of this source code are hereby granted a nonexclusive, 
// royalty-free copyright license to use this code in individual and commercial software.
//
// AMIBROKER.COM MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE CODE FOR ANY PURPOSE. 
// IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. 
// AMIBROKER.COM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, 
// INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
// IN NO EVENT SHALL AMIBROKER.COM BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, OR 
// CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
// WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 
// ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE.
// 
// Any use of this source code must include the above notice, 
// in the user documentation and internal comments to the code.
///////////////////////////////////////////////////////////////////////

Компилятор

Q2Ami разработан с использованием превосходного компилятора Clang v6 набора LLVM, поэтому версия 6 или более новые версии Сlang будут работать сразу. Другие современные компиляторы, полноценно поддерживающие спецификацию С++17 теоретически должны работать тоже, но, возможно, придётся внести небольшие правки.

Среда Visual Studio 2015 (проект которой присутствует в исходных кодах) используется только как редактор кода и инструмент управления компиляцией. Использование её не обязательно. Для компилятора VC версии 2015 проект, скорее всего, будет не по зубам, из-за зависимостей на фреймфорк t18, требующий поддержки С++17, но, возможно, более свежие VC2017 или VC2019 уже справятся.

Обратите внимание, что в проекте определён Post-Build Event в котором собранная .dll плагина копируется в папку плагинов AmiBroker. Проверьте и перенастройте под себя, или уберите этот шаг.

Внешние зависимости

  • Кроме стандартных компонентов STL (использовалась версия stl из VC2015, но с другими не более старыми версиями проблем быть не должно) используются только некоторые компоненты библиотеки Boost в режиме "только заголовочные файлы" (использовалась версия 1.70, более свежие должны работать из коробки (1.75 сейчас) ). Компиляции Boost не требуется.

  • Фреймворк t18 содержит необходимые описания протокола и некоторые иные нужные части. Фреймворк достаточно скачать/клонировать в над-каталог проекта, в папку ../t18, и он подхватится автоматически. На всякий случай: каждый новый коммит этого проекта полагается на самый последний коммит t18.

  • Быстрая lock-free очередь readerwriterqueue. Проект надо скачать/клонировать в над-каталог ../_extern/readerwriterqueue/ и всё подхватится автоматически.

  • Заголовочная версия INIReader должна находиться в над-каталоге ../_extern/inih/

  • Система логирования spdlog. Если скачать/склонировать в над-каталог ../_extern/spdlog-1.3.1/, подхватится автоматически. При неизменности интерфейса, должно быть, будут работать и более новые версии, однако в случае ошибок - берите версию 1.3.1. Путь к заголовочным файлам прописывается на листе VC++ Directories свойств проекта в атрибуте Include Directories.

Использование

QUIK с работающим внутри него прокси t18qsrv должен быть запущен и доступен по сети. Не забудьте настроить вручную в Квике запрос обезличенных сделок для нужных инструментов.

Проверить, видит ли AmiBroker установленный плагин, можно в меню Tools / Plugins.... Там должен быть пункт My QUIK2Ami, столбец type должен иметь значение data.

Под данные из QUIK придётся создать отдельную базу данных (это общая рекомендация AmiBroker, из-за его внутреннего устройства не смешивать обычные базы с большими историческими данными с базами внешних data-source плагинов). Для этого:

  1. Сначала желательно создать в любом месте на диске (куда может писать AmiBroker) пустую папку, в которую стоит сразу поместить конфиг-файл cfg.ini, определяющий в числе прочего IP-адрес и порт, на котором работает t18qsrv. Настройки конфига описаны дальше в отдельном разделе, к которому рекомендую перейти после знакомства со следующими шагами. В случае отсуствия этого файла, он будет создан при первом запуске с дефолтным содержимым.

  2. Далее выбираем меню File / New / Database..., в появившемся диалоге в разделе "Database folder" указываем путь к ранее созданной папке, в разделе "Base time interval" выбираем Tick и нажимаем Create. Далее станут доступны опции "Data source", где надо выбрать My QUIK2Ami и задать достаточно большое число баров в "Number of bars". Переключатель "Local data storage" лучше оставлять в положении Enable, иначе данные (обезличенные сделки) по прошлым торговым сессиям (если их не сохраняет ваш брокер, а скорее всего он их не сохраняет), пропадут.

    • Независимо от того, какие дополнительные режимы обработки/агрегирования обезличенных сделок вы ещё реализуете, рекомендую оставлять переключатель "Base time interval" в прежнем значении Tick. Это гарантирует, что AmiBroker не будет никак пытаться дополнительно конвертировать получаемые от плагина данные перед их сохранением в свою базу данных.

    • Важно понимать, что в отличие от исторических баз (тип Data Source (local database)), где параметр "Number of bars" не влияет на объём возможной истории по инструменту, для всех плагинов "Number of bars" глубину доступной истории задаёт однозначно и она не может быть превышена, - старые данные просто исчезают (перезаписываются). Выбирайте значение этого параметра исходя из собственных потребностей и мощности компьютера (учтите, что при использовании data-source плагинов AmiBroker и его afl-движок становится несколько менее эффективным, поэтому злоупотреблять значением этого параметра не надо). В качестве стартовой точки, должно быть, вполне пойдё

View on GitHub
GitHub Stars10
CategoryFinance
Updated1y ago
Forks5

Languages

C++

Security Score

80/100

Audited on Mar 7, 2025

No findings