"Засыпание" скриптов

Страницы: 1
RSS
"Засыпание" скриптов, Имею три работающих скрипта на Lua, которые периодически (раз в пару дней кто-нибудь из них точно) "засыпают"
 
Здравствуйте!

Имею три работающих скрипта на Lua, которые периодически (раз в пару дней кто-нибудь из них точно) "засыпают" - перестают выдавать проверочные сообщения, но на другие "раздражители" реагируют. (фото 2 - нормальная работа, фото 1 - "засыпание")

Основная проблема в том, что, если сделка случается в таком состоянии скрипта, она всегда заканчивается кучей сообщений с ошибками (типа:  Не могу снять стоп-заявку. Пришел статус 4. и подобными). Хотя в нормальном состоянии скрипта сделки проходят корректно.

Сам скрипт достаточно большой - вот самое парадоксальное место: как видно на фото скрипт игнорирует сообщение каждые 15 минут, но реагирует на закрытие торгового дня !

обе функции так и стоят рядом, в корне основного потока. Ни на какие дополнительные условия не завязаны.



Буду признателен за любую помощь в решении этой загадки
Код
--===============================================
 
   if Here == 0 then  --- сообщение каждые 15 минут. с запомнеными параметрами 
      Here = math.floor(os.clock())
      
   elseif math.floor(os.clock()) == Here + 900 then 
      Here = math.floor(os.clock())
      message ("SBER. I`m here! every 15 min", 1)
      
      message("StartUP - "..tostring(StartUP), 1)
      message("tp[0].open - "..tostring(tp[0].open), 1)
      
      message("StartDOWN - "..tostring(StartDOWN), 1)
      sleep(50)
      
   end
--===============================================   
-- проверка TIME
   local Time = integer
   dt = os.date()        -- системная функция времени/даты
    ddt = string.sub(dt, 10, 14)    -- берем нужные графы
    if ddt == "18:44" then Time = 1      -- тут ставим время выхода из позиций LastOpenBarIndex = DS:Size()
      while Time == 1 do
         to_log("trade day ends ".." close "..tostring(count).." lot(s)")
         message ("SBER trade day ends ".." close "..tostring(count).." lot(s)",1)
         if count > 0 then
            Trade("S",count,lastPrice-p_spread) 
            count = 0
            stv.SetVar("count", 0) 
            if SP == 1 then
               Rem_ST_TP(ST_orderNum)
            end
         end   
         if count < 0 then
            Trade("B",math.abs(count),lastPrice+p_spread)
            count = 0
            stv.SetVar("count", 0) 
            if SP == 1 then
               Rem_ST_TP(ST_orderNum)
            end
         end
         Time = 0
         sleep(900000)  -- 15 минут спим,чтобы недопустить вход до конца торг. сессии
      end
   elseif ddt == "10:00" then
      LastOpenBarIndex = DS:Size()
   end   
 
могу предположить такую проблему:

если в момент проверку
elseif math.floor(os.clock()) == Here + 900 then

время перескочит на одну лишнюю секунду, то результат проверку будет False

Может стоит попробовать сделать:

elseif math.floor(os.clock()) > Here + 900 then
 
Возможно, но вероятность не очень велика..
20 попыток в течение секунды есть у скрипта.. Да и закрытие дня проходит без опозданий.

Возможно периодическое "подвисание" терминала на несколько секунд? Это бы объяснило ошибки с перестановкой и снятием стопов..

как с этим принято бороться?
 
Sergey Denegin, хотя, это, наверное, единственное разумное объяснение..

Не знаете какая пауза должна быть в соединении, чтобы is_connected показало false ?
 
Цитата
Сергей Качурин написал:

Возможно периодическое "подвисание" терминала на несколько секунд? Это бы объяснило ошибки с перестановкой и снятием стопов.
нет, если только вы его скриптом не завешиваете. Ну и как виндовс себя чувствует в целом?
Цитата
как с этим принято бороться

находить и исправлять ошибки в скриптах
 
Если я правильно понял, то закрытие дня у вас проверяется вот так:

if ddt == "18:44" then Time = 1  

т.е. робота целая минута, чтобы это событие совпало.

А у предыдущей проверки - есть только секунда, чтобы условие совпало.  
Страницы: 1
Читают тему
Наверх