1 (2015-03-05 11:38:58 отредактировано ascerdfg)

Тема: Вставил задержку sleep() - терминал вылетает. Почему?!

Подскажите плиз, вот так работает:

-- Вывод в сообщение цены последней сделки, если она Si-3.15

p_seccode="SiH5" --Код инструмента Si-3.15

is_run=true


function trad() -- функция выставление заявки

t = {

            ["CLASSCODE"]="SPBFUT",

            ["SECCODE"]="SiH5",

            ["ACTION"]="NEW_ORDER",

            ["ACCOUNT"]="41100хх",

            ["CLIENT_CODE"]="653хх",

            ["TYPE"]="L",
            
            ["OPERATION"]="B",

            ["QUANTITY"]="1",

            ["PRICE"]="62200",

            ["TRANS_ID"]="1",

      }
      
      res=sendTransaction(t)

end

function delet_order()

t = {

            ["CLASSCODE"]="SPBFUT",

            ["SECCODE"]="SiH5",

            ["ACTION"]="KILL_ALL_FUTURES_ORDERS",
            
            ["ACCOUNT"]="41100хх",

            ["CLIENT_CODE"]="653хх",

        ["BASE_CONTRACT"]="Si",

            ["TRANS_ID"]="1",

      }

      res=sendTransaction(t)

end



function main()

      while is_run do

            sleep(2000)

      end

end

function OnStop(stop_flag)

      is_run=false

end


function OnAllTrade(alltrade) -- табличные данные 

    if tostring(alltrade["sec_code"])==p_seccode then -- tostring - переводим в строковые данные 

        message(tostring(alltrade["price"].." code="..alltrade["sec_code"]))
        
    end

end

А если я вставляю паузу:

...
        message(tostring(alltrade["price"].." code="..alltrade["sec_code"]))
        sleep(1000)
    end
end

то терминал КВИК вылетает.

2 (2016-09-29 11:25:35 отредактировано sam063rus)

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

-

3

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

sam063rus ловко догадался, без иронии!

В самом деле - наверняка у терминала просто достаточно быстро кончается память, ведь всех сделок поступает очень много - а терминал их не может обрабатывать из-за Sleep.

4 (2016-09-29 11:26:15 отредактировано sam063rus)

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

-

5 (2016-09-29 11:26:28 отредактировано sam063rus)

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

-

6 (2015-03-05 20:45:04 отредактировано ascerdfg)

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

Спасибо, пришлось пихать в цикл main()

-- Вывод в сообщение цены последней сделки, если она Si-3.15

p_seccode="SiH5" --Код инструмента Si-3.15

is_run=true

function trad(price_s)

t = {

            ["CLASSCODE"]="SPBFUT",

            ["SECCODE"]="SiH5",

            ["ACTION"]="NEW_ORDER",

            ["ACCOUNT"]="41100JB",

            ["CLIENT_CODE"]="65399",

            ["TYPE"]="L",
            
            ["OPERATION"]="B",

            ["QUANTITY"]="1",

            ["PRICE"]=tostring(price_s),
            
            ["TRANS_ID"]="1",

      }
      
      res=sendTransaction(t)

end

function delet_order()

t = {

            ["CLASSCODE"]="SPBFUT",

            ["SECCODE"]="SiH5",

            ["ACTION"]="KILL_ALL_FUTURES_ORDERS",
            
            ["ACCOUNT"]="41100JB",

            ["CLIENT_CODE"]="65399",

            ["BASE_CONTRACT"]="Si",

            ["TRANS_ID"]="1",

      }

      res=sendTransaction(t)

end


function main()

      while is_run do

            sleep(1000)

            trad(price_s) --ставим заявку

            sleep(8000)
            
            delet_order() -- удаляем все заявки

      end

end

function OnStop(stop_flag)

      is_run=false

end


function OnAllTrade(alltrade) -- табличные данные 

    if tostring(alltrade["sec_code"])==p_seccode then -- tostring - переводим в строковые данные 

        message(tostring(alltrade["price"].." code="..alltrade["sec_code"]))
    end

end

А если я хочу получать сообщения с задержкой 8 секунд

...
function main()

   while is_run do

      sleep(8000)
            
      function OnAllTrade(alltrade) -- табличные данные 

         if tostring(alltrade["sec_code"])==p_seccode then 

            message(tostring(alltrade["price"]))
    
          end

      end

   end

end

function OnStop(stop_flag)

      is_run=false

end

Скрипт ничего не выводит. Как правильно написать?

7 (2016-09-29 11:26:36 отредактировано sam063rus)

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

-

8

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

А просто цикл, не в коллбэке можно организовать? А в нём уже всю программу разместить...

9

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

ascerdfg пишет:

А если я хочу получать сообщения с задержкой 8 секунд

Можно поместить цикл внутри main() и там читать таблицу с именем "all_trades" через функции getItem, getOrderByNumber, getNumberOf и SearchItems
При чтении находить сделки со временем отстающим на 8 секунд - и их выводить.

Никакого OnAllTrades() тогда и не нужно.

Только не понятно зачем такое может понадобиться?

10

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

Похоже что пауза работает только в "майн" и это единственное решение.

11

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

p_file=io.open("D:\\Program Files\\Lua\\1\\log.txt", "w") -- Тут поставите нужный вам путь

is_run=true

function main()
    while is_run do
        sleep(1100)
        p_file:write(os.date().." заявка ".."\n")
    end
end


function OnStop(stop_flag) 
    is_run=false
    -- p_file:close()
end

а если раскоментить строку -- p_file:close(), то квик ругается. Почему?

12 (2016-09-29 11:46:11 отредактировано sam063rus)

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

-

13

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

а может просто не использовать p_file:close() ?

14 (2016-09-29 11:46:00 отредактировано sam063rus)

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

-

15

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

ascerdfg пишет:
----
function OnStop(stop_flag) 
    is_run=false
    -- p_file:close()
end

а если раскоментить строку -- p_file:close(), то квик ругается. Почему?

сделайте так:

function OnStop(stop_flag) 
    is_run=false
    if p_file then
       p_file:close()
    end
end

16

Re: Вставил задержку sleep() - терминал вылетает. Почему?!

sam063rus пишет:
ascerdfg пишет:

а может просто не использовать p_file:close() ?

а может:
вообще не открывать файл и не писать туда?

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