Постов с тегом "QLua": 174

QLua


Индикатор дневных уровней

Индикатор DHLM показывает Хай, Лоу и среднее значение за торговый день.
Индикатор дневных уровней

 

 

Settings =
{
    Name = «DHLM»,
        line =
{
    {
    Name = «High»,
        Color = RGB(0,200,64),
        Type = TYPET_BAR,
        Width = 1
    },
{
    Name = «Low»,
        Color = RGB(200,0,64),
        Type = TYPET_BAR,
        Width = 1
    },
{
    Name = «Median»,
        Color = RGB(0,64,200),
        Type = TYPET_BAR,
        Width = 1
        }
   }
}

local hlm = {}
local math_max = math.max
local math_min = math.min

function Init()
      return #Settings.line
end
function OnCalculate(index)
local dt = T(index)

if O(index) then
if dt.day ~= hlm.day or
          dt.month ~= hlm.month or
          dt.year ~= hlm.year then
           hlm.year = dt.year
           hlm.day = dt.day
           hlm.month = dt.month
           hlm.high = H(index)
           hlm.low = L(index)
      else
           hlm.high = math_max(hlm.high,H(index))
           hlm.low = math_min(hlm.low,L(index))
           hlm.median = (hlm.high + hlm.low)/2
      end
end
return hlm.high,hlm.low,hlm.median
end

 


Ограничитель количества транзакций на чистом QLua

    • 21 декабря 2022, 13:37
    • |
    • _sk_
  • Еще
При торговле с помощью роботов в терминале QUIK рано или поздно встаёт вопрос об ограничении количества отправляемых в секунду транзакций, чтобы не начинались ошибки вида: «Превышен лимит отправки транзакций для данного логина».

Простой способ, когда вводятся ограничения на уровне каждого торгового робота, приводит к ситуациям, когда заявки отправляются медленно из-за этого ограничения, а свободная пропускная способность ещё есть. Для введения общего ограничения для всех роботов сразу нужно использовать какой-то общий ресурс. В качестве такого ресурса может выступать база данных, собственная dll или что-то ещё. Но чистый QLua не позволяет использовать базу данных без каких-либо внешних библиотек, а dll не всякий умеет писать. К счастью, существует реализация ограничителя на базе файловой системы с помощью чистого QLua.

Создаётся некая папка D:\throttle\, где работает ограничитель интенсивности. Во время работы QLua-скрипты формируют в этой папке столько файлов, сколько транзакций в секунду разрешено, например 10. При каждой попытке послать транзакцию скрипты, грубо говоря, конкурируют за эти файлы. Если ресурса хватило, то транзакция отправляется, если нет, то скрипт ждёт 10 мс и повторяет попытку заново.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Алготрейдинг. QLUA округление данных (round)

function round(number, znaq) -- функция округления числа num до знаков znaq
local num = tonumber(number)
local idp = tonumber(znaq)

	if num then
		local mult = 10 ^ (idp or 0)
		if num >= 0 then return math.floor(num * mult + 0.5) / mult
		else return math.ceil(num * mult - 0.5) / mult
		end
	else return num
	end
end

Алготрейдинг. QLUA получение данных сколько осталось инструменту дней до экспирации

function DaysToDie(class_code, sec_code)
-- Получаем количество дней до погашения инструмента,<br />-- class_code - для фьючерсов SPBFUT<br />-- sec_code - код инструмента SiZ2, BRZ2, CRZ2 и т.д.
-- если < 4, просим заменить инструмент
-- для работы необходима ф-ция round (округляем до целого числа)
-- is_run - глобальный флаг работы робота - false = отключаемся.
---

	local daysToDie = 0 -- количество дней до погашения инструмента
	----- получаем количество дней до погашения, если < 4, рекомендуем перейти на новый инструмент ----------
	daysToDie = round(getParamEx(class_code, sec_code, "DAYS_TO_MAT_DATE").param_value, 0)
	if daysToDie <= 4 and daysToDie > 0 then
	message("Количество дней до погашения инструмента " .. SEC_CODE .. " равно " .. tostring(daysToDie) .. ". Необходимо заменить инструмент в настройках робота")
	elseif	daysToDie == 0 or daysToDie == nil then
		message("Инструмент больше не торгуется")
		is_run = false
	end
	return daysToDie
end

Алготрейдинг. Сохранение созданной таблицы в файл .csv через GetTableSize(t_id) и GetCell()

Когда необходимо сохранить созданную таблицу с идентификатором t_id в файл не зная сколько строк и столбцов в ней в итоге будет.
Поможет следующий вариант:

( Читать дальше )

Скрипт для QUIK, показывающий, какое количество сделок у вас исполняется по рынку об встречные заявки, а также как изменится комиссия на срочной секции в случае принятия изменений тарифов.

В соседнем блоге пишут, что биржа опять что-то мутит с комиссиями: Биржа снова повышает комиссии на Срочном рынке
Скрипт для QUIK, показывающий, какое количество сделок у вас исполняется по рынку об встречные заявки, а также как изменится комиссия на срочной секции в случае принятия изменений тарифов.

Вот наваял Lua-скрипт для QUIK, показывающий, какое количество сделок у вас исполняется по рынку об встречные заявки.
Для работы скрипта в QUIK должны быть заказаны обезличенные сделки по тем инструментам, которыми вы торгуете.

Также скрипт покажет текущую биржевую комиссию и будущую в случае принятия указанных изменений. Если вы торгуете интрадей (скальперские сделки), то текущую комиссию надо разделить на два.

Напишите в комментариях, сильно ли изменится ваша комиссия?

function main()
  local Trades = {}
  local comission = 0
  SearchItems('trades', 0, getNumberOf('trades')-1,
    function (class_code, trade_num, flags, exchange_comission)
      if class_code == 'SPBFUT' or class_code == 'SPBOPT' then  -- Учитываем только сделки на срочной секции
        comission = comission + exchange_comission
        local t = {flags & 0x4, exchange_comission}
        if Trades[class_code] then
          Trades[class_code][trade_num] = t
        else
          Trades[class_code] = {[trade_num] = t}
        end
      end
      return false
    end,
  'class_code,trade_num,flags,exchange_comission')

  local total = 0
  local maker = 0
  local taker = 0
  local comission2 = 0
  SearchItems('all_trades', 0, getNumberOf('all_trades')-1,
    function (class_code, trade_num, flags, sec_code)
      if Trades[class_code] then
        local t = Trades[class_code][trade_num]
        if t then
          total = total + 1
          if flags & 0x1 ~= 0 then
            if t[1] == 0 then
              maker = maker + 1
            else
              taker = taker + 1
              comission2 = comission2 + t[2]
            end
          elseif flags & 0x2 ~= 0 then
            if t[1] == 0 then
              taker = taker + 1
              comission2 = comission2 + t[2]
            else
              maker = maker + 1
            end
          else
            comission2 = comission2 + t[2]
          end
        end
      end
      return false
    end,
  'class_code,trade_num,flags,sec_code')
  message(string.format('total:   %u\nmaker: %u\ntaker:  %u\n\ncomission\nсейчас:       %.2f\nскальпинг: %.2f\nстанет:       %.2f', total, maker, taker, comission, comission / 2, comission2 * 3))
end
  • обсудить на форуме:
  • QUIK

ВТБ: По данному инструменту разрешено только закрытие позиции

    • 21 марта 2022, 07:51
    • |
    • Vkt
  • Еще
Когда отменят и можно будет открывать позиции, есть информация?
И в QLUA этот режим как отловить?


Бен, это Данила. Бен, ай нид хелп! Колбеки пропали...

    • 08 февраля 2022, 12:23
    • |
    • Vkt
  • Еще
У меня отдельный скрипт ведет полный реестр колбеков за день.
OnOrder и OnTrade приходят,  OnTransReply нет.
Раньше были. В чем может быть проблема? Первый раз такое. Может сталкивался кто?
  • обсудить на форуме:
  • Quik Lua

QLua: таблица крупных "склеенных" обезличенных сделок - 2

    • 25 января 2022, 09:43
    • |
    • _sk_
  • Еще
Недавно ко мне обратился один из смартлабовцев с просьбой доработать скрипт из поста https://smart-lab.ru/blog/610116.php, чтобы можно было более гибко подходить к раскраске выводимой там таблицы крупных «склеенных» сделок. Я решил проделать эту работу и выложить сюда модернизированный скрипт.

Настройки раскраски таблицы производятся в самом скрипте. Я сделал какие-то настройки для светлой темы терминала, может быть, весьма далёкие от ваших идеалов. Каждый пользователь пусть настраивает сам на свой вкус через палитру RGB (для каждого из трёх основных цветов нужно выбрать интенсивности от 0 до 255), редактируя строки в начале основного скрипта.

Для работы скрипта нужен собственно сам скрипт и один или несколько файлов настроек для ваших наборов инструментов. Границы крупных и очень крупных сделок, проскальзывания и «многосоставности» сделок также пользователи настраивают под себя. В терминале QUIK запускается файл с настройками, а он в свою очередь запускает основной скрипт.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Нужды обучающие материалы по Qlua!

Друзья и коллеги, всем привет! Приятных и полезных выходных!
Думаю наконец освоить написание кода на Qlua. У кого есть обучающие материалы для освоения Qluа, выкладывайте смело!

....все тэги
UPDONW
Новый дизайн