Отменить цикличность появления сообщения

Страницы: 1
RSS
Отменить цикличность появления сообщения
 
Добрый день.

Пишу простой код на Lua. Задача: при выполнении определённых условий высвечивать на экране сообщение "Возможна сделка в бай, ...".
Столкнулся с проблемой: окно сообщения появляется на экране каждые 5 секунд (и то только благодаря тому, что добавлена в код строка "sleep (5000)").
Вопрос: как прописать код, чтобы сообщение появлялось либо раз в N минут (но тогда именно сразу после открытия новой свечи), либо просто появлялось всего один раз на каждое условие, а не зацикливалось по кругу?

Фрагмент кода привожу ниже:

function Body()


Problem = ""

sleep (20000)

local TransCount = 0
local PosNow = PosNowFunc(Emit,MyAccount)
local Signal = SignalCheck()
local OtlPos = OtlPosFunc (Emit,MyAccount)

local NumOfCandlesM1 = getNumCandles (graphic_id)
local t, n, _ = getCandlesByIndex(graphic_id, 0, NumOfCandlesM1-3, 3)

if (Signal==1) and (OtlPos==0) and (PosNow==0) and (t[1].high-t[1].low)>=60 then
message ("Возможна сделка в бай")
end

--M1
local N1=getNumCandles(graphic_id)
   local t1,n1,l1=getCandlesByIndex(graphic_id, 0, N1-2, 2)
end
 
Небольшая корректировка: сейчас в коде прописано sleep (20000), то есть сообщение появляется раз в 20 секунд.
 
Цитата
Олег написал:
Небольшая корректировка: сейчас в коде прописано  sleep (20000) , то есть сообщение появляется раз в 20 секунд.
в цикле читайте системное время и вычисляйте требуемый интервал
при его наступлении выводите сообщение. Таким образом получите интервал от 1 секунды до 100 лет.
 
Цитата
Олег написал:
Вопрос: как прописать код, чтобы сообщение появлялось либо раз в N минут (но тогда именно сразу после открытия новой свечи)
Примерно так можно выдавать сообщение не чаще чем раз в N секунд
Код
delta=5 -- время задержки в секундах
is_run=true
function main()
  while is_run do
    if(os.time()>=(last or 0)+delta)then last=os.time() message("Чпок раз в "..delta.." секунд") end
    sleep(100)
  end
end
function OnStop()
  is_run=false
end
условие появления  новой свечи, сами добавите, мне писать лень


Цитата
Олег написал:
либо просто появлялось всего один раз на каждое условие, а не зацикливалось по кругу?
А в таком случае надо сохранять предыдущие условия и добавить проверку на из изменение этих условий
 
Сделайте замыкание функцию с встроенным таймером, выводящую сообщения.
Сможете создавать разные экземпляры на разный интервал. Не будет лишних локальных, а тем более глобальных переменных.

sleep - это заморозить поток, чаще всего это не так и надо выполнять остальные действия.
 
Благодарю Вас за ответы.
Страницы: 1
Читают тему
Наверх