Quik Lua

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

    Пишу алгоритм и возникает ситуация, что при размещении заявки ФОРТС возникает сообщение

    Ошибка создания заявки. [GW][332] «Нехватка средств по лимитам клиента.».

    Не могу сообразить, как предварительно до отправки заявки в систему проверить, что она отвечает требования достаточности средств по лимитам. 

    Друзья, коллеги, роботорговцы, подскажите как проверить, что заявка на фортсе проходит под имеющееся свободное ГО ?


    читать дальше на смартлабе
  2. Аватар Тихий омут
    QUIK робот как проврить что создвамая заявка до отправки отвчает требванию ГО? Вознкает ситуция ошбка создния заявки. [GW][332] «Нехватка средствГО" ?

    QUIK робот как проврить что создвамая заявка до отправки отвчает требванию ГО? Вознкает ситуция ошбка создния заявки. [GW][332] «Нехватка средствГО"?
    читать дальше на смартлабе
  3. Аватар Ramil Shahattudinov
    Lua индикатор тикера ищу.

    Доброго времени всем.
    Я ищу Lua индикатор в Quik, который пишет на графике в левом верхнем углу название инструмента. Однажды наткнулся на него в интернете, счёл что бесполезная вещь и не стал его сохранять. А вот теперь понадобился и самому, но не могу вспомнить где я его видел. Может он есть у кого или кто-нить знает с какого ресурса его можно качнуть? Буду очень признателен в помощи его отыскать.
    читать дальше на смартлабе
  4. Аватар Uncle Fedor
    Изучаем QLua: Относительный ATR

    Доброго дня

    Решил попробовать написать некоторые индикаторы для Quik.
    Была прочитана книга по языку Роберту Иерузалимски «Программирование на языке Lua» и Документация по языку LUA в QUIK и примеры.
    Надо заметить, что язык мне понравился. В нем так мало и так много одновременно!

    Первый блин индикатор — что-то похожее на Волатильность Чайкина, только попроще.
    Идея: хочется изучить циклы волатильности. За основу берем ATR. Но если рассматривать большие интервалы, то цена может гулять в больших пределах, соответственно приводим ее к текущей цене.
    Сделал первый вариант, получил ошибки выполнения — надо добавить обработку ошибок.
    Следующий вариант заработал, я посмотрел — очень большой разброс, надо добавить сглаживание. 
    Добавил сглаживание, разброс стал поменьше, но все равно немного не то. Добавил отдельное сглаживание для диапазона и для цены (предполагая, что цена меняется медленнее чем периоды волатильности). Уже лучше.
    А что если брать не цену закрытия, а например среднюю? Добавил, но оказалось что влияние мизерное.
    В общем, уже можно поиграться. 
    Исходник

    Продолжаю эксперименты. 
    читать дальше на смартлабе
  5. Аватар Uncle Fedor
    Изучаем QLua: Ассиметричные фракталы

    Добрый.
    В одном из видео автор рассказывал об уровнях и использовал индикатор фрактал. Но для того чтобы потенциальные точки находились быстрее, он использовал ассиметричный показатель, например, 4 слева и 3 справа.
    Такой индикатор можно построить с помощью Lua.
    Параметры: количество свечей слева и справа
    Отображение в виде треугольников. Один треугольник было плохо видно, я добавил несколько )
    Второй раз пошло легче. Работаем дальше

    Исходник

    yadi.sk/d/gDeCrw-2FPwNVQ

     


    читать дальше на смартлабе
  6. Аватар Arti
    Как автоматизировать передачу однотипных заявок каждый день?

    Всем привет!
    Скажите, как можно автоматизировать процесс массового создания заявок на покупку бумаг на Московской Бирже каждый день?
    Специфика следующая: есть на мониторинге 10-20 корп. облигаций.
    Для каждой бумаги есть цена и кол-во, которое я хочу купить (заявка), несколько ниже текущей рыночной цены. Заявки на покупку НЕ условные.
    Цена и кол-во бумаг в моих заявках в теч. дня не меняются (для простоты).
    На следующий день цена актуализируется (может поменяться) после ручного пересмотра. Но может и не поменяться. То есть опять нужно загрузить список из этих заявок.
    Можно, конечно, каждое утро вручную заводить каждую из этих 10-20 заявок, но на это уходит минут 10 каждый день, плюс повышается вероятность ошибки/опечатки.
    Список заявок могу вести в Excel.

    Подскажите, можно ли либо сделать так, чтобы заявки на покупку на фондофом рынке МБ не отменялись после окончания сессии (либо автоматически пересоздавались), либо как-то упростить процедуру массового ввода заявок с помощью какого-нибудь механизма экспорта таблицы/списка заявок?

    P.S. Работаю в Quik/WebQuik/ЛК Открытии.
    читать дальше на смартлабе
  7. Аватар XXM
    Торговый робот на Lua для QUIK.

    4 года и 4 месяца прошло с выхода поста «Торговый робот на LUA для QUIK» (https://smart-lab.ru/blog/200767.php) про конструктор Lbot. За это время он повзрослел, лишился графического интерфейса и… превратился в младшего брата для Lbot3D. И если раньше для Lbot была пробная версия (с одним инструментом и одним лотом), то теперь, фактически, сам превратился в пробную версию для Lbot3D и, с этого дня, предоставляется в свободное пользование с полным функционалом:

    Торговый робот на Lua для QUIK.

    Скачать Lbot180.zip можно тут: drive.google.com/open?id=1DL9jGEBm2Uhk89PcQdlK-ObaOe2zihnx
    INI-файл написан для демо-QUIK на 3 инструмента — Сбербанк, Газпром и Лукойл. Стратегия на Газпроме — безиндикаторная, на Сбербанке — на скользящих средних, на Лукойле — на пересечениях MACD.

    encoding = "UTF-8"
    FREQUENCY = 1000
    account = NL0011100043, 10110
    PositionSize = 300000
    xy = 421, 0, 859, 118
    ;-------------------------------------------------------------------------------
    [GAZP]
    Security = GAZP, QJSIM, Gazp_moex
    WorkSize = 3		//  рабочий объем, в штуках;
    LossLimit = 100		// ограничение на убыток по стратегии
    OpenSlippage = 10	// допустимое проскальзывание на сделке, в количестве минимальных шагов цены;
    OpenLong =  {Close, 1} < {High, 2}	// цена 'close' предыдущей 'полной' свечи превысила 'high' предшествующего ей бара;
    OpenShort = {Close, 1} > {Low, 5-2}	// цена 'close' предыдущей 'полной' свечи принизила 'low' 5-2 баров;
    StopLoss = 2
    TakeProfit = 3, 1, 1
    EOD = 18:29:00	//закрытия позиции в указанное время.
    autoBot = Y
    [SBER]
    Security = SBER, QJSIM, Sber_moex
    WorkSize = 10
    LossLimit = 100
    OpenSlippage = 10
    OpenLong	= {Ema1} > {Ema2}
    CloseLong	= {Ema1} < {Ema2}
    OpenShort	= {Ema1} < {Ema2}
    CloseShort	= {Ema1} > {Ema2}
    autoBot = Y
    [LKOH]
    WorkSize = 2
    Security = LKOH, QJSIM, Lkoh_moex
    LossLimit = 225
    OpenSlippage = 10
    OpenLong	= cross(macd_Lkoh.0, macd_Lkoh.1)
    OpenShort	= cross(macd_Lkoh.1, macd_Lkoh.0)
    ;OpenLong =  {Close, 1} < {Low, 5-2}
    ;OpenShort = {Close, 1} > {High, 2}
    StopLoss = 30
    TakeProfit = 50, 10, 10
    autoBot = Y

    читать дальше на смартлабе
  8. Аватар XXM
    Захват откатов скольжением.

              В программе Lbot3D появилась реализация вычисления скользящего экстремума в конкретной стратегии при наличии позиции. Слово «конкретной» звучит потому, что этот самый экстремум можно использовать в других стратегиях из портфеля стратегий. Согласен, это нужно не всем. Скорее так: мало кому он нужен. Тем не менее, продолжу.

              Допустим мы придумали стратегию на некотором активе, рассчитанную на тренд:
    Покупаем на четверть портфеля. Если цена пошла против нас (пусть на 1%)- стопимся, но если в нашу сторону +1%, то в предположении, что мы тренде, выставим лимитированную заявку на покупку второй четверти на 0.5% ниже достигнутого экстремума: откат вероятен, и после того, как на откате вытряхнут часть пассажиров, (самых пугливых, самых недостойных :)), наш портфель зацепит еще несколько лотов и едем дальше, «на север». Но если первая четверть бумаг размещена в нашем портфеле на «долгосрок», то вторая четверть будет сразу же выставлена на продажу с профитом, например, в 1%.


    читать дальше на смартлабе
  9. Аватар Сергей Юхарев
  10. Аватар $upo$tat
    индикатор на LUA

    Добрый день всем!
    Народ, кто может сделать индикатор на LUA для QUIK?
    читать дальше на смартлабе
  11. Аватар Алексей Токин
    Aroon

    Всем доброго дня! Друзья, есть у кого нибудь индикатор aroon на Lua. Или может как то его можно написать, где это можно сделать?
    читать дальше на смартлабе
  12. Аватар XXM
    Fn044.lua, версия 2.1

    В своей торговле применяю комбинации рыночных и лимитированных заявок, (методику описывал ранее, "Настоящая торговая стратегия."  и "US500: Объемы больше, спреды уже!" ). Временами количество одновременно работающих стратегий зашкаливало за сотню и на некоторые из них не хватало денег под выставление заявок, они отключались, иногда ломая логику работы связанных с ней стратегий. В QUIK в таблице «Состояние счета» считается цифра — «Свободно» — свободные средства под заявки, но сходу вытащить ее из Lua у меня не получилось. И пришлось вписать расчет этой величины в робота.
    Сегодня предлагаю вашему вниманию доработанный скрипт Fn044.lua (https://yadi.sk/d/O-6JzZdXkOxyow)
    Fn044.lua, версия 2.1

    в котором реализован расчет свободных средств для заявок на ФОРТС с учетом имеющихся контрактов и заявок.
    Один в один вывести не получилось, как смог.
    As is, и все такое!


    читать дальше на смартлабе
  13. Аватар Василий
    QUIK: Бенчмарк ОФЗ к ставке ЦБ

        Может кому будет интересен скрипт на QLUA, который выступает простым бенчмарком ОФЗ с постоянным купоном к ставке ЦБ.
    Основные параметры доходность и премия к ставке ЦБ, с учетом дюрации.
    Скрипт не работает онлайн (оперативность тут не принципиальна), при запуске собирает параметры в таблицу и выводит на экран.
    В дальнейшем планируется эти данные использовать для анализа премии доходности по дюрации для муниципальных и корпоративных облигаций к ОФЗ.

    QUIK: Бенчмарк ОФЗ к ставке ЦБ


        Код скрипта на github (на github две версии одна в utf-8 для просмотра и основная версия в win1251, т.к. quik понимает только его):
    github.com/trantor77/lua_scripts/boundsOFZ.lua

        Код скрипта:
    --переменные
    keyRateCB = 7.5
    classCode = "TQOB"
    
    function CreateTable()
        t_id = AllocTable()
        AddColumn(t_id, 0, "Бумага", true, QTABLE_STRING_TYPE, 15)
        AddColumn(t_id, 1, "Цена", true, QTABLE_DOUBLE_TYPE, 15)
        AddColumn(t_id, 2, "Доходность, %", true, QTABLE_DOUBLE_TYPE, 15)
        AddColumn(t_id, 3, "Дюрация, лет", true, QTABLE_DOUBLE_TYPE, 15)
        AddColumn(t_id, 4, "Купон, %", true, QTABLE_DOUBLE_TYPE, 15)
        AddColumn(t_id, 5, "Премия к ЦБ, бп", true, QTABLE_INT_TYPE, 15)
        AddColumn(t_id, 6, "Погашение", true, QTABLE_STRING_TYPE, 15)
        t = CreateWindow(t_id)
        SetWindowCaption(t_id, "ОФЗ")
    end
    
    function string.split(str, sep)
        local fields = {}
        str:gsub(string.format("([^%s]+)", sep), function(f_c) fields[#fields + 1] = f_c end)
        return fields
    end
    
    function getParamNumber(code, param)
        return tonumber(getParamEx(classCode, code, param).param_value)
    end
    
    function formatData(prm)
        return string.format("%02d.%02d.%04d", prm%100, (prm%10000)/100, prm/10000)
    end
    
    CreateTable()
    
    arr = {}
    sec_list = getClassSecurities(classCode)
    sec_listTable = string.split(sec_list, ',')
    j = 0
    for i = 1, #sec_listTable do
        secCode = sec_listTable[i]
        securityInfo = getSecurityInfo(classCode, secCode)
        short_name = securityInfo.short_name
        if short_name:find("ОФЗ 26") ~= nil then
            j = j + 1
            r = {}
            r["short_name"] = short_name
            r["price"] = getParamNumber(securityInfo.code, "PREVPRICE")
            r["yield"] = getParamNumber(securityInfo.code, "YIELD")
            r["duration"] = getParamNumber(securityInfo.code, "DURATION")/365
            couponvalue = getParamNumber(securityInfo.code, "COUPONVALUE")
            couponperiod = getParamNumber(securityInfo.code, "COUPONPERIOD")
            r["coupon"] = ((365/couponperiod) * couponvalue)/10
            r["bonus"] = (r["yield"] - keyRateCB)*100
            r["mat_date"] = getParamNumber(securityInfo.code, "MAT_DATE")
            table.insert(arr, j, r)
        end
    end
    
    table.sort(arr, function(a,b) return a["duration"] < b["duration"] end)
    
    for j = 1, #arr do
        row = InsertRow(t_id, -1)
        SetCell(t_id, row, 0, arr[j]["short_name"])
        price = arr[j]["price"]
        SetCell(t_id, row, 1, string.format("%.2f", price), price)
        yield = arr[j]["yield"]
        SetCell(t_id, row, 2, string.format("%.2f", yield), yield)
        duration = arr[j]["duration"]
        SetCell(t_id, row, 3, string.format("%.2f", duration), duration)
        coupon = arr[j]["coupon"]
        SetCell(t_id, row, 4, string.format("%.2f", coupon), coupon)
        bonus = arr[j]["bonus"]
        SetCell(t_id, row, 5, string.format("%.0f", bonus), bonus)
        mat_date = arr[j]["mat_date"]
        SetCell(t_id, row, 6, formatData(mat_date), mat_date)
    end

    читать дальше на смартлабе
  14. Аватар Itself
    Напишу робота

    Коллеги, добрый день!

    Готов написать робота под вашу стратегию.

    Требования:
    1. Небольшое количество параметров (если вы оцениваете момент входа по 100500 критериям, это не особо интересно)
    2. Четкая формализация
    3. Подтвержденная доходность

    Ограничения:
    1. Qlua

    Предпочтения:
    1. Спот
    2. Фьючи
    читать дальше на смартлабе
  15. Аватар XXM
    fn044.lua

    fn044.lua — скрипт для расчета стоимости фьючерсных контрактов в портфеле относительно депозита.
    Скачать: https://yadi.sk/d/e7XRt3CQ2v7Miw

    fn044.lua

    Файл настроек:
    -- fn044set.lua расчет стоимости фьючерсных контрактов в портфеле относительно депозита
    -- © smart-lab.ru/profile/xxm 08.10.2018
    
    -- торговый счет (из таблицы «Позиции по клиентским счетам (фьючерсы)»)
    account = 'SPBFUT0003f'
    
    --положение окна с таблицей. Левый верхний угол в координаты left,top и размеры в width и height.
    xy = {} 
    xy.left, xy.top, xy.width,xy.height = 0, 232, 722, nil
    
    --ширина столбцов таблицы
    t_width = {12, 6, 10, 8, 10, 10, 9, 7, 6, 11, 10, 11}
    
    -- месяц и год исполнения, 2 символа, https://www.moex.com/s205
    MonthYear = "Z8"
    -- код базового актива, 2 символа
    -- если 4 символа, то переменная "MonthYear" не учитывается
    SecCodes={
    	{"MM"}, --контракт на индекс МосБиржи
    	{"Si"}, --руб/доллар FORTS
    	{"SR"}, --Sber FORTS
    	{"LK"}, --контракт на Лукойл
    	{"GZ"}, --контракт на Газпром
    	{"BRX8"}, --контракт на нефть Брент, месяц и год - "X8"
    	{"ED"}, --контракт на ED
    	{"RN"}, --контракт на Роснефть
    	{"GD"}, -- Gold
    	}
    
    --Если xy.height == nil, то вычислить ее.
    --Для разных мониторов коэффициенты (17, 45 и 868 - подобраны эмпирически) будут разными.
    local height = xy.height or ((#SecCodes + 1)*17 + 45)
    if height > 868 then height = 868 end
    xy.height = height

    читать дальше на смартлабе
  16. Аватар Gorazio
    Друзья, требуется ваша помощь!

    Есть те, кто может подсказать по способам создания простейших скриптов на LUA? Таких, например, как сложение значений нескольких простых индикаторов и вывод в виде одной диаграммы или сохранения на рабочей станции значений из ТТП (тех, которые брокер хранит одну торговую сессию) для последующего вывода в приемлимом графическом виде. В крайнем случае рассматриваю excel. Буду благодарен всем, кто сможет чем-то подсказать.   
    читать дальше на смартлабе
  17. Аватар Sergey Pavlov
    Сбербанк, Квик, Луа, Небесконечность

    Коллеги! У меня руки дошли до… автоматизации торговли фьючами из под сбербанка… всё шло гуд-гудом… и вдруг везде прошли сделки, а под сбером тишина… Долго не мог ничего понять… чувствовал себя полным идиотом пока не заглянул в сообщения:
    Сбербанк, Квик, Луа, Небесконечность















    Ибо у меня стоит в скрипте:
    ["EXPIRY_DATE"] = "GTC"
    Собственно, два вопроса:
    1. Это у всех так, что в сбере нельзя делать стоп-заявку по типу до отмены? Для меня это новость… под всеми квиками у всех брокеров работает GTC без проблем.
    2. Можно ли это как-то вылечить, чтобы пользоваться GTC?
    читать дальше на смартлабе
  18. Аватар Albus (Игорь Китаев)
    Парсер котировок Финама

    Пост будет полезен только тем, кто кодит на Луа.
    ---
    Написал простенькую функцию, которая работает с архивом графиков Финама. На Финаме есть история торгов за много лет. Это полезно, чтобы прогнать вашу стратегию на максимально доступных исторических данных.
    Архив Финама находится здесь: https://www.finam.ru/profile/moex-akcii/sberbank/export/
    ---
    Заходите по ссылке, видите там:
    Парсер котировок Финама
    Там где «Формат записи в файл» выбираете как у меня: DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOL. Можно брать и другие форматы, но тогда код функции придётся переписать.
    ---
    Выбираете вверху даты с 1 января по 31 декабря и год за годом сохраняте себе на компьютер вот так:
    Парсер котировок Финама
    читать дальше на смартлабе
  19. Аватар Ramil Shahattudinov
    LUA индикатор фрактальные уровни. Help.

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

    LUA  индикатор фрактальные уровни. Help.



    Вот сам индикатор

     

    Settings =
    {Name = «Fracta_l»,
    period=31,
    line =
    {{
    Name = «Level_High»,
    Color = RGB(0,255,0),
    Type = TYPE_POINT,
    Width = 1
    },{
    Name = «Level_Low»,
    Color = RGB(255,0,0),
    Type = TYPE_POINT,
    Width = 1
    }}}
    idx_prosl=0
    function Init()
    return #Settings.line
    end
    function OnCalculate(idx)
    if idx==1 then
    P = math.floor(Settings.period/2)*2+1
    t_H,t_L={},{}
    end
    if idx~=nil and idx>P then
    if idx_prosl~=idx then
    local l=idx-P
    for l=l,idx-1 do
    t_H[l]=H(l)
    t_L[l]=L(l)
    end
    if t_H[#t_H-(P-1)/2]==math.max(unpack(t_H,#t_H-P+1,#t_H)) then
    H_ind_value=t_H[#t_H-(P-1)/2]
    end
    if t_L[#t_L-(P-1)/2]==math.min(unpack(t_L,#t_L-P+1,#t_L)) then
    L_ind_value=t_L[#t_L-(P-1)/2]
    end
    end
    else
    H_ind_value=nil
    L_ind_value=nil
    end
    idx_prosl=idx
    return H_ind_value, L_ind_value
    end



    читать дальше на смартлабе
  20. Аватар MOCKBA
    Обновление Квика. Версия 7.18.1.20 испортила расчет моих алгоритмов.

    Уважаемые программисты, столкнулся с таким вредительством… иначе я не могу сказать...

    Где-то около месяца назад, заходя в терминал, брокер мне предложил обновить квик, я без задней мысли нажал ок и принял все новые файлы, дальше установка, ну и стандартный перезапуск… Сначала я удивился что визуально все дополнительные вещи, тщательно написанные на lua изменились...=/ Но особо не придал значения… Снова все изменил и начал дальше подключать остальные коннекторы и роботов. Но что-то с того дня пошло не так… Я не понимал в чем проблема, но даже думать не думал залезать снова в кодинг… Тем временем робота пилило… Я просто это вроде пережил, и подумал — ну с кем не бывает. И вот позавчера я запустил квик на старом ноуте, где была еще прошлая версия… И какого же было мое удивление когда я увидел что расчеты и конечные данные визуальных линий принятия решения о входе в позицию разнились с тем которые были в новой версии Квика! Разнились ровно настолько, что этого хватало для принятие алгоритмом неверного решения. Теперь я даже не понимаю, что и думать...? Каким образом это могло произойти? Понимающие люди подскажите, возможно ли такое??? Папку с индикаторами lua я не трогал ни там ни на другом компе.

    Если образно говорить, то меня постоянно начало выкидывать на стопы… Я честно говоря теперь вообще хотел бы отключить эти автообновления от брокера…
    читать дальше на смартлабе
  21. Аватар Viacheslav Merten
    Вопрос к программистам QLUA

    Уважаемые программисты!

    Подскажите, как сделать простенькую панель управления роботом. Нужно менять несколько параметров в роботе не останавливая его. Может кто знает как это сделать?
  22. Аватар Boris Litvinov
    Друзья могу взгреть скриптом, на LUA расчет средней цены фьючерса за печеньки

    Сыровато, но скоро будет готово, плюсы скрипта в том, не ведет БД истории которая грузит систему.
    При этом работает без сбоев. Решены ряд багов связанных с рассинхронизацией. Теперь как часы.
    В скрипте встроены плюшки, не только цена средне взвешенная но и 
    расчет маржи, рассчитываться и показывается без задержки, в реальном времени. Это очень удобно!
    + На график с инструментом планирую прикрутить визуальный уровень средней цены!
    Пишите в личку! 
    Друзья могу взгреть скриптом, на LUA расчет средней цены фьючерса за печеньки


  23. Аватар Alex Hell
  24. Аватар Alex Hell
    РАБОТА $ Здравствуйте, кто сможет подправить мой скрипт ? за $ пишите скайп или почту

    РАБОТА $Здравствуйте, кто сможет подправить мой скрипт? за $пишите скайп или почту
  25. Аватар Serg
    Все слолмалось, или что я упустил?

    Сегодня сломался робот на клуа (автостоп + по мелочи) и странные ГО — дробные и разные продавца и покупателя, на примере фьюча сбера. Может кто знает что произошло? Там чего то на бирже меняли, но почему все поломалось то?
Чтобы купить акции, выберите надежного брокера: