05k.ru

getParamEx возвращает 0, хотя цена есть

QUIK · Mr.DeFolt

M
Mr.DeFoltавтор темы02.11.2026 19:42

Всем привет! робот на луа берет цену так

lua
local p = getParamEx("SPBFUT","SiZ6","LAST").param_value

и через раз приходит 0, причем в таблице текущих цена нормальная. если скрипт перезапустить то все ок. подскажите, что я делаю не так?

Ю
Южный02.11.2026 23:08

Приветствую. isConnected() == 1 проверяешь перед getParamEx?

M
Mr.DeFoltавтор темы03.11.2026 09:51

нет, не проверяю. скрипт в автозапуске стоит, стартует вместе с терминалом. то есть надо в начале ждать пока isConnected не станет 1?

Ю
Южный03.11.2026 12:17· изменено 03.11.2026 12:18

Надо проверять, подключён ли терминал вообще. Хотя, он по идее что в таблице должен отдать всё равно. Ещё можешь проверять result: "1" у getParamEx. Вот так например:

lua
function price(class, sec)
    if isConnected() ~= 1 then return nil end
    local p = getParamEx(class, sec, "LAST")
    if not p or p.result ~= "1" then return nil end
    local v = tonumber(p.param_value)
    if not v or v <= 0 then return nil end
    return v
end
M
Mr.DeFoltавтор темы03.11.2026 15:36

спасибо, сделал так. нули больше не приходят. но заметил что если закрыть таблицу текущих торгов, то result всегда 0 и цены вообще нет. ее что, обязательно держать открытой?

Ю
Южный03.11.2026 18:04

Если не хочешь держать таблицу открытой, то нужно сначала заказать данные через ParamRequest вот так

lua
local CLASS, SEC = "SPBFUT", "SiZ6"
local PARAMS = { "LAST", "BID", "OFFER" }
local running = true

function OnStop()
  running = false
  for _, name in ipairs(PARAMS) do
    CancelParamRequest(CLASS, SEC, name)
  end
end

function main()
  -- заказываем параметры: таблица «Текущие торги» больше не нужна
  for _, name in ipairs(PARAMS) do
    ParamRequest(CLASS, SEC, name)
  end

  while running do
    if isConnected() == 1 then
      local p = getParamEx(CLASS, SEC, "LAST")
      local last = p and p.result == "1" and tonumber(p.param_value)
      if last and last > 0 then
        -- цена есть, работаем
      end
    end
    sleep(500)
  end
end
M
Mr.DeFoltавтор темы03.11.2026 20:12

заработало, таблицу закрыл, цена идет. спасибо! а bid и offer тоже так брать через getParamEx или для них лучше стакан подписывать?

Ю
Южный03.11.2026 22:54

Лучше через getParamEx бери, на стакан надо подписываться через Subscribe_Level_II_Quotes и getQuoteLevel2. Геморрой ещё тот :wall:

M
Mr.DeFoltавтор темы03.11.2026 23:09

спасибо за помощь :good:

Войдите, чтобы ответить