Quik Lua

Сайт продукта: https://forum.quik.ru/forum10/
Lua — язык программирования, который используется в программировании торговых роботов под популярный в России терминал Quik.
  1. Аватар alfacentavra
    Qlua: работа с лентой всех сделок.

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

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

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

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



    Авто-репост. Читать в блоге >>>
  2. Аватар Николай Антонов
    Скрипт на QLUA по определению корреляции между ценами двух инструментов
    Всем привет!

    Относительно недавно на своем Дзен-канале «Код торгового робота» я размещал статью в которой рассматривал различные теоретические графики и рассчитывал корреляцию между ними. Ранее примерно такие же статьи встречал и на Smart-lab.

    В продолжении данной темы было бы логично написать скрипт, который строит корреляцию между двумя заданными активами по указанному тайм-фрейму. Что и было сделано в виде скрипта на QLUA. Напомню, что коэффициент корреляции принимает значение от -1 до 1. Если он близок к единице, значит две величины примерно одинаково ведут себя. Если близок к -1, то графики двух величин ведут себя разнонаправлено — когда один график расчет — второй также снижается. А результат близкий к нулю говорит, что между графиками нет связи.

    Данный скрипт выполняет следующие действия:
    1. Инициирует исходные данные (по сути это блок, в котором задаются исходные данные: с какими инструментами работаем, по какому тайм-фрейму)
    2. Считывает свечи по указанным двум инструментам.
    3. Сопоставляет данные свечей, то есть создается таблица в которой приведено время и цены обоих активов в это время.


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

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

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

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

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



    Авто-репост. Читать в блоге >>>
  4. Аватар Cubigator
    Торгует робот Cubigator - американские горки и апрельское дежавю
    Привет. Хочу выложить пару интересных мега сделок 4% и 11% за сегодня 14 августа (копии апрельских) В конце сильного движения все-таки удалось роботу войти по тренду, но из-за резкого разворота, в первой сделке потерял более половины из 10% прибыли. Зато вторая сделка вытянула полностью, но и здесь есть ложка дегтя. С недавнего времени начал закрывать прибыль частями, и из-за этого вместо 3000+ пунктов взял только 2250.  Как только не тестировал частичное закрытие, всегда теряется от 5 до 10% прибыли в среднем, но зато становится меньше убыточных дней. Хз что предпочтительнее, пока в сомнениях.
     Торгует робот Cubigator - американские горки и апрельское дежавю

    Добавлю разгромные сделки конца недели (10-11 августа). Роботу никак не удавалось войти по тренду, пару стопов вообще обидных испортили всю картину.




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

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

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

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

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

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

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

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

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



    Авто-репост. Читать в блоге >>>
  6. Аватар Николай Антонов
    Формирование отчета в формате HTML скриптом на QLUA

    Всем привет!

    Формирование отчета в формате HTML скриптом на QLUA

    В данной статье хотел показать интересный подход формирования отчета из QUIK, который выдается в формате файла HTML и который можно посмотреть любым браузером.

    В своем канале на Дзен, я показывал как можно получать информацию скриптами QLUA:

    как переносить информацию в Эксель;

    как записывать информацию в файл;

    как отражать информацию в собственной таблице QUIK.

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

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

    Для начала нам потребуется функция QLUA — getClassSecurities.

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



    Авто-репост. Читать в блоге >>>
  7. Аватар Владимиров Владимир
    Создание на Lua своего индикатора в графике Quik: основы, нюансы, пример. Индикаторы: прогнозных High и Low следующего интервала; ценовых уровней объема.

       Кратко расскажу принципы и некоторые нюансы работы с графиком в Qiuk в плане создания своего индикатора (здесь и далее – подразумевается использование языка программирования Lua). В конце текста изначально хотел прикрепить видео с демонстрацией и краткими пояснениями работы моих индикаторов, но решил сделать это во второй части статьи, чтобы совместить просто иллюстрацию с небольшим анализом фьючерсов и акций.
       На полноту изложения вопроса по работе с индикаторами на графике Quik не претендую. Информация будет полезна интересующимся данной темой, не рассчитана на профессионалов (которые и так все знают, умеют и реализовали – свято в это верю), но все же предполагает наличие определенного уровня знаний Lua.
       Зачем мучиться со своими индикаторами? Конечно, в этом нет смысла, если вас устраивают стандартные индикаторы или отсутствуют самостоятельные подходы (методы) торговли, либо визуализация вам в принципе не требуется (не интересна).
       В моем случае мне банально захотелось сделать визуализацию своего метода прогнозирования экстремумов цены следующего интервала.



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

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

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

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

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

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



    Авто-репост. Читать в блоге >>>
  9. Аватар Том Сойер
    Индикатор "Нефть в рублях"

    Приветствую.

    Случайно в комментарях обнаружил одного пользователя, страждущего по старому-доброму индикатору «Нефть в рублях» для Quik. На скорую руку переделал старый код и решил заделиться исходником – сам всё равно не пользуюсь.

    Исходные данные: фьючерсы Br и Si. При использовании другого долларового графика (например, вечного USDRUBF) нужно поправить код: переменной «coefficient» нужно присвоить единицу.

    Инструкция к применению:
    — загрузить файл (нажми меня);
    — создать папку «LuaIndicators» в папке, где живёт Ваш Quik, и поместить туда файл;
    — открыть графики фьючерсов на доллар и на брентовку в одном окне (можно в одной координатной сетке, можно в двух);
    — в настройках графика (меню графика «Редактировать...» — Si-X.XX — вкладка «Дополнительно») в идентификатор вводим «доллар»;
    — тоже самое проделываем для брентовки с измененияем — идентификатор «нефть»;
    — через контекстное меню добавляем индикатор «Tom Sawyer's Brent in rubles v1.3»



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

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

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

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

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

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

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

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


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



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

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

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


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

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

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



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

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

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

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

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



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

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

    Пройдем:

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

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

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

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

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

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

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



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

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

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

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



    Авто-репост. Читать в блоге >>>
  15. Аватар alfacentavra
    Qlua: введение.

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

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

    Qlua: введение.


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

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



    Авто-репост. Читать в блоге >>>
  16. Аватар Magnitny
    Раздаю бесплатно скринер арбитражных спредов под Quik с выводом ТОП10 лучших вариантов
    Всем привет.
    Торгую арбитражные стратегии с помощью роботов.
    Для выбора инструментов использую скринер спредов.
    Решил поделиться)

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

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

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

    Авто-репост. Читать в блоге >>>
  17. Аватар evg_gen +100(100)
    quik lua стаканы
    подскажите, как решается проблема с ограничением в 200 открытых стаканов в QUIK?
    пол дня скрипт работал, и после клиринга начал ошибку писать что макс 200 стаканов моно

    Авто-репост. Читать в блоге >>>
  18. Аватар _sk_
    Ограничитель количества транзакций на чистом QLua
    При торговле с помощью роботов в терминале QUIK рано или поздно встаёт вопрос об ограничении количества отправляемых в секунду транзакций, чтобы не начинались ошибки вида: «Превышен лимит отправки транзакций для данного логина».

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

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

    Авто-репост. Читать в блоге >>>
  19. Аватар Алексей
    СБЕР брокер - алко-трейдинг (пятница началась в среду)
    Алго-торговля qlua в СБЕР закончилась 30.11.2022

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

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

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

    Авто-репост. Читать в блоге >>>
  20. Аватар Вадим
    В архивной версии Quik 7.14 использовался скрипт на qpile, после перехода на свежие версии терминала старый скрипт перестал работать. Очень не удобно вручную собирать котировки. Помогите написать скрипт на LUA для мониторинга котировок и выгрузки их в текстовый файл в нужном мне формате.
  21. Аватар Алексей Манин
    Синтетическая облигация. Помогите с 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>


    Авто-репост. Читать в блоге >>>
  22. Аватар Rostislav Kudryashov
    Quik и QLua. Программируем без ошибок доступ к массивам
    Очень часто программирование для компьютера состоит из быстрого написания программы с ошибками и последующего длительного их выявления. Конечно, сократить второй этап помогает технология экстремального программирования (eXtreme Programming — XP).

    Но в QLua используется много системных таблиц-массивов и разных текстовых констант для именования полей в этих таблицах. Ручной набор такого текста в разных местах программы чреват  мелкими ошибками. Ещё хуже, что на запрос значения неправильно указанного поля Lua втихую выдаёт пустое значение nil. Ошибка в программе выскочит не в этот момент, а в любом месте, где затем потребуется это значение. И не всегда просто будет понять, откуда оно возникло.
    К тому же ошибка явно может и не выскочить, а просто увести разветвление счёта в неправильную сторону.

    Чтобы совместить при выполнении программы место выявления ошибки с местом её возникновения, следует заготовить константы для имён всех полей таблиц QLua. И разместить эти константы в отдельном модуле-таблице. Например, файл QuikConst(qc).lua такого модуля может иметь содержимое

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

    Авто-репост. Читать в блоге >>>
  24. Аватар Eugene Unstoppable
    Создать таблицу с помощью Lua

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



    Авто-репост. Читать в блоге >>>
  25. Аватар Sergey Pavlov
    moex+quik+lua+candles
    Коллеги!
    Есть два варианта как получать данные в квике в рамках луа-скриптов.
    1. getCandlesByIndex
    2. CreateDataSource

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

    Второй вариант неудобен тем, что не всегда источники данных создаются, нужно выжидать тайм-ауты и всякое такое.

    Подскажите, какой из вариантов вы считаете наиболее правильным/оптимальным или какой используете сами?
    Если накидаете пример кода как это используете, буду премного благодарен!

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