Mariana (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Таблица с измемениями открытого интереса
 
Здравствуйте,

Я хотела бы научиться писать небольшие вспомогательные програмки на 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
Страницы: 1
Наверх