Как создавать и подключать внешнюю 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
n = getNumberOf(«all_trades»)
а дальше в цикле берете, например, цену
getItem(«all_trades», i).price
и пишите в файл.
А что это за таблица? Что за данные там?
function OnAllTrade(trade)
Sl.SendTrades(trade)
end
а в библиотеке создать свою функцию «SendTrades» и обрабатывать таблицу trade.
Если посложнее, то можно прямо из библиотеки переопределить глобальное имя OnAllTrade на свое функцией
lua_setglobal(L, «OnAllTrade»);
Здесь есть только он не под 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));
}
Я же написал, как сделать. Всего две строчки добавить в код.