Здравствуйте. Помогите понять в чем причина. 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
(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