Блог им. vitales
TICER = "SBER"; CLASS_CODE = "TQBR"; stopped = false; t_id = nil H = -1; M = -1; VSELL = 0; VBUY = 0; function OnInit() CreateTable(); end function main() while not stopped do if IsWindowClosed(t_id) then stopped = true; end sleep(100); end end function CreateTable() t_id = AllocTable(); AddColumn(t_id, 0, "Время", true, QTABLE_STRING_TYPE, 10); AddColumn(t_id, 1, "BUY", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 2, "SELL", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 3, "Дельта V", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 4, "Цена", true, QTABLE_DOUBLE_TYPE, 15); tab = CreateWindow(t_id); SetWindowCaption(t_id, TICER.." Баланс покупок/продаж"); SetTableNotificationCallback(t_id, EventCallBack); end function OnAllTrade(alltrade) if alltrade.sec_code == TICER then fl = tostring(alltrade.flags); if H==alltrade.datetime.hour then if M==alltrade.datetime.min then if fl == "1025" then VSELL = VSELL+alltrade.qty; end --Продажа if fl == "1026" then VBUY = VBUY+alltrade.qty; end else M=alltrade.datetime.min; --Rows --срока Coll -- Колонка InsertRow(t_id, -1); local Rows, Col = GetTableSize(t_id); local Delta = VBUY-VSELL; --local t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min); local t = tostring(H)..":"..tostring(M); SetCell(t_id, Rows-1, 0, t); SetCell(t_id, Rows-1, 1, tostring(VBUY)); SetCell(t_id, Rows-1, 2, tostring(VSELL)); SetCell(t_id, Rows-1, 3, tostring(Delta)); SetCell(t_id, Rows-1, 4, tostring(alltrade.price)); if Delta<0 then Red(Rows-1,3); end if Delta>0 then Green(Rows-1,3); end if Delta==0 then Yellow(Rows-1,3); end if fl == "1025" then VSELL = alltrade.qty; end --Продажа if fl == "1026" then VBUY = alltrade.qty; end end else H = alltrade.datetime.hour; M = alltrade.datetime.min; end end end function Red(row,col) SetColor(t_id, row, col, RGB(255,0,0), RGB(0,0,0), RGB(255,0,0), RGB(0,0,0)); end function Yellow(row,col) SetColor(t_id, row, col, RGB(240,240,0), RGB(0,0,0), RGB(240,240,0), RGB(0,0,0)); end function Green(row,col) SetColor(t_id, row, col, RGB(0,200,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0)); end function EventCallBack(t_id, msg, par1, par2) if msg==QTABLE_CLOSE then OnStop(); end; end function OnStop(s) if t_id ~= nil then DestroyTable (t_id); end; stopped = true; end
Сделать тоже самое, но для всех ликвидных и в одной таблице, причем два разных скрипта: Фондовый и Срочный.
Просто для каждого тикера отдельно запускать смысла… мало.
пысы, со скриптом неполадки или я летом на лыжах. У меня такие минутные дельты получились. У вас еще с общим объемом сделок не коррелирует. Инструмент юзал для фюьча RIM0, может там собака зарыта.
Фильтрую нужные инструменты на входе при заказе данных.
Что-то вроде этого:
В общем там такой себе граальчик своего рода, если правильно обработать и посмотреть на данные ) Под верным углом, так сказать :)
Делаю так, но не с Quik.
function main()
— подписка на получение данных свечи
ds_s, Err1 =CreateDataSource (EX_CODE, FUT_S, INTERVAL_M1)
if Err1 == "" or Err1 == nil then
message(«Пока ОК 1»)
while not (ds_s:Size() >0) do
sleep(10)
end
— определение функции обратного вызова
Err1 = ds_s:SetUpdateCallback (cbCandleS)
if Err1 == true then
message(«cb1 OK»)
else
message(«Err1»… tostring(Err1))
end
else
message(«Ошибка 1»… Err1)
end
Это уже не в main()
— изменение свечи S и запись в БД (получение реал-тайм данных)
function cbCandleS(i) --
local dt ={}
local evt =0
dt = GetCandle(ds_s, FUT_S, i)
--message(«Изменение свечи S»)
a, b = CCS.cvCandleS(dt)
--message( «CCS.cvCandleS(dt) »… a)
end
Я все получаю и свечи и сделки
function OnAllTrade(alltrade)
if alltrade.sec_code == FUT_S or alltrade.sec_code == FUT_L then
--message(«Обезлич сделка beg »… alltrade.sec_code)
at ={alltrade.datetime, alltrade.sec_code, alltrade.trade_num, alltrade.flags, alltrade.price,
alltrade.qty, alltrade.value, alltrade.period}
CCS.AllTrade2DB(at)
--message(«Обезлич сделка end »… alltrade.sec_code)
end
end
Если почитать Р.Иерузалимски, то Lua не самостоятельный язык, а язык расширяемый и расширяющий. Т.е., он изначально разрабатывался не для самостоятельного применения, а для взаимодействия с другими программами.
В общем, я этой концепции и придерживаюсь, Луа обеспечивает только передачу данных в ПО и взаимодействие ПО с терминалом. Вся обработка на стороне, в нормальных средах программирования с большими возможностями.