Блог им. DEVOTEE

Автоматизация QUIK - Сигнал начала нового таймфрейма

Тут уже проскочило пару постов на тему автоматизации. За что авторам спасибо.
У меня же вопрос и задача такая (к знатокам LUA).

Есть скрипт взят отсюда (https://quik2dde.ru/viewtopic.php?id=79)
-- подключить библиотеку w32
local w32 = require("w32")

-- функция проигрывания файла
-- вызов: PaySoundFile("имя файла")
function PaySoundFile(file_name)
  w32.mciSendString("CLOSE QUIK_MP3") 
  w32.mciSendString("OPEN \"" .. file_name .. "\" TYPE MpegVideo ALIAS QUIK_MP3")
  w32.mciSendString("PLAY QUIK_MP3")
end


Необходимо добавить в скрипт, чтобы звуковой файл проигрывался с заданным интервалом всю торговую сессию? (каждые 15,60,240минут)
Буду благодарен и не только я, если «добавите в рецепт свои пряности». Главное чтобы заработало.
Спасибо.
★3
17 комментариев
s = getInfoParam («SERVERTIME») 
if tonumber(string.sub(s,4,5)) == 0 then
    PaySoundFile(file_name)
end

Будет запускаться каждый час. По аналогии напишите остальные.
avatar
Karim, Karim, Спасибо за ответ. Можно хотя бы минимальную инструкцию? для аналогии:).
avatar
Karim, S — присваиваем время сервера. ДА?
Paysound — играем файл. В пути используем двойной слэш (C:\\QUIK OSL\\Звуки\\Bell.mp3 — так?)
А вот tonumber :). Помощь плиз

avatar
Виталий, Ну почитайте хотя бы мануал по QLua, или погуглите. Там все есть. tonumber() — преобразовать строку в число
avatar
Нового бара, а не таймфрейма)
avatar
Чёрный кот, какая разница? Главное быть понятым, о чём речь.
Бар -это бар.
Таймфрейм-это временной интревал.
avatar
Ответьте на тупой вопрос: а как эта функция определит, что час уже прошел и надо вызываться?
Сергей Гаврилов, У начала каждого часа минуты равны 0.
avatar
Karim, вопрос не в этом… Функцию нужно вызвать… Что-то я таймера или какого другого периодического события в коде не наблюдаю..
Сергей Гаврилов, Ну я уж не стал весь код приводить. Вопрос был, что добавить в скрипт, а не как его написать.

function main()
 IsRun = true
 while IsRun do
  s = getInfoParam («SERVERTIME») 
  if tonumber(string.sub(s,4,5)) == 0 then
     PaySoundFile(file_name)
  end
  sleep(1000)
 end
end

avatar
Karim, Домучал таки и заработало, только при sleep 1000 он выдаёт сигнал всю первую минуту. Поставил 60000. Может есть другой способ сделать срабатывание один раз? — это первый вопрос.
А второй- как сделать сигнал на каждые 15 минут, я точно не знаю :(.
Я не програмист вообще! Для меня эти цифры как иероглифы, в которых я пытаюсь разобраться...
Спасибо зараннее, если поможешь.
avatar
function main()
 IsRun = true
 begin = true
 while IsRun do
  s = getInfoParam («SERVERTIME») 
  if tonumber(string.sub(s,4,5)) == 0 and begin then
     PaySoundFile(file_name)
     begin = false
  end
  if tonumber(string.sub(s,4,5)) == 1 then     
     begin = true
  end
  sleep(1000)
 end
end

Как то так. Проверять нет времени. 
Если не программист, то есть два варианта. Либо стать им и написать самому, либо нанять.
avatar
Karim, Спасибо за код, я его и так, я его и сяк, но не работает совсем через 15 минут :(.
avatar
Попробуй так:

  if tonumber(string.sub(s,4,5))%15 == 0 and begin then
     PaySoundFile(file_name)
     begin = false
  end
avatar

теги блога Виталий

....все тэги



UPDONW
Новый дизайн