Здравствуйте,
Я хотела бы научиться писать небольшие вспомогательные програмки на 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
|