Сергей ВАТ (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Помощь.
 
Здравствуйте. Помогите понять в чем причина.  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
Наставник., Ищу наставника.
 
Здравствуйте. Ищу наставника по созданию торгового робота или компаньона. Со знанием языка луа. Хочу создать робота по торговле на фондовом рынке. Буду очень благодарен за отзывчивость.
Функции для получения значений Таблицы текущих торгов, getParamEx, Как обновлять данные через функцию. getParamEx
 
Здравствуйте. Я новичок в программирование, строго не ругаться :-)
Возник такой вопрос.
Воспользовался функцией getParamEx("QJSIM", "SPBE", "LAST").param_value -- цена последней сдел. При первом запуске скрипта она нашла данные. Но в дальнейшем, при изменение цены не работает. Ссылается на первые данные которые получила.  От сюда вопрос можно-ли заставить функцию обновлять данные и как это сделать?  Функция находиться до основного тела скрипта.
 
Страницы: 1
Наверх