Постов с тегом "QUIK LUA": 232

QUIK LUA


Qlua: структура скрипта для торгового терминала, обработка обрыва связи и её возобновления, работа с файлами

Сегодня начинаем уже писать полноценные скрипты для терминала, а не отдельные блоки кода на lua.

Пройдем:

  • Структуру типового скрипта qlua с примерами.
  • Обработку скриптом «обрыва связи» с сервером и возобновления работы.
  • Работу с файлами: запись, перезапись и чтение файла.
  • getScriptPath, getWorkingFolder

Структура скрипта

В торговом терминале можно запускать небольшие примеры на lua, как мы это делали ранее, но если говорить о постоянно работающем алгоритме, а не о компактной программе, которая должна выполнить только несколько коротких действий, то минимальная структура скрипта для квика будет содержать следующие функции:

Qlua: структура скрипта для торгового терминала, обработка обрыва связи и её возобновления, работа с файлами

function OnInit – инициализирует глобальные переменные и константы (например, торгуемые бумаги, размеры тейка и стопа, торговый счет и пр.), имена таблиц, необходимых файлов.

function OnStop – функция остановки скрипта, активируется при нажатии клавиши «Остановить» в панели скриптов терминала.

function main – основная функция, создает отдельный поток для выполнения скрипта. Обычно внутри main создается цикл для непрерывной работы, т.к. без него функция выполнит один раз весь код, который в ней прописан и скрипт остановится.



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

Qlua: настраиваем торговый терминал и редактор кода.

Для людей уже торгующих через Quik можно перейти сразу к настройкам редактора кода, а тем, кто хорошо знаком с Notepad++, то сразу к запуску скрипта.

В прошлой статье я привел статистику ЦБ, что клиентов, работающих через мобильные приложения брокеров сейчас в разы больше тех, кто работает через торговые терминалы. По этой причине я решил кратко затронуть и установку квика, и поделиться полезными настройками на старте (хотя, полагаю, что среди аудитории смартлаба, доминирующая часть именно тех, кто с терминалом «на ты», продвинутые пользователи сами могут в комментариях указать свои лайфхаки по настройкам и работе).

Подробную инструкцию по работе в квике и всем возможным настройкам я не планирую делать – желающие могут найти всё это в виде различных статей, полезных обзоров, в т.ч. соответствующего мануала по терминалу от разработчиков. Здесь я лишь хочу коснуться основных моментов, которые сделают работу в квике более комфортной для глаз, удобной и быстрой в части работы со скриптами.



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

Qlua: введение.

Cерия статей по языку QLua и алгоритмической торговле для тех, кто хочет автоматизировать свою работу на финансовых рынках, освоить написание скриптов, индикаторов, торговых советников и роботов для терминала Quik.

В 2022 году ЦБ выпустил презентацию «Портрет клиента брокера». В ней указано, что в РФ всего 0,03% клиентов используют алгоритмическую торговлю.

Qlua: введение.


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

У меня нет задачи популяризировать эту тему, скорее помочь тем, кто будет идти той же дорогой. Дело в том, что открытой информации по qlua и алгоритмической торговле через Quik в сети немного: есть несколько сайтов энтузиастов, где кусочками выложены разные полезности, часть из этой информации порой уже устаревшая (работает только на более ранних версиях терминала), есть несколько коммерческих проектов (продажи роботов, либо обучения) там информация актуальная, но за неё нужно платить. Есть интересные библиотеки, но отдельные (например, какие-то библиотеки визуального интерфейса) могут отваливаться с появлением новых версий квика.



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

Раздаю бесплатно скринер арбитражных спредов под Quik с выводом ТОП10 лучших вариантов

Всем привет.
Торгую арбитражные стратегии с помощью роботов.
Для выбора инструментов использую скринер спредов.
Решил поделиться)

Публикуюсь тут впервые, поэтому не знаю, как здесь правильно передавать файлы.
Давайте вначале так — пишите кому нужен — пришлю
Если есть какой-то другой вариант, то посоветуйте — исправлю пост.

Вот такой внешний вид. В первом окне выводится общая информация о Базовом активе, двух ближайших
фьючерсах и спреде между ними. В последнем столбце активируем какие данные участвует в ТОПЕ
Во второй столбце выводятся лучшие варианты для сделок
Раздаю бесплатно скринер арбитражных спредов под Quik с выводом ТОП10 лучших вариантов

Скачать скрипт — disk.yandex.ru/d/2GcpZeQkL6xZrg

quik lua стаканы

подскажите, как решается проблема с ограничением в 200 открытых стаканов в QUIK?
пол дня скрипт работал, и после клиринга начал ошибку писать что макс 200 стаканов моно
  • обсудить на форуме:
  • Quik Lua

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

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

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

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

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

СБЕР брокер - алко-трейдинг (пятница началась в среду)

Алго-торговля qlua в СБЕР закончилась 30.11.2022

Рыночные данные стали поставляться в QUIK с задержками в несколько минут… И так уже третий день.
Техподдержка мычит что-то непонятное в чате. Когда исправят проблемы — не ясно. Видимо ждут приказа Германа.

Началась пятница — алко-торговля СБЕР.
СБЕР брокер - алко-трейдинг (пятница началась в среду)

Герман набрал каких-то дурачков к себе в IT-команду по объявлению на авито.
ИМХО.
  • обсудить на форуме:
  • Quik Lua

Синтетическая облигация. Помогите с Qlua.

Приветствую всех!

Сам я не программист, но решил написать скрипт, который будет выводить табличку по доходности синтетических облигаций (покупка акций/продажа фьючерса). Идея в получении дохода от контанго. Скрипт работает и табличка выводится, но через некоторое время появляется ошибка о недостатке памяти.

Подскажите, что я сделал не так?

Синтетическая облигация. Ошибка памяти.
<code>-- ©2022 by Aleksey Manin
-- Таблица расчета доходности синтетической облигации
-- Какие инструменты(тикеры) отслеживаем. Таблица пар тикер - площадка
tickers = {GAZP = {GAZP = "TQBR", GZZ2 = "SPBFUT"},
           SBER = {SBER = "TQBR", SRZ2 = "SPBFUT"},
           PLZL = {PLZL = "TQBR", PZZ2 = "SPBFUT"},
           GMKN = {GMKN = "TQBR", GKZ2 = "SPBFUT"},
           LKOH = {LKOH = "TQBR", LKZ2 = "SPBFUT"},
           AFLT = {AFLT = "TQBR", AFZ2 = "SPBFUT"},
           NVTK = {NVTK = "TQBR", NKZ2 = "SPBFUT"},
           YNDX = {YNDX = "TQBR", YNZ2 = "SPBFUT"},
           --MOEX = {MOEX = "TQBR", MXZ2 = "SPBFUT"},
           ALRS = {ALRS = "TQBR", ALZ2 = "SPBFUT"},
           VTBR = {VTBR = "TQBR", VBZ2 = "SPBFUT"},
           SNGS = {SNGS = "TQBR", SNZ2 = "SPBFUT"},
           MGNT = {MGNT = "TQBR", MNZ2 = "SPBFUT"},
           NLMK = {NLMK = "TQBR", NMZ2 = "SPBFUT"},
           MTSS = {MTSS = "TQBR", MTZ2 = "SPBFUT"},
           ROSN = {ROSN = "TQBR", RNZ2 = "SPBFUT"}}
rows = {} -- Список строк в таблице по количеству тикеров
oblig_t = AllocTable() -- Указатель на саму таблицу
stopped = false -- Остановка скрипта

-- Функция вызывается перед вызовом main
function OnInit(path)
  AddColumn(oblig_t, 0, "Ticker_BA", true, QTABLE_STRING_TYPE, 8) -- "Ticker"- название первого столбца в таблице
  AddColumn(oblig_t, 1, "Lot_BA", true, QTABLE_INT_TYPE, 8) -- 
  AddColumn(oblig_t, 2, "Ask_BA", true, QTABLE_DOUBLE_TYPE, 10) -- 
  AddColumn(oblig_t, 3, "Ticker_F", true, QTABLE_STRING_TYPE, 10) -- 
  AddColumn(oblig_t, 4, "Lot_F", true, QTABLE_INT_TYPE, 8) -- 
  AddColumn(oblig_t, 5, "Bid_F", true, QTABLE_DOUBLE_TYPE, 10) -- 
  AddColumn(oblig_t, 6, "Day_EXP", true, QTABLE_INT_TYPE, 10) -- 
  AddColumn(oblig_t, 7, "Date_EXP", true, QTABLE_DATE_TYPE, 15) -- 
  AddColumn(oblig_t, 8, "Dohod%", true, QTABLE_DOUBLE_TYPE, 10) -- 
  AddColumn(oblig_t, 9, "Dohod", true, QTABLE_DOUBLE_TYPE, 10) -- 

  CreateWindow(oblig_t) -- Создание окна таблицы
  SetWindowCaption(oblig_t, "Синтетическая облигация") -- Даем название таблице

  for ticker, two in pairs(tickers) do -- Перебираем пары БА-Фьючерс
    rows[ticker] = InsertRow(oblig_t, -1) -- Заносим тикер в список строк
  end
end

function Run()
  for ticker, two in pairs(tickers) do -- Перебираем пары БА-Фьючерс
    ask_ba = 0.0
    bid_f = 0.0
    lot_f = 0
    for ticker_two, board in pairs(two) do -- Перебираем Тикеры внутри пары БА-Фьючерс
      if ticker == ticker_two then -- Если Тикер БА
        SetCell(oblig_t, rows[ticker], 0, ticker_two) -- Заполняем ячейке Тикера БА
        SetCell(oblig_t, rows[ticker], 1, -- Заполняем лот БА
                string.format("%u", getParamEx (board, ticker_two, "LOTSIZE").param_value))
        ask_ba = getParamEx (board, ticker_two, "OFFER").param_value
        SetCell(oblig_t, rows[ticker], 2, string.format("%.2f", ask_ba)) -- Аск БА
      else -- Если Тикер фьючерса
        SetCell(oblig_t, rows[ticker], 3, ticker_two) -- Заполняем ячейку Тикера фьючерса
        lot_f = getParamEx (board, ticker_two, "LOTSIZE").param_value
        SetCell(oblig_t, rows[ticker], 4, string.format("%u", lot_f))
        bid_f = getParamEx (board, ticker_two, "BID").param_value
        SetCell(oblig_t, rows[ticker], 5, string.format("%u", bid_f))
        day_exp = getParamEx (board, ticker_two, "DAYS_TO_MAT_DATE").param_value
        SetCell(oblig_t, rows[ticker], 6, string.format("%u", day_exp))
        SetCell(oblig_t, rows[ticker], 7, 
                string.format("%u", getParamEx (board, ticker_two, "MAT_DATE").param_value))
        --message('Дата:'..getParamEx (board, ticker_two, "MAT_DATE").param_type)
      end
    end
    sum_ba = ask_ba * lot_f
    --message('Тикер:'..ticker..' lot_f:'..lot_f..' sum_ba:'..sum_ba)
    sum_year = (bid_f - sum_ba) / day_exp * 365
    percent = sum_year * 100 / sum_ba
    SetCell(oblig_t, rows[ticker], 8, string.format("%.2f", percent))
    SetCell(oblig_t, rows[ticker], 9, string.format("%.2f", bid_f - sum_ba))
  end
end

-- Функция вызывается перед остановкой скрипта
function OnStop(signal) stopped = true end

-- Функция вызывается перед закрытием квика
function OnClose() stopped = true end;

-- Основная функция выполнения скрипта
function main()
  while not stopped do 
    Run()
    sleep(10) 
  end
end</code>
  • обсудить на форуме:
  • Quik Lua

Уведомления Квика на Lua

Здравствуйте!
Есть у кого открытый код стандартных уведомлений квика?
Стандартного функционала мне мало, а скрещивать ужа с ежом ума не хватает. Вот и есть мысля переколхозить стандарные уведомления с нужным мне функционалом.
Заранее благодарствую!
P.S. Страничку стандартного кода не вижу смысла покупать. Окейгугл пока просто не нашел ее…

Создать таблицу с помощью Lua

Здравствуйте. Возможно ли написать скрипт на Lua, который бы создавал таблицу со значениями индикатора ATR.
Заголовками столбцов были бы даты(30 последних торговых сессий), заголовки строк — короткое наименование ТОП-20 фьючерсов по обороту.
Нужно, чтобы в ячейках таблицы были значения ATR за n-ный день в таком-то фьючерсе.
Спасибо.

  • обсудить на форуме:
  • Quik Lua

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