Здравствуйте,
Я хотела бы научиться писать небольшие вспомогательные програмки на QLUA, опыт програмирования у меня очень небольшой, когда-то давно был курс в университете. Я смогла написать следующую программу, которая выполняет следующее:
при запуске формируется таблица с фьючерсами, запоминается в отдельной колонке открытый интересе в момент создания таблицы.
Далее, каждые несколько секунд берется текущий открытый интерес и вычисляется изменение открытого интереса. Эти данные выводятся в отдельную колонку.
На текущий момент, больше всего я не понимаю, как работать с типами данных, почему-то чтобы выводились данные в колонку - их нужно преобразовывать в строки, иначе у меня выводятся нули.
К сожалению, мне очень не хватает рабочих примеров, чтобы быстрее обучиться.
Хотя код рабочий, я буду признательна, если кто-то сможет подправить код с точки зрения приведения типов. Хочется чтобы в столбцах OI, OIINIT, OICHG, OICHG% были не строки, а числа.
И еще один вопрос, можно ли добавить столбы
- которые брали бы открытый интерес на начало дня (на 10 утра по Москве, либо на 19:00 предыдущего дня - любой вариант подходит)
- которые брали открытый интерес который был 15 минут назад (получается, это поле должно динамически обновлятьс, достаточно раз в минуту например)
Я хотела бы научиться писать небольшие вспомогательные програмки на QLUA, опыт програмирования у меня очень небольшой, когда-то давно был курс в университете. Я смогла написать следующую программу, которая выполняет следующее:
при запуске формируется таблица с фьючерсами, запоминается в отдельной колонке открытый интересе в момент создания таблицы.
Далее, каждые несколько секунд берется текущий открытый интерес и вычисляется изменение открытого интереса. Эти данные выводятся в отдельную колонку.
На текущий момент, больше всего я не понимаю, как работать с типами данных, почему-то чтобы выводились данные в колонку - их нужно преобразовывать в строки, иначе у меня выводятся нули.
К сожалению, мне очень не хватает рабочих примеров, чтобы быстрее обучиться.
Хотя код рабочий, я буду признательна, если кто-то сможет подправить код с точки зрения приведения типов. Хочется чтобы в столбцах OI, OIINIT, OICHG, OICHG% были не строки, а числа.
И еще один вопрос, можно ли добавить столбы
- которые брали бы открытый интерес на начало дня (на 10 утра по Москве, либо на 19:00 предыдущего дня - любой вариант подходит)
- которые брали открытый интерес который был 15 минут назад (получается, это поле должно динамически обновлятьс, достаточно раз в минуту например)
Код |
---|
is_run = true instrument_list = {"BRQ3", "BRU3", "BRV3", "BRX3", "GDU3", "GDZ3", "HSU3", "HSZ3", "NAU3", "NAZ3", "NGQ3", "NGU3", "NGV3", "NGX3", "PDU3", "PDZ3", "PTU3", "PTZ3", "SFU3", "SFZ3", "SVU3", "SVZ3"} nsecrefresh = 3 function OnStop() is_run = false end function round(num, idp) if num == nil then return nil end local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end function CreateTable() t_id = AllocTable(); AddColumn(t_id, 0, "FUT", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 1, "OI", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 2, "OIINIT", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 3, "OICHG", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 4, "OICHG%", true, QTABLE_DOUBLE_TYPE, 10); t = CreateWindow(t_id); SetWindowCaption(t_id, "Open Interest Change"); SetWindowPos(t_id, 100, 100, 252, 532); class = "SPBFUT" for k,v in pairs(instrument_list) do InsertRow (t_id, k) sec = tostring(v) mdparam = getParamEx(class, sec, "NUMCONTRACTS") trueoi = mdparam.param_value trueoi_str = string.format("%d", trueoi) SetCell (t_id, k, 0, sec) SetCell (t_id, k, 1, trueoi_str) SetCell (t_id, k, 2, trueoi_str) chg = 0 SetCell (t_id, k, 3, tostring(chg)) chg_pc = 0 SetCell (t_id, k, 4, tostring(chg_pc)) end return t_id end; function RefreshTable (t_id) for k,v in pairs(instrument_list) do sec = tostring(v) mdparam = getParamEx(class, sec, "NUMCONTRACTS") trueoi = mdparam.param_value trueoi_str = string.format("%d", trueoi) SetCell (t_id, k, 1, trueoi_str) initoi = GetCell(t_id, k, 2).image chg = trueoi - initoi chg_str = string.format("%d", chg) SetCell (t_id, k, 3, chg_str) initoi_val = tonumber(initoi) chg_pc = round(chg / initoi_val * 100,2) SetCell (t_id, k, 4, tostring(chg_pc)) end end; function main() table_id = CreateTable() while is_run do sleep(nsecrefresh*1000) RefreshTable (table_id) end end |