Робот-сканер нескольких инструментов в Quik Lua

Страницы: 1
RSS
Робот-сканер нескольких инструментов в Quik Lua
 
Всем добрый день.

Есть такой код Lua, который работает только по одному инструменту: при запуске в Quik смотрит цену открытия и закрытия, и если цена закрытия становится больше цены открытия на 5%, то покупает по рынку 1 лот.

Подскажите, пожалуйста, что добавить в скрипт, чтобы можно было запустить его один раз, чтобы постоянно мониторил цену, пока не отключишь его.
А если необходимо сканировать несколько инструментов, например, SIBN, SBER, как нужно изменить скрипт?

Код
stopped = false
function OnStop()
   stopped = true
   return 5000
end

function main()
   ticker = "SIBN"
   ds1, err = CreateDataSource("TQBR", ticker, INTERVAL_D1);
   sleep(400)
   CandleNum = ds1:Size()
   PriceC = ds1:C(CandleNum)
   PriceO = ds1:O(CandleNum)
   
   if PriceC > PriceO * 1.05 then -- Если цена закрытия становится больше цены открытия на 5%, то покупаем по рынку 1 лот
      
      A = {
         ACTION = 'NEW_ORDER',
         ACCOUNT = 'xxxxxxxxxxx',
         OPERATION = 'B', -- 'B' - покупка, 'S' - продажа
         CLASSCODE = 'TQBR', 
         SECCODE = ticker, 
         PRICE = tostring(0), 
         QUANTITY = tostring(1), -- количество лотов
         TRANS_ID = tostring(1000), -- идентификатор транзакции, чтобы программа распознавала транзакции, когда много сделок
         TYPE = 'M'
      }
      Err_A = sendTransaction(A)
      message("error: "..Err_A)
   end   
end


Я начал изучать Lua на прошлой неделе, поэтому мой уровень почти нулевой. Буду благодарен, если дадите какие-либо наводки, что изучать.
 
Цитата
Алексей А. написал:
Подскажите, пожалуйста, что добавить в скрипт, чтобы можно было запустить его один раз, чтобы постоянно мониторил цену, пока не отключишь его.
Если вкратце, то
Добавить цикл который будет крутить майн пока не остановите
Добавить цикл перебора инструментов
Добавить 100500 проверок, чтобы скрипт не скупил все растущие бумаги на все деньги ))
 
Спасибо за ответ. С "вечным циклом" и проверками разобрался.
Не подскажете, при помощи чего можно сделать цикл перебора инструментов?
 
Алексей А., Как и любой другой цикл: for или while, можно даже goto, хотя это уже извращение.
 
Цитата
Алексей А. написал:
Не подскажете, при помощи чего можно сделать цикл перебора инструментов?
Да хотя бы так
Код
instruments={{"class1","sec1"},{"class2","sec2"},{"class3","sec3"},{"class4","sec4"}}
for _,val in ipairs(instruments) do
   message(val[1].." "..val[2])
end

Цитата
Алексей А. написал:
С "вечным циклом" и проверками разобрался.
Разобрался, говорите?
На счет проверок вас впереди ждет не мало "сюрпризов", скоро это поймете.
 
Цитата
Владимир написал: for или while, можно даже goto, хотя это уже извращение.
Спасибо, нашел по ним информацию, изучаю.
 
Цитата
BlaZed написал:
instruments={{"class1","sec1"},{"class2","sec2"},{"class3","sec3"},{"class4","sec4"}}
for _,val in ipairs(instruments) do
  message(val[1].." "..val[2])
end
Не смог понять, как работает pair или ipairs, если много массивов...
Поэтому сделал так:

Код
function main ()
   ticker = {"AFKS", "AFLT", "AGRO"}
   lot = {"1", "1", "1"}
   pricestep = {"0.001", "0.01", "0.2"}
   trans_id = {os.time()+1, os.time()+2, os.time()+3}
      
   for i = 1, #ticker do
      ds = CreateDataSource("TQBR", ticker[i], INTERVAL_D1);
      sleep(400) 
      CandleNum = ds:Size()
      priceO = ds:O(CandleNum)
      orderprice = priceO * 1.05 - priceO * 1.05%pricestep[i]
      
      message ("Тикер "..ticker[i]..". Количество лотов: "..lot[i]..". Шаг цены: "..pricestep[i]..". Номер транзакции: "..trans_id[i]..". Цена: "..orderprice)
   end
   
   -- и дальше код ........
end
 
Цитата
Алексей А. написал:
Не смог понять
Блин, это ж так прост оказалось))))))
Код
   instruments={{"AFKS", 1, 0.001, os.time()+1}, {"AFLT", 1, 0.01, os.time()+2}, {"AGRO", 1, 0.2, os.time()+3}}
   for _,val in ipairs(instruments) do
      message(val[1].." "..val[2].." "..val[3].." "..val[4])
   end
Страницы: 1
Читают тему
Наверх