суть задачи состоит в том ,что нужно во множестве инструментов взять свечку(данные) из прошлого и обработать в цикле все инструменты беря по одной свече. И так нужно прошерстить всю историю.
Сейчас реализовано это так:
function main()
while is_run do
sleep(10000) -- по сути это блок проверки на получение новых свечек через каждые 10сек
for i=1, кол-во новых свечек (глубина просмотра инструментов) do
for j=1, #mas do -- mas массив инстркментов
f(класс, инст.mas[j] , время итой свечи, INTERVAL_H1)
end
end
end
end
function f(class, sec_code, time_b, INTERVAL_H1)
local close_b,oi=0,0
local ds_price=CreateDataSource(class, sec_code, INTERVAL_H1)
--ds_opt_price:SetEmptyCallback()
sleep(100)
local ds_oi=CreateDataSource(class, sec_code, INTERVAL_H1, "NUMCONTRACTS")
-- ds_oi:SetEmptyCallback()
sleep(100)
local time_candle=tostring(ds_price:T(1).year)..Chisla(ds_price:T(1).month)..Chisla(ds_price:T(1).day)..Chisla(ds_price:T(1).hour)..Chisla(ds_price:T(1).min).."00"
if tonumber(time_candle)>tonumber(time_b) then
-- свечей нет
else
for i=1 , tonumber(ds_price:Size()) do
time_candle=tostring(ds_price:T(i).year)..Chisla(ds_price:T(i).month)..Chisla(ds_price:T(i).day)..Chisla(ds_price:T(i).hour)..Chisla(ds_price:T(i).min).."00"
if tonumber(time_b)>=tonumber(time_candle) then
close_b=ds_price:C(i)
else
break
end
end
for i=1 , ds_oi:Size() do
time_candle=tostring(ds_oi:T(i).year)..Chisla(ds_oi:T(i).month)..Chisla(ds_oi:T(i).day)..Chisla(ds_oi:T(i).hour)..Chisla(ds_oi:T(i).min).."00"
if tonumber(time_b)>=tonumber(time_candle) then
oi=ds_oi:C(i)
else
break
end
end
end
ds_opt_price:Close()
ds_opt_oi:Close()
return close_b,oi
end
В массиве mas около 200 интсрументов и проходит около 10 свечек по всем инст. и через какое-то время Quik перестает обновлять котировки, стакан. Возникает ощущение ,что он в дисконнекте , но пишет ,что коннект есть.
Вопрос как получить предыдущие данные по большому кол-ву инст. и не положить Quik?
Сейчас реализовано это так:
function main()
while is_run do
sleep(10000) -- по сути это блок проверки на получение новых свечек через каждые 10сек
for i=1, кол-во новых свечек (глубина просмотра инструментов) do
for j=1, #mas do -- mas массив инстркментов
f(класс, инст.mas[j] , время итой свечи, INTERVAL_H1)
end
end
end
end
function f(class, sec_code, time_b, INTERVAL_H1)
local close_b,oi=0,0
local ds_price=CreateDataSource(class, sec_code, INTERVAL_H1)
--ds_opt_price:SetEmptyCallback()
sleep(100)
local ds_oi=CreateDataSource(class, sec_code, INTERVAL_H1, "NUMCONTRACTS")
-- ds_oi:SetEmptyCallback()
sleep(100)
local time_candle=tostring(ds_price:T(1).year)..Chisla(ds_price:T(1).month)..Chisla(ds_price:T(1).day)..Chisla(ds_price:T(1).hour)..Chisla(ds_price:T(1).min).."00"
if tonumber(time_candle)>tonumber(time_b) then
-- свечей нет
else
for i=1 , tonumber(ds_price:Size()) do
time_candle=tostring(ds_price:T(i).year)..Chisla(ds_price:T(i).month)..Chisla(ds_price:T(i).day)..Chisla(ds_price:T(i).hour)..Chisla(ds_price:T(i).min).."00"
if tonumber(time_b)>=tonumber(time_candle) then
close_b=ds_price:C(i)
else
break
end
end
for i=1 , ds_oi:Size() do
time_candle=tostring(ds_oi:T(i).year)..Chisla(ds_oi:T(i).month)..Chisla(ds_oi:T(i).day)..Chisla(ds_oi:T(i).hour)..Chisla(ds_oi:T(i).min).."00"
if tonumber(time_b)>=tonumber(time_candle) then
oi=ds_oi:C(i)
else
break
end
end
end
ds_opt_price:Close()
ds_opt_oi:Close()
return close_b,oi
end
В массиве mas около 200 интсрументов и проходит около 10 свечек по всем инст. и через какое-то время Quik перестает обновлять котировки, стакан. Возникает ощущение ,что он в дисконнекте , но пишет ,что коннект есть.
Вопрос как получить предыдущие данные по большому кол-ву инст. и не положить Quik?