комментарии alfacentavra на форуме

  1. Логотип Quik Lua
    Qlua: работа со сделками, позициями и денежными лимитами. Часть 2.

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

    Для анализа состава портфеля, лимитов и их динамики используются таблицы:

    Клиентский портфель (получаем данные через getPortfolioInfo и getPortfolioInfoEx).
    Позиции по деньгам (getMoney и getMoneyEx, money_limits).
    Позиции по инструментам (getDepo, getDepoEx, depo_limits).
    Ограничения по клиентским счетам (futures_client_limits).
    Позиции по клиентским счетам (futures_client_holding).

    Таблица «Клиентский портфель» даёт сводную информацию по лимитам и параметрам риска брокерского счета. Таблицы «Позиции по деньгам» (лимиты) и «Позиции инструментам» (ценные бумаги) показывают данные в разрезе фондового рынка. Таблицы «Ограничения по клиентским счетам» (лимиты) и «Позиции по клиентским счетам» (фьючерсы и опционы) – только про срочному рынку.



    Авто-репост. Читать в блоге >>>
  2. Логотип Quik Lua
    Qlua: статус файла.
    Иногда бывает необходимо учесть в программе, что файл с которым собираетесь работать отсутствует, занят другой программой или пуст.

    Для проверки наличия файла я использую функцию, которую сам когда-то нашел в сети, она возвращает размер файла в байтах, если файл существует и nil если не найдет его.

    Qlua: статус файла.

    Проверить занят ли файл, а также проверить что он не пустой можно следующей функцией:


    Авто-репост. Читать в блоге >>>
  3. Логотип Quik Lua
    Qlua: работа со сделками, позициями и денежными лимитами. Часть 1.

    Функция OnTrade
    Сохранение параметров сделки в файл.
    Работа с таблицей сделок.
    Сохранение всех сделок дня.
    Скрипт автосохранения всех заявок и сделок под завершение торгового дня.

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

    В файле QLUA.chm в директории терминала находим через поиск описание самой функции:

    Qlua: работа со сделками, позициями и денежными лимитами. Часть 1.
    И таблицу с параметрами:



    Авто-репост. Читать в блоге >>>
  4. Логотип Quik Lua
    Qlua: работа с заявками (часть 3).

    Сегодня завершаем работу с заявками:

    Функция OnTransReply
    Функция OnOrder
    Получение остатка по заявке, контроль исполнения полного объема
    Таблица транзакций
    Общая логика выставления лимитной заявки в стакане

    В предыдущих примерах мы закладывали на обработку заявки небольшой таймаут (в пределах от 300 мс до 1 секунды), но правильнее отслеживать результат по коллбэкам, т.к. это время может быть и менее 300 мс, а может затянуться (по разным причинам) на секунды. Поможет нам в этом отслеживании функции обратного вызова OnTransReplyиOnOrder.

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

    Функция OnTransReply возвращает ответ на транзакцию, выставленную средствами qlua.



    Авто-репост. Читать в блоге >>>
  5. Логотип Quik Lua
    Qlua: работа с заявками (часть 2).

    Сегодня:

    Узнаем общее количество заявок
    Функции getNumberOf и getItem
    Как пройтись циклом по всем заявкам
    Вывод активных заявок
    Снять скриптом заявку
    Снимаем все активные заявки скриптом
    Снимаем только заявки, выставленные конкретным скриптом


    В прошлый раз мы научились
    выставлять скриптом заявки в терминале, теперь можем поработать с ними.
    Выставим скриптом 5 заявок на покупку и продажу от лучших цен
    BIDи OFFERстакана заявок с шагом в 0,01.

     

    Напишем функцию, которая будет выдавать нам необходимые цены (лучшую цену спроса и предложения) со стакана:

    Qlua: работа с заявками (часть 2).

    И возвращать -1, если предложения или покупки в стакане не найдены (стакан закрыт, либо нет торгов).

    Тогда основной алгоритм в main будет выглядеть:



    Авто-репост. Читать в блоге >>>
  6. Логотип Quik Lua
    Qlua: работа с заявками (часть 1).

    Зачем нужен демо терминал?
    Где открыть демо квик?
    Выставление заявки в торговом терминале через скрипт.
    Делаем функцию выставления заявки по требуемым условиям
    Карман заявок и tri-файлы
    Параметры для заявок с примерами по разным рынкам

    Почему важно начинать работу с заявками на qlua с демо терминала?

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

    Достаточно, например, прописать в



    Авто-репост. Читать в блоге >>>
  7. Логотип Quik Lua
    Qlua: работа с биржевым стаканом.

    Сегодня:

    Работа с биржевым стаканом через getQuoteLevel2
    Особенность нумерации в стакане заявок терминала квик
    Работа через функцию обратного вызова OnQuote
    Примеры работы со стаканом из скрипта
    Сравнение реализации одной алгоритма через разные функции

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

    Работать с биржевым стаканом можно через getQuoteLevel2 и функцию обратного вызова OnQuote.

    Функция getQuoteLevel2 возвращает 2 массива котировок (bid и offer) и 2 значения: количество бидов в стакане (bid_count) и количество офферов (offer_count). Чтобы нам не было скучно разработчики терминала решили последних 2 параметра передавать в виде строки, поэтому при работе их нужно перевести в числа (через tonumber).

    Массивы bid и offer содержат цены (price) и количество (quantity) по каждому уровню заявок стакана. Их также нужно будет предварительно перевести в число.



    Авто-репост. Читать в блоге >>>
  8. Логотип Quik Lua
    Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

    Сегодня:

    Добавляем статистику по акциям роста и падения.
    Составляем TOP лидеров роста и падения.
    Быстрый поиск акций по тикеру в терминале.

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

    Напомню, что скринер выводил по тикерам акции, которые торгуются на Московской Бирже (за минусом бумаг с нулевыми объемами), и по ним через каждые 10 секунд проверял значение LASTCHANGE (% роста/снижения к закрытию прошлого дня) через getParamEx.

    В первичной итерации скринер выглядел следующим образом:

    Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

    Логично продолжить изменения скрипта и сделать расчеты, которые напрашивались, глядя на сам скринер: подсчитаем сколько бумаг торгуется в плюсе, сколько в «красной зоне». Также можно рассчитать средний процент роста/снижения всего по списку, плюс отдельно по растущим бумагам, отдельно по падающим.



    Авто-репост. Читать в блоге >>>
  9. Логотип Quik Lua
    Qlua: работа с лентой всех сделок (часть 2).

    Сегодня завершаем работу с лентой всех сделок:

    Различия данных ленты всех сделок и биржевого стакана.
    Большие покупки и продажи в ленте сделок и динамика цены.
    Альтернативные варианты поиск крупных игроков по ленте сделок.

    Начало: https://smart-lab.ru/blog/935919.php


    Еще раз про отличия ленты всех сделок и биржевого стакана – некоторые заявки могут исполняться очень быстро, их можно просто не заметить в стакане, но они точно отразятся в ленте. Какие-то заявки и движения в стакане могут быть для создания видимости крупных игроков, при этом они могут как отменяться как только цена начинает приближаться, так и очень оперативно переставляться. Лента сделок покажет реальную картину: какие объемы и по каким ценам прошли, какие проходят в текущем моменте.

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



    Авто-репост. Читать в блоге >>>
  10. Логотип Quik Lua
    Qlua: работа с лентой всех сделок.

    Сегодня рассмотрим: 

    Что такое таблица обезличенных сделок.
    Настройка таблицы в терминале.
    Что делать, если таблица открылась, но она пустая.
    Вывод данных с таблицы по DDE.
    Работа с таблицей обезличенных сделок через скрипт qlua с примерами.
    Пишем советника, показывающего на графике крупных игроков.

    Лента всех сделок (она же таблица обезличенных сделок, она же таблица всех сделок) — это тиковый массив сделок с одним или несколькими инструментами, в котором отражается информация по каждой сделке, в т.ч.: цена, объём и направление транзакции (покупка/продажа). Обычно для работы выбирается один инструмент, который отслеживается, реже 2 (например базовый актив и ближайший фьючерс на него). Встречал варианты, когда грузят сразу большой список, но в этом случае может сильно подвисать терминал.

    Зачем нужна лента сделок: многие, пытаясь торговать внутри дня, проводят часы за медитативным наблюдением за биржевым стаканом. Однако стакан заявок это только намерение, далеко не все выставленные заявки перейдут в сделки. Более того иногда по некоторым акциям (2го и 3го эшелона) заявки в стакане могут активно «двигаться», создавая видимость, что в бумаге идет активная торговля, при этом, если открыть таблицу всех сделок, то будет видно, что реальных сделок практически нет.



    Авто-репост. Читать в блоге >>>
  11. Логотип Quik Lua
    Qlua: работа с метками, пишем торгового советника на индикаторах.

    Сегодня рассмотрим:

    Вывод текста на график
    Вывод графических сигналов
    Удаление меток с графика
    Торговый советник на индикаторах
    Удаление данных вечерней/утренней сессии с графика.

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

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



    Авто-репост. Читать в блоге >>>
  12. Логотип Quik Lua
    Qlua: получение данных с графиков терминала.

    Продолжаем погружение в основы qlua. 

    Идентификатор инструмента
    Получаем количество свечей через getNumCandles
    Получаем свечные данных через getCandlesByIndex
    Читаем данные с индикатора SMA
    Данные с верхней и нижней линии Price Channel
    Графики с таблицы текущих торгов.
    Сравнение получение данных через CreateDataSource и через getCandlesByIndex

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

    Получение данных котировок с графика цены.

    Для начала на самом графике цены необходимо установить идентификатор.

    Создаем график в торговом терминале, нажимаем правую клавишу мышки, выбираем «Редактировать», выбираем график цен:

    Qlua: получение данных с графиков терминала.

    Проваливаемся во вкладку «Дополнительно», и присваиваем id, например: SBER_ID:



    Авто-репост. Читать в блоге >>>
  13. Логотип Quik Lua
    Qlua: получение данных биржевых свечей с сервера брокера, обработка данных, пишем скрипт выгрузки котировок

    Функция CreateDataSource
    Получение количества свечек данных
    Пауза для подгрузки данных
    Получение по инструменту OPEN, HIGH, LOW, CLOSE, VOLUME
    Обработка времени и даты
    Закрытие источника данных
    Примеры: получение данных последних 10 свечей, выгрузка новой минутной свечки после её закрытия, текущее значение простой средней SMA10 по минуткам
    Простой скрипт выгрузки котировок

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

    Более практичным вариантом является получение данных через функцию CreateDataSource, запрос осуществляется следующим образом:

    ds, err = CreateDataSource(код класса, тикер инструмента, интервал)

    Код класса: для акций «TQBR», для срочного рынка «SPBFUT».



    Авто-репост. Читать в блоге >>>
  14. Логотип Quik Lua
    Qlua: пишем скринер акций Московской биржи

    Пока не ушли далеко от темы получения данных из таблицы текущих торгов решил сделать в качестве примера еще и простой скринер акций. Это вполне доступно по тем материалам, которые мы уже прошли. Будем отслеживать динамику изменения цены относительно цены закрытия предыдущего дня.

    Нам понадобятся:

    1. Таблица для вывода данных (строить уже умеем).

    2. Получение данных из таблицы текущих торгов через getParamEx (проходили там же).

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

    Через sec_list = getClassSecurities(«TQBR») можно получить строку с тикерами акций на Московской бирже, которые будут разделены запятыми. Чтобы пройтись по всем элементам и записать их в массив используем цикл:

    for TIKER in string.gmatch(sec_list, "[^,]+") do
      tikers[#tikers + 1]=TIKER
    end


    Отслеживать будем параметр LASTCHANGE – процент изменения цены от цены закрытия:



    Авто-репост. Читать в блоге >>>
  15. Логотип Quik Lua
    Qlua: завершаем апгрейд советника.

    Сегодня дополним наш алгоритм советника следующими пунктами:

    1. Пропуск «поздних» сигналов на старте.
    2. Обработка советником обрыва связи.
    3. Сохранение сигналов и логов в файл.


    Еще один пункт, связанный со временем, который был выбран для апгрейда советника – это пропуск сигналов на старте, если запуск скрипта состоялся не в начале торговой сессии (например любой старт после 10:30). Это может быть полезным, если выбрана активная внутридневная стратегия и сигналы полученные на старте скрипта, например в середине дня, могут быть уже не актуальными (с низким потенциалом прибыли) и лучше дождаться новых. Т.е. необходимо разделить сигналы на те, которые сгенерировались на старте и остальные сигналы, которые будем далее брать в работу. Сигнал на старте может закрыться (по обратному/сигналу выхода) и если переоткроется снова, то его уже можно брать в работу как новый.

    В нашем скрипте сигналы по каждому инструменту (массив signal) ранее могли принимать значение:

    0 – вне позиции по инструменту



    Авто-репост. Читать в блоге >>>
  16. Логотип Quik Lua
    Qlua советник: дополняем сигналами на закрытие позиции, таблицей для вывода данных и расчетом финансового результата по позициям.

    Продолжаем изучать основы qlua. Улучшаем советника, которого писали ранее и уже дополняли в разных вариантах работой со временем.

    Сегодня рассмотрим:
    Дополним сигналами на закрытие позиции.
    Создадим дополнительную таблицу для вывода данных.
    Научим скрипт делать расчет финансового результата.

    Сигналы на закрытие позиции.

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



    Авто-репост. Читать в блоге >>>
  17. Логотип Quik Lua
    Qlua: структура скрипта для торгового терминала, обработка обрыва связи и её возобновления, работа с файлами

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

    Пройдем:

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

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

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

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

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

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

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



    Авто-репост. Читать в блоге >>>
  18. Логотип Quik Lua
    Qlua: настраиваем торговый терминал и редактор кода.

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

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

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



    Авто-репост. Читать в блоге >>>
  19. Логотип Quik Lua
    Qlua: введение.

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

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

    Qlua: введение.


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

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



    Авто-репост. Читать в блоге >>>
Чтобы купить акции, выберите надежного брокера: