Добрый день. В связи с очень небольшим опытом работы LUA+QUICK прошу помощи и пояснений.
Задача: получить данные таблицы из стакана котировок (опционов), при условии, что стакан не должен быть открытым в терминале QUICK.
Воспользовался функцией getQuoteLevel2() - простая, удобная и понятная, при открытом стакане работает отлично. Мне не принципиально для того скрипта, над котором сейчас работаю (могу и открыть нужный стакан), но наткнулся на функцию: Subscribe_Level_II_Quotes(STRING class_code, STRING sec_code)
и например, если делаю так:
function OnInit() --Subscribe_Level_II_Quotes(CLASS_CODE_OPT, TICKER_OPT) --переменные инициализируются данными, после второго запуска скрипта LEVEL2_BID_COUNT = getQuoteLevel2(CLASS_CODE_OPT, TICKER_OPT).bid_count LEVEL2_OFFER_COUNT = getQuoteLevel2(CLASS_CODE_OPT, TICKER_OPT).offer_count end
то таблица пустая (при закрытом стакане!) повторяю скрипт - всё нормально и значения присваиваются.
В чём может быть причина и возможно ли без лишнего геморроя устранить эту проблему? В ином случае придётся без этой функции, в ручную открывать стакан.
В целом, задача это - автоматизировать торговлю. открывать/закрывать позиции на основании некого алгоритма условий. Да, много разных функций полезных и не очень, а написание скрипта похоже на сборку. И всё таки не понимаю, почему не упрощают, в этом весь смысл.
Ну запросил пользователь стакан (ладно с идентификатором графиков и индикаторов понятно), почему бы не исполнить в нём функцию subscribe и просто выдать нужную таблицу, в конце концов если хранить данные, их можно записывать в обычный текстовой файл и работать уже с ним.
Возможно я не прав, но пока сталкиваюсь с непонятными вещами, которые можно и нужно упрощать.
Я не понимаю другое, почему реализовано "так, а не иначе", приходится лишние строчки в скрипт добавлять и лишние действия. Допустим заказу котировок и обнуление это понять можно, но вот например:
заявки читаются снизу вверх. offer с индексом 1 это ближайшая рыночная, а bid с индексом 1 это последняя заявка в стакане и рыночная у bid последний индекс. почему так, не понятно. Это если открыть позицию из количества заявок в штук 5 - охватит объём, то вот закрыть позицию - надо обрабатывать с последнего индекса и писать для этого отдельную функцию. В итоге, наверное проще выставлять лимитированные заявки. У опционов стаканы специфические, не всякий объём "скушают".
[QUOTE]ddonny написал: и например, если делаю так:
function OnInit() --Subscribe_Level_II_Quotes(CLASS_CODE_OPT, TICKER_OPT) --переменные инициализируются данными, после второго запуска скрипта LEVEL2_BID_COUNT = getQuoteLevel2(CLASS_CODE_OPT, TICKER_OPT).bid_count LEVEL2_OFFER_COUNT = getQuoteLevel2(CLASS_CODE_OPT, TICKER_OPT).offer_count end [QUOTE]
Данные не мгновенно же появляются. Subscribe_Level_II_Quotes <-- происходит подписка, данные приедут позже (причем только после выхода из обработчика Lua! это надо учитывать)
Да, спасибо что хоть это сделали. Лет 10 назад изучал C под linux, забросил это дело, думал ничего не вспомню, а нет - помогает. в целом всё решаемо, если понять архитектуру QLUA (таблицы и т.д.) и очень много информации, хорошо развитый форум, хочется поблагодарить разработчиков и всех неравнодушных!