опять по "дней до погашения" получаю нули!!! в понедельник все отлично работало, сегодня опять не пойми что.. от чего это зависит? как только дата экспирации по опционам, так запросы перестают нормально работать. не только дни до погашения, но и тип опциона не получается
У меня в терминале не выбран ни один инструмент для заказа котировок и обезличенных сделок. вот мой скрипт - получаю одни нули.
Код
function main()
op = io.open("D:\\market_orders\\codes.csv","w+")
io.output(op)
opt = getClassSecurities("SPBOPT")
for i in string.gmatch(opt, "%w+") do
op:write(i, "\n")
op:write(getParamEx("SPBPOT", i, "DAYS_TO_MAT_DATE").param_value, "\n")
end
io.close()
end;
почему в версии 7.27.2.1 на запрос DAYS_TO_MAT_DATE выдает nil? этот параметр уже нельзя запросить? в руководстве пользователя 7.27 этого параметра нет. хотя если строить таблиц текущих торгов, то столбец с количеством дней до погашения есть...
как мне понять какой код у текущего фьюча(без поиска по сайту биржи) - придется сначала запросить все, а потом отфильтровать- и получить одну единственную запись. Потом по для каждого опциона запросить его БА, снова фильтр. потом выбрать только нужную дату. Так получается?
меню "Система"->"Настройки"->"Основные настройки"->"Программа"->"Файлы настроек". Я там поставил все галочки. В окне "Использовать файл настроек" - указываю отдельную папку, а сам квик их скидывает в свою папку Quik.
Есть одно неудобство, связанное с постоянным обновлением списка опционов руками ( я знаю что есть возможность обновлять их по сообщению системы). Но мне бы хотелось получать список всех опционов, допустим, на фьючерс РТС - к примеру, и потом уже подписываться на интересные даты и страйки. Посмотрел мануал по Луа, там есть STRING getClassesList (), но он вернет - OPTEXP,USDRUB,PSOPT,PSFUT,SPBFUT. из него я допустим беру SPBFUT и передаю его в sec_list = getClassSecurities("SPBFUT"). в итоге получу кучу всего: RSH3,VBZ2,O4Z2,O2Z2,SiM3,SiH3......из всего разнообразия надо вспомнить какой код у ближайщего фьюча, и потом как-то запросить опционы с подходящими датами и страйками... Существуют ли реализованные способы? Или проще сначала спарсить сайт биржи, а потом уже подписываться на опционы? Спасибо
Не очень понимаю...мне не нужны таблицы по опционам в квике. Я убрал из заказа данных все что мне не нужно. Я получаю при текущих настройках данные которые мне интересны. Я просто не понимаю почему работа onParam не соответствует описанию в мануале, что приводит к появлению старых данных...получается onParam работает в цикле и если её не вызывает терминал какое-то время - берет инициативу на себя и проходит по всем заказанным инструментам. у меня такая схема сложилась..
Добрый день. Если включить, то вообще ничего не появляется (наверно потому что у меня не включена ни одна таблица). Я установил только опционы, по мануалу (
Вручную, выбрав пункт меню Рабочего места QUIK Система / Заказ данных / Поток котировок...и указав необходимые параметры и инструменты на классе;
) Вопрос по теме настроек - есть ли возможность через скрипт сохранять настройки и загружать их?
Здравствуйте. В настройках галка не установлена, период стоит - 0 сек [img]file:///C:/Users/%D0%96%D0%B5%D0%BD%D1%8F/Desktop/%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%20%D1%82%D0%BE%D1%87%D0%B5%D1%87%D0%BD%D1%8B%D0%B9%20%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BE%D0%BA.bmp[/img]
Подскажите по onParam. Вчера при просмотре файла ордеров по опционам заметил нечто странное. Скрипт по onParam проверяет класс и если класс - опционы, то запрашивает данные по цене и виду опциона, затем записывает строку в файл. В настройках самого квика подписан только на оционы- сбер си и золото. Так вот сама суть наблюдения: в периоды активного изменения данных файл строится по хронологии, по столбцу времени все выглядит правильно, но потом появляются целые блоки, в которых видно что onParam, проходится в алфавитном порядке по опционам и записывает старые данные- это я понял по времени изменения котировки. Потом опять появляются данные с текущим временем, затем снова блок старых данных...могу прислать скрипт, настройки квика и файл с данными.
скрипт:
Код
function main()
op = io.open("D:\\market_orders\\orders_op.csv","w")
io.output(op)
op:write("code;strike;time;q_bid;bid;offer;q_offer;theor_price;go_sell;go_buy;exp_date\n")
message("SCRIPT IS RUNNING!")
while IsRun do
end
end
function OnParam( class, sec )
if class =="SPBOPT" then
ttime = getParamEx(class, sec, "CHANGETIME")
tq_bid = getParamEx(class, sec, "BIDDEPTH")
tbid = getParamEx(class, sec, "BID")
toffer_l = getParamEx(class, sec, "OFFER")
tq_offer = getParamEx(class, sec, "OFFERDEPTH")
strike = getParamEx(class, sec, "STRIKE")
theor = getParamEx(class, sec, "THEORPRICE")
exp = getParamEx(class, sec, "EXPDATE")
gobuy = getParamEx(class, sec, "BUYDEPO")
gosell = getParamEx(class, sec, "BGONP")
op:write(sec,";",tonumber(strike.param_value),";",tonumber(ttime.param_value),
";",tonumber(tq_bid.param_value),";",tonumber(tbid.param_value),
";",tonumber(toffer_l.param_value),";",tonumber(tq_offer.param_value),
";",tonumber(theor.param_value),
";",tonumber(gosell.param_value),";",tonumber(gobuy.param_value),
";",tonumber(exp.param_value),"\n")
end
end
вот что только что записал: code;strike;time;q_bid;bid;offer;q_offer;theor_price;go_sell;go_buy;exp_date ... RI147500BT9;147500;192814;3;11880;12200;3;12020;20867.82;15788.69;20190815 RI150000BT9;150000;192857;3;14320;14640;3;14470;20929.07;17960.38;20190815 RI152500BT9;152500;185157;10;200;149990;3;16950;20952.51;19481.91;20190815 RI155000BT9;155000;190009;20;18490;20650;20;19440;20964.48;20365.78;20190815 RI157500BT9;157500;185157;10;60;0;0;21930;20978.17;20811.5;20190815 RI160000BT9;160000;190009;15;23220;25910;15;24430;20979.02;21035.9;20190815 RI162500BT9;162500;185131;1;30;0;0;26930;20980.91;21146.42;20190815 RI165000BT9;165000;185131;1;30;0;0;29430;20983.77;21203;20190815 RI167500BT9;167500;185131;1;30;0;0;31920;21001.68;21219.32;20190815 RI170000BT9;170000;185131;1;30;0;0;34420;21006.41;21236.55;20190815 RI172500BT9;172500;185131;1;30;0;0;36920;21012.09;21246.78;20190815 RI175000BT9;175000;185131;1;30;0;0;39420;21018.71;21253.16;20190815 RI177500BT9;177500;185131;1;30;0;0;41920;21026.28;21257.29;20190815 RI180000BT9;180000;185131;1;30;0;0;44420;21034.75;21260.09;20190815 RI182500BT9;182500;185131;1;30;0;0;46920;21044.09;21262.05;20190815 ...
Подскажите по onParam. Вчера припромотре файла ордеров по опционам заметил нечто странное. Скрипт по onParam проверяет класс и если класс - опционы, то запрашивает данные по цене и виду опциона, затем записывает строку в файл. В настройках самого квика подписан только на оционы- сбер си и золото. Так вот сама суть наблюдения: в периоды активного изменения данных файл строится по хролнологии, по столбцу времени все выглядит правильно, но потом появляются целые блоки, в которых видно что onParam, проходится в алфавитном порядке по опционам и записывает старые данные- это я понял по времени изменения котировки. Потом опять появляются данные с текущим временем, затем снова блок старых данных...могу прислать скрипт, настройки квика и файл с данными
В ваших мануалах указывается, что для снижения нагрузок и проч, квик не передаёт отдельно каждое обновление по котировкам, а накапливает данные с одинаковыми параметрами цены, и выдаёт разом все... я так понял. В общем ключевой момент 300мс и он был в вашем мануале. Не помню с точностью до страницы, но я его не выдумал.
С 18 февраля биржа отменила 3мс батчинг(вроде они так его называют)котировок. И соответственно сервера теперь отправляют изменения по заявкам онлай так сказать.(Об этом написала сама биржа на своём сайте). Я ожидал увидеть увеличение количества изменений по ордерам, но все также получаю 4-8 строчек за секунду. К ого просить ускориться? Брокера или арку?
Это поднимает вопрос о том, как получать максимально быстро изменения в котировках, если данные отправляются срезами? Здесь уже было обсуждение кто быстрее-получилось что ОнКвоут быстрее. А теперь получается что из-за срезов разницы может и не быть...
Такой ещё вопрос. Есть ситуация, когда я кидаю в стакан заявку по оционам, по цене хуже рынка-она сразу в таблице заявок принимает статус исполнена. Но в стакане она не отразилась-или глаз не успел увидеть)такого рода ситуации лучше отлавливать ОнКваут? Или же ОнПарам?
А таблица текущих параметров имёт ограничения по количеству бумаг? Можно ли в одном скрипте сочитать работу со стаканами нескольких бумаг и обращение getParamEx?
Описание лабораторной установки:квик версии см. выше. Через настройки получения данных отключены все рынки кроме ФОРТС, в рынке выбран только один инструмент - фьюч сбера; выбраны параметры лучшие цены спроса и предложения, и размеры спроса и предожения. Обезличенные сделки-отключены все рынки. Таким образом, думаю я исключил получение левых данных. В терминале открыт стакан по выбранному фьючерсу. В коде я задал переменные для класса и кода бумаги. И если удалось подписаться на заданный стакан, то ду вайл... И такой ещё вопрос. Если я хочу подписаться на полные доски опционов по двум фьючерсам, на десяток стаканов по акциям и три десятка по облигациям- в сумме может превысить порог в 200 стаканов, про который написано в мануале по квику, или это количество установлено для рабочего места,- то как мне оптимально записать подписку на все эти стаканы, проверку их в ОнКвоут- очередью?
Прежде чем писать, я погуглил и почитал форумы. Но ответ на глаза не попался . Вот код:
Код
local class_code = "SPBFUT"
local sec_code = "SRZ8"
function main()
if Subscribe_Level_II_Quotes(class_code, sec_code) then
while IsRun do
end
end
end
function OnQuote(class_code, sec_code)
ql2 = getQuoteLevel2(class_code, sec_code)
--bidCount = ql2.bid_count
--message(ql2.bid[0+bidCount].price ..'-' .. ql2.bid[0+bidCount].quantity)
message(ql2.offer[1].price ..'-'.. ql2.offer[1].quantity)
end
решил сравнить со стаканом котировок, вроде совпадает, НО если начать просматривать сообщения по очереди, то проскакивает котировка типа 19588 или 19533 - видать из дна стакана. Как такое может быть, если выводится только первая строка? тоже самое происходит и при просмотре БИДа
По поводу манула по QLua - в примере можно было бы указать как обратиться к строке таблицы через индекс строки (да до меня не дошло) - пришлось искать по форумам. Помогите разобраться почему проскакивает левая цена? Спасибо. версия 7.19.0.51
Ваш сайт я уже посмотрел. в поисках решения своих идей. только картинки мало чем помогут-вот пример кода, или наводка как сделать правильней- больше помогут. такой огород получается потому что в Квик нет возможности обращаться к любой таблице, скажем доске опционов.
потаюсь реализовать свое видение тестирования системы. пришел к выводу, что неплохо было бы сигналы от ТС выносить на график инструмента. Я представляю себе это так. эксель обсчитывает данные, записывает параметр сигнала - время, цена, кол-во- в файл, а Квик забирает записанную строчку в созданную таблицу, и по данным этой таблицы строиться уже индикатор в реальном времени. в общем так работает нанесение на график меток исполненных сделок (треугольник вниз-вверх). вот мне интересно, если квик забирает строчку из файла .tri и она записывается в таблицу заявок, то как из произвольного файла записать строку (состоит из данных время, цена, объем) в созданную таблицу в Квик. такое "кривое" исполнение потому, что не силен в программировании, и все реализовано на Квик-ДДЕ-Эксель-.tri