Сервисные функции QLua(Lua)

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 4, среднее: 5,00 из 5)
Загрузка...

Qlua-основы
isConnected()   - возвращает 1, если QUIK подключен к серверу и 0, если не подключен

getScriptPath()   - возвращает путь, по которому находится скрипт, без последнего обратного слэша ("\"), например, "C:\Program Files (x86)\Info\MyLua"

getInfoParam()   - возвращает значение параметра из окна:"Связь" -> "Информационное окно..."

Возможные параметры:
message() - выводит сообщение в терминале QUIK, если все в порядке, возвращает 1, иначе nil, может принимать 2 параметра:
      "Текст сообщения" (string)
      Иконка(необязательный) (number) - 1-message-icon-1(по-умолчанию), 2-message-icon-2, 3-message-icon-3
      Максимальная длина сообщений, передаваемых в функцию message(), составляет 900 символов

sleep() - пауза в скрипте, принимает время паузы в миллисекундах, например sleep(3000); - остановит выполнение скрипта на 3 секунды

getWorkingFolder() - возвращает путь, по которому находится файл info.exe без последнего "\", например, getWorkingFolder(); - вернет "C:\Program Files (x86)\Info"

PrintDbgStr() - служит для вывода отладочной информации, принимает один параметр (string) - сообщение для вывода

Использование PrintDbgStr() совместно с Visual Studio:

Добавить комментарий

Сервисные функции QLua(Lua): 22 комментария

  1. Здравствуйте, подскажите, пожалуйста, в каком виде сравнивать значение времени
    getInfoParam ("LOCALTIME")
    Например с 9 утра?

    while getInfoParam ("LOCALTIME")<??? do sleep(10) end
    в микросекундах?

    1. Здравствуйте! Чтобы микросекунды иметь, нужно dll написать простенькую на C++, в Lua нет микросекунд, на сколько я знаю, видел только их эмуляцию. Сравнить в секундах можно так, например (время компьютера, не сервера):

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      
      RUN = true
       
      main = function()
         -- Получает текущие дату/время компьютера в виде таблицы datetime
         local DT_need = os.date('*t', os.time())
         -- Изменяет структуру на определенное время (09:00:00)
         DT_need.hour = 9
         DT_need.min = 0
         DT_need.sec = 0
         -- Представляет дату/время в виде количества секунд прошедших с 1 января 1970 г
         local DT_need_SEC = os.time(DT_need)
       
         -- Ждет наступления 9 часов утра
         while RUN do
            -- Если текущие дата/время компьютера больше или равно 9:00:00, то
            if os.time() >= DT_need_SEC then
               -- Выходит из цикла while
               break
            end  
       
            -- Пауза, чтобы не перегружать процессор
            sleep(10)
         end
       
         -- Если во время ожидания скрипт был остановлен пользователем, то выходит из функции main
         if not RUN then return end
       
         -- Сюда мы попадем только после 09:00:00
         message('Время равно: '..os.date('%X', os.time()))
       
      end
       
      OnStop = function()
         RUN = false
      end
  2. Дмитрий, не подскажете почему
    PrintDbgStr("qlua "..getInfoParam("LASTPINGTIME"))
    PrintDbgStr("qlua "..getInfoParam("LASTPINGDURATION"))
    возвращают пустые значение?
    а getInfoParam('SERVERTIME') корректно отрабатывает.

    Цель отслеживать пинг.. При больших задержках 1-2 сек переходить в безопасный режим.

    1. Перейдите в меню: "Создать окно" - "Все типы окон" - "Информационное окно", поставьте там галочку "Расширенный набор" и нажмите "Добавить все" и "Да", откроется информационное окно, посмотрите в нем, возможно эти параметры просто не транслируются. Как вообще пинг отслеживать даже не знаю, никогда не приходилось, можете попробовать настроить на компьютере время точно до секунд, и в OnAllTrade сравнивать время пришедшей сделки со временем компьютера, конечно, с учетом часового пояса, тогда будете видеть когда совершилась сделка и сколько потребовалось времени, чтобы информация о ней дошла до Вашего терминала.

  3. Здравствуйте!
    Вопрос - как при помощи Qlua можно принудительно активировать стоп-заявку из таблицы стоп-заявок? Чтобы по ней выставилась заявка. В терминале такая опция есть.

      1. Большое спасибо за оперативность помощи. Попробовал Вашу подсказку - получаю ошибку транзакции с текстом "Не указан режим транзакции" . Среди параметров транзакции такого параметра не нашел. Что имеется в виду?

    1. Еще, можете прочитать про таблицу "Карман транзакций" в файле справки info.chm (находится в папке с терминалом). В особенности, про выгрузку транзакции в *.tri файл. Таким образом можно получить подобную строку для любой транзакции из тех, которые есть в терминале.

  4. Здравствуйте!
    Вопрос возник - как лучше программно определить момент начала торгов? Если робот запущен, например, за 10 минут до начала торгов, многих данных у него еще нет (или есть, но вчерашние), то на что ориентироваться, чтобы дать роботу команду начинать расчеты? isConnected() я так понимаю будет уже true и за 10 минут. Есть еще подозрение, что можно по первой обезличенной сделке?
    Может быть, где-то есть уже такой реализованный код, что-то не нахожу, буду благодарна за подсказку!

      1. Неа, статус торгуется у него уже до начала торгов 1. При этом данные он берет вчерашние, например. ту же цену открытия. Меняется она уже с началом торгов.
        Сделаю с привязкой к первой сделке 🙂

  5. Дмитрий, непонятно: "getInfoParam() - возвращает значение параметра из окна:"Связь" -> "Информационное окно..."" - это в Квике такое окно? Не могу найти.