Нужные функции

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

math_round() -- Округляет число до указанной точности
GetClassBySec() -- Возвращает код класса по коду бумаги
WaitUpdateDataAfterReconnect() -- Ждет подключения к серверу, после чего ждет еще UpdateDataSecQty секунд подгрузки пропущенных данных с сервера
GetServerDateTime() -- Возвращает текущую дату/время сервера в виде таблицы datetime
StrToTime() -- Приводит время из строкового формата ЧЧ:ММ к формату datetime
CheckDemo() -- Узнать является ли терминал демо от компании Arqa, или демо брокера Открытие
GetTotalnet() -- Получает текущую чистую позицию по инструменту
GetFreeMoney() -- Возвращает доступные средства
GetCorrectPrice() -- Приводит переданную цену к требуемому для транзакции по инструменту виду
GetPriceForMarketOrder() -- Возвращает корректную цену для рыночной заявки по текущему инструменту
SetOrder() -- Выставляет обычную лимитную заявку
SetMarketOrder() -- Выставляет рыночную (по сути) заявку
GetOrderAverTradesPrice() -- Возвращает среднюю цену сделок по заявке
CheckOrder() -- Проверяет наличие в системе заявки с определенным ID транзакции
GetOrderNum() -- Возвращает номер заявки по ее ID транзакции
WaitOrderComplete () -- Ожидает исполнения заявки по ID транзакции
Set_SL() -- Выставляет 'Стоп лимит' заявку
SetTP() -- Выставляет 'Тейк профит' заявку
SetTP_SL() -- Выставляет 'Тейк профит и Стоп лимит' заявку
CheckStopOrder() -- Проверяет наличие в системе стоп-заявки с определенным ID транзакции
GetStopOrderNum() -- Возвращает номер стоп-заявки по ее ID транзакции
CheckStopOrderActive() -- Проверяет по номеру активна ли стоп-заявка
KillOrder() -- Снимает заявку
Kill_SO() -- Снимает стоп-заявку
StackFIFO() -- Создает объект стека FIFO(Первым вошел, первым вышел)
StaticVar.dll -- Обмен данными между Lua-скриптами в QUIK
СОХРАНЕНИЕ ПАРАМЕТРОВ СКРИПТА QLUA(LUA) МЕЖДУ ЗАПУСКАМИ

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

Нужные функции: 125 комментариев

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    
     function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
       --------------------------------------------------------------------------------------------------------------------------
       for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*),") do
          for sec in string_gmatch(getClassSecurities(class), "(%P*_*%P*_*%P*),") do
             if sec == code then return class end
          end
       end
       --------------------------------------------------------------------------------------------------------------------------
    end

    Здравствуйте. Функция не возвращает код класса: "STOCK_USA" и "FQBR" ("SPBXM" - не проверял). В чем подвох?

      1. Привет, все проще
        local function getClassCode(ticker) -- Функция возвращает код класса по коду инструмента
        for i= 0, getNumberOf("securities")-1 do
        local item = getItem("securities", i)
        if item.code == ticker then
        -- message("getClassCode: "..tostring(item.class_code).." "..ticker,2)
        return item.class_code
        end
        end
        return ""
        end

        1. Спасибо, Дмитрию, с его помощью так написал

          1
          2
          3
          4
          5
          6
          7
          8
          9
          
          function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
             --------------------------------------------------------------------------------------------------------------------------
             for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*_*%P*),") do
                for sec in string_gmatch(getClassSecurities(class), "(%P*%.*%P*-*%P*),") do
                   if sec == code then return class end
                end
             end
             --------------------------------------------------------------------------------------------------------------------------
          end
            1. kalikazandr ваш код элегантнее и эффективнее, но тикер может быть в нескольких классах.
              Поэтому можно предложить небольшую модификацию вашего кода:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              
              local function getClassCode (ticker) -- Функция возвращает таблицу кодов классов по тикеру инструмента
                local tbl = {}
                ---  !!! Некоторые тикеры попадают в несколько классов ---
                ----   !!  Таблица securities не  отсортирована по тикерам . Поэтому полный перебор ----
                 for i= 0, getNumberOf("securities") - 1 do
                      local item = getItem("securities", i)
                      if item.code == ticker then
                          tbl [#tbl +1]  = item.class_code
                      end
                end
                return tbl
              end
              1. согласен, ваша правда, но список классов по тикеру ничего особо не даст, т.к. нет параметра, который будет уточнять правило поиска, например, что бы различить акции от неполных лотов этих акций

                1. Костя, вот так тебе пойдет

                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  12
                  13
                  14
                  15
                  16
                  17
                  18
                  19
                  20
                  21
                  22
                  
                  local ClassCodes =
                  {
                    STOCK_USA = true,
                    SPBXM = true,
                    FQBR = true,
                    TQBR = true,
                    QJSIM = true,
                    SPBFUT = true
                  }
                  local function getClassCode (ticker) -- Функция возвращает класс по тикеру инструмента
                     local class_code = ClassCodes[ticker]
                     if class_code then return class_code end
                   
                     for i= 0, getNumberOf("securities") - 1 do
                          local item = getItem("securities", i)
                          if item.code == ticker and ClassCodes[item.class_code] then
                              ClassCodes[ticker] = item.class_code --для повторного обращения
                              return item.class_code
                          end
                    end
                    return ""
                  end