а так не проще будет?
на график ставим метку, получаем sec_code напрямую с графика без всяких там поисков базового контракта:
function GetParameters(idgraf)
-- Получаем данные по легенде графика
-- Получаем sec_code с графика цены
-- возвращаем string class_code, string sec_code, table t (таблица OHLCVT последнего бара (1ый справа)), price_step
-- использование:
--[[
local classcode, seccode, bars, price_step = GetParameters(idgraf)
if classcode == nil then
msg("Проверить метку " .. tostring(idgraf) .. " на графике") -- todo
OnStop()
return
else
msg("classcode " .. tostring(classcode))
msg("seccode " .. tostring(seccode))
msg("price_step " .. tostring(price_step))
end
--]]
---
local lastbar = getNumCandles(idgraf) -- получаем номер последнего бара (1ый справа)
local t, _, legend = getCandlesByIndex(idgraf, 0, lastbar - 1, 1) -- получаем данные бара (таблицу OHLCVT, легенду графика). lastbar - 1 - потому что считаем от 0 до n - 1.
legend = string.sub(legend, 1, -9) -- обрезка " [Price]" в легенде графика
local txt = "securities" -- перебираем таблицу с инструментами
local n = getNumberOf(txt) -- получаем количество инструментов
for i = 0, n - 1 do
local data = getItem(txt, i)
if data.short_name == legend then
-- data.class_code -> classcode
-- data.sec_code -> seccode
-- t[0] -> OHLCVT (.open, .close, .high, .volume, . datetime --{})
-- data.min_price_step -> price_step
return data.class_code, data.sec_code, t[0], removeZero(data.min_price_step)
end
end
return nil
end
function msg(txt) -- сообщение
-- ф-ция вывода сообщений
-- данные приводятся к строке, выводится сообщение с треугольником '!'
---
message(tostring(txt), 2)
end
на график ставим метку, получаем sec_code напрямую с графика без всяких там поисков базового контракта:
function GetParameters(idgraf)
-- Получаем данные по легенде графика
-- Получаем sec_code с графика цены
-- возвращаем string class_code, string sec_code, table t (таблица OHLCVT последнего бара (1ый справа)), price_step
-- использование:
--[[
local classcode, seccode, bars, price_step = GetParameters(idgraf)
if classcode == nil then
msg("Проверить метку " .. tostring(idgraf) .. " на графике") -- todo
OnStop()
return
else
msg("classcode " .. tostring(classcode))
msg("seccode " .. tostring(seccode))
msg("price_step " .. tostring(price_step))
end
--]]
---
local lastbar = getNumCandles(idgraf) -- получаем номер последнего бара (1ый справа)
local t, _, legend = getCandlesByIndex(idgraf, 0, lastbar - 1, 1) -- получаем данные бара (таблицу OHLCVT, легенду графика). lastbar - 1 - потому что считаем от 0 до n - 1.
legend = string.sub(legend, 1, -9) -- обрезка " [Price]" в легенде графика
local txt = "securities" -- перебираем таблицу с инструментами
local n = getNumberOf(txt) -- получаем количество инструментов
for i = 0, n - 1 do
local data = getItem(txt, i)
if data.short_name == legend then
-- data.class_code -> classcode
-- data.sec_code -> seccode
-- t[0] -> OHLCVT (.open, .close, .high, .volume, . datetime --{})
-- data.min_price_step -> price_step
return data.class_code, data.sec_code, t[0], removeZero(data.min_price_step)
end
end
return nil
end
function msg(txt) -- сообщение
-- ф-ция вывода сообщений
-- данные приводятся к строке, выводится сообщение с треугольником '!'
---
message(tostring(txt), 2)
end