Помощь.

Страницы: 1
RSS
Помощь.
 
Здравствуйте. Помогите понять в чем причина.  Quik ругается на эту строчку.

(return math.floor (num * mult + 0.5) / mult)
attempt to perform arithmetic on a nil value (local 'num')


ACCOUNT              = 'NL0011100043'   -- Код счета
CLASS_CODE           = 'QJSIM'        -- Код класса
SEC_CODE             = 'SPBE'          -- Код инструмента
trans_id             = os.time()       -- ID транзакции
qty = '1'
operation= 'B'
Kod_klienta = "10265"; -- нужно поставить свое значение


-- Округляет число до указанной точности
math_round = function (num, idp)
 local mult = 10^(idp or 0)
 return math.floor (num * mult + 0.5) / mult
end


-- Приводит переданную цену к требуемому для транзакции по инструменту виду
GetCorrectPrice = function(price) -- STRING
  -- Получает точность цены по инструменту
  local scale = getSecurityInfo(CLASS_CODE, SEC_CODE).scale
  -- Получает минимальный шаг цены инструмента
  local PriceStep = tonumber(getParamEx(CLASS_CODE, SEC_CODE, "SEC_PRICE_STEP").param_value)
  -- Если после запятой должны быть цифры
  if scale > 0 then
     price = tostring(price)
     -- Ищет в числе позицию запятой, или точки
     local dot_pos = price:find('.')
     local comma_pos = price:find(',')
     -- Если передано целое число
     if dot_pos == nil and comma_pos == nil then
        -- Добавляет к числу ',' и необходимое количество нулей и возвращает результат
        price = price..','
        for i=1,scale do price = price..'0' end
        return price
     else -- передано вещественное число        
        -- Если нужно, заменяет запятую на точку
        if comma_pos ~= nil then price:gsub(',', '.') end
        -- Округляет число до необходимого количества знаков после запятой
        price = math_round(tonumber(price), scale)
        -- Корректирует на соответствие шагу цены
        price = math_round(price/PriceStep)*PriceStep
        price = string.gsub(tostring(price),'[%.]+', ',')
        return price
     end
  else -- После запятой не должно быть цифр
     -- Корректирует на соответствие шагу цены
     price = math_round(price/PriceStep)*PriceStep
     return tostring(math.floor(price))
  end
end



  -- Выставляет заявку
  -- Получает ID для следующей транзакции
  trans_id = trans_id + 1
  -- Заполняет структуру для отправки транзакции
  local T = {}
  T['CLIENT_CODE']= Kod_klienta
  T['TRANS_ID']   = tostring(trans_id)     -- Номер транзакции
  T['ACCOUNT']    = ACCOUNT                -- Код счета
  T['CLASSCODE']  = CLASS_CODE             -- Код класса
  T['SECCODE']    = SEC_CODE               -- Код инструмента
  T['ACTION']     = 'NEW_ORDER'            -- Тип транзакции ('NEW_ORDER' - новая заявка)      
  T['TYPE']       = 'L'                    -- Тип ('L' - лимитированная, 'M' - рыночная)
  T['OPERATION']  = operation              -- Операция ('B' - buy, или 'S' - sell)
  T['PRICE']      = GetCorrectPrice(price) -- Цена
  T['QUANTITY']   = tostring(qty)          -- Количество
 
function main()
  -- Отправляет транзакцию
  local Res = sendTransaction(T)
  -- Если при отправке транзакции возникла ошибка
  if Res ~= '' then
 -- Выводит сообщение об ошибке
 message('Ошибка транзакции открытия/закрытия: '..Res)
  end
end
 
Так сам квик сообщает что переменная num имеет значение nil.

очевидно что price == nil
Страницы: 1
Читают тему
Наверх