Сергей ВАТ (Все сообщения пользователя)

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

Страницы: 1
Нужна помощь . торговым алгоритмом
 
Всем привет. Нужна  помощь, так как сам не могу дать ума. Алгоритм выставляет 1 ордер.
а мне надо чтоб он сразу выставил много заявок на покупку но каждая следующая с мешалась на 10 пунктов от последней и всё это на покупку.




Вот алгоритм.


stopped = false
function OnStop()
stopped = true
return 5000
end

Kod_klienta = "10800"; -- нужно поставить свое значение
Torg_schet = "NL0011100043"; -- нужно поставить свое значение
CLASS_CODE = "QJSIM" -- Код класса
SEC_CODE = "SPBE" -- Код бумаги
Kod_FirM = "NC0011100000" -- Код фирмы



function main()

local SER = getParamEx("QJSIM", "SPBE", "LAST").param_value
while SER  do
sendTransaction(SER)
       sleep (10000)

local Sena = getParamEx("QJSIM", "SPBE", "LAST").param_value


local podgot={
ACCOUNT = Torg_schet ,
CLIENT_CODE=Kod_klienta,
TYPE="L",
TRANS_ID="1",
CLASSCODE=CLASS_CODE,
SECCODE=SEC_CODE,
ACTION="NEW_ORDER",
OPERATION="B",
PRICE= tostring(Sena -(1)),
QUANTITY="1"
}

while podgot   do

if sendTransaction(podgot)

then break; end;

end
end
end
Помощь.
 
Здравствуйте. Помогите понять в чем причина.  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
 
Цитата
nikolz написал:
Цитата
Сергей ВАТ написал:
Здравствуйте. Я новичок в программирование, строго не ругаться :-)
Возник такой вопрос.
можно-ли заставить функцию обновлять данные и как это сделать?  Функция находиться до основного тела скрипта.
Все что вне функции main, кроме колбеков, исполняется один раз.
Перенесите функцию внутрь цикла в main.
Вот сам скрипт.

stopped = false
function OnStop()
stopped = true
return 5000
end

Kod_klienta = "10265"; -- нужно поставить свое значение
Torg_schet = "NL0011100043"; -- нужно поставить свое значение
CLASS_CODE = "QJSIM" -- Код класса
SEC_CODE = "SPBE" -- Код бумаги

local Sena = getParamEx("QJSIM", "SPBE", "LAST").param_value -- цена последней сдел


podgot={
ACCOUNT=Torg_schet,
CLIENT_CODE=Kod_klienta,
TYPE="L",
TRANS_ID="1",
CLASSCODE=CLASS_CODE,
SECCODE=SEC_CODE,
ACTION="NEW_ORDER",
OPERATION="B",
PRICE= tostring(Sena -(1)),
QUANTITY="1"
}  



function main()


while podgot   do

sendTransaction(podgot)
sleep (10000)


end
end
Функции для получения значений Таблицы текущих торгов, getParamEx, Как обновлять данные через функцию. getParamEx
 
Цитата
nikolz написал:
Цитата
Сергей ВАТ написал:
Здравствуйте. Я новичок в программирование, строго не ругаться :-)
Возник такой вопрос.
можно-ли заставить функцию обновлять данные и как это сделать?  Функция находиться до основного тела скрипта.
Все что вне функции main, кроме колбеков, исполняется один раз.
Перенесите функцию внутрь цикла в main.
Пробовал.  
Функции для получения значений Таблицы текущих торгов, getParamEx, Как обновлять данные через функцию. getParamEx
 
Здравствуйте. Я новичок в программирование, строго не ругаться :-)
Возник такой вопрос.
Воспользовался функцией getParamEx("QJSIM", "SPBE", "LAST").param_value -- цена последней сдел. При первом запуске скрипта она нашла данные. Но в дальнейшем, при изменение цены не работает. Ссылается на первые данные которые получила.  От сюда вопрос можно-ли заставить функцию обновлять данные и как это сделать?  Функция находиться до основного тела скрипта.
 
Страницы: 1
Наверх