Блог им. Karim

Quik. Экспорт свечей в dll на С++.

    • 28 марта 2017, 13:30
    • |
    • Karim
  • Еще



Как создавать и подключать внешнюю dll на С++ к скриптам в Quik показано здесь http://smart-lab.ru/blog/387954.php.

Следующий важный шаг — это передача данных из Quik в библиотеку. В видео показано, как передавать данные свечей. Есть несколько вариантов.

1. С помощью функции CreateDataSource(ClassCode, SecCode, INTERVAL_M1)  подписаться на источник данных, зарегистрировать свой калбэк, и при возникновении события уже обрабатывать нужные данные.

2. Использовать функцию OnAllTrade(table), которая вызывается при каждой сделке. Получать эти данные и самостоятельно нарезать свечи по нужному таймфрейму.

3.  С помощью функции getCandlesByIndex (ind, 0, n — quantity, quantity)  забрать нужное количество свечей с графика.

В видео рассматривается третий вариант, как самый простой с точки зрения реализации.

Аналогичным образом можно передавать и данные таблиц заявок, стоп-заявок, сделок и т.д. А дальше остается только обработать эти данные по заданному алгоритму и отдать команду в Quik (есть тоже 3 способа). И робот готов.

Архив проекта: yadi.sk/d/nllkzMHV3GQqPg

★20
12 комментариев
«Таблица всех сделок» как ввести в файл. Может сделаете урок?
Сергей Кошелев, Вы имеете ввиду вывести в файл? Так там все просто:
n = getNumberOf(«all_trades»)
а дальше в цикле берете, например, цену 
getItem(«all_trades», i).price
и пишите в файл.
avatar
«Таблица текущий торгов» какое значение сейчас RTS или Si.
Сергей Кошелев, «Таблица текущий торгов»

А что это за таблица? Что за данные там?
avatar
Надо на С++, а не Lua. Я как понял на OnAllTrade как на C++ вызвать?
Сергей Кошелев,  Вы ее никак не вызовете, это callback. Ее вызывает Quik при каждой сделки. Самый простой вариант это добавить в скрипт на QLua такой код:

function OnAllTrade(trade)
Sl.SendTrades(trade)
end

а в библиотеке создать свою функцию «SendTrades» и обрабатывать таблицу trade.
Если посложнее, то можно прямо из библиотеки переопределить глобальное имя OnAllTrade на свое функцией 
lua_setglobal(L, «OnAllTrade»);

avatar
https://github.com/elelel/qluacpp есть либа которая это все делает. Но там нету .sln проекта.

Здесь есть только он не под Visual Studio не компилится. Может сделаете .sln проект из этой либы?

void OnAllTrade(lua::state& l, const qlua::alltrade& data) {
// Create extended QluaCpp API object.
qlua::extended_api q(l);
// Call message Quik LUA function
q.message(std::string(«OnAllTrade: „) + data.sec_code + std::to_string(data.price));
}

Сергей Кошелев, А зачем какая то сторонняя библиотека нужна?
Я же написал, как сделать. Всего две строчки добавить в код.
avatar
Вы написали на Lua, а надо C++. А так писать можно и без C++ вообще.
 Lua тормоз.
Сергей Кошелев, Другого в квике нет. QPILE вообще отстой.
avatar

теги блога Karim

....все тэги



UPDONW
Новый дизайн