Quik Lua

Сайт продукта: https://forum.quik.ru/forum10/
Lua — язык программирования, который используется в программировании торговых роботов под популярный в России терминал Quik.
  1. Аватар Трейдер Вася
  2. Аватар Трейдер Вася
    QLua. Как определить, открыта-ли таблица скрипта? Как сделать кнопки в таблице? Такое определение не работает if IsWindowClosed(t_id)==false then t = CreateWindow(t_id) end

    QLua. Как определить, открыта-ли таблица скрипта? Как сделать кнопки в таблице? Такое определение не работает if IsWindowClosed(t_id)==false then t = CreateWindow(t_id) end
  3. Аватар Трейдер Вася
  4. Аватар Трейдер Вася
    Qlua. Как с помощью функция OnTransReply и OnTrade получить информацию об открытии сделки или поступлении заявки?

    Qlua. Как с помощью функция OnTransReply и OnTrade получить информацию об открытии сделки или поступлении заявки?
  5. Аватар Трейдер Вася
    Qlua. Не срабатывает while Run and trans_Status == nil do sleep(1); end; в коде. Помогите пожалуйста настроить флажок открытия заявки и позиции.https://cloud.mail.ru/public/5YEP/aAot7CJjr

    Qlua. Не срабатывает while Run and trans_Status == nil do sleep(1); end; в коде. Помогите пожалуйста настроить флажок открытия заявки и позиции.https://cloud.mail.ru/public/5YEP/aAot7CJjr
  6. Аватар Albus (Игорь Китаев)
    Индикатор для парного трейдинга+рубле-бочка

    Как и обещал, выкладываю простой индикатор для анализа двух инструментов. Его можно использовать для любых пар на свой вкус.
    Вот например, Сбер обычный (вверху) против сбера привилегированного (посерёдке). Индикатор внизу — красный. Для его расчёта первый график поделён на второй.
    Индикатор=SBER/SBERP
    Индикатор для парного трейдинга+рубле-бочка
    Дивиденды по ним одинаковые, ценообразование одинаковое, однако по странной воле рынка в эти дни Сбер обычный слишком дёшев против сбера привилегированного. Красный график утоптан вниз, а ведь ещё недавно был намного выше. Это не совет, но если (вдруг!) вы думаете, что эта несправедливость скоро выровняется, вам надо купить SBER и шортануть на такой же объём SBERP. А ещё лучше шортануть фьючерс на SBERP, чтобы не платить брокеру за акции взятые в долг.
    ----------
    Итак, индикатор. Я дописал к коду комментарии, чтобы даже новичок не кодер мог разобраться.
    Скачать индикатор.
    Индикатор для парного трейдинга+рубле-бочка
    ----------
    План действий.
    1. Графики обоих инструментов надо впихнуть в одно окошко, как это вы видели у меня на рисунке. Это позволит качественно учитывать пропуски свечей, ведь пропуски свечей бывают часто. Если вы откроете графики каждый в своём окошке, это нарушит весь расчёт, так как будут делиться неправильные свечки. Будет неинформативный бред.
    Два графика в одном окошке — это обязательно. Делается это так:
    Индикатор для парного трейдинга+рубле-бочка
    2. К верхнему графику надо прикрутить идентификатор. По умолчанию — это циферка 1. В коде индикатора я написал где этот параметр можно поменять. Если вы захотите размножить этого робота на разные пары инструментов, этот навык пригодится.
    Идентификатор вписывается на ВЕРХНЕМ графике вот здесь:
    Индикатор для парного трейдинга+рубле-бочка
    3.  Дальше надо положить индикатор в правильное место: в папку LuaIndicators. КВИК умеет читать индикаторы только из неё. Если этой папки у вас нет, создайте её в той папке, где лежит КВИК.
    После этого индикатор появится в общем списке индикаторов. На рисунке он виден с названием !Sintetika
    Дальше этот индикатор надо прикрутить к правильном графику. Этот выбор делается вверху окошка там где зелёный овал.
    Индикатор для парного трейдинга+рубле-бочка
    Индикатор прикручивается к ДРУГОМУ графику, не к тому, которому вы присвоили идентификатор. Если правой кнопкой мышки кликнуть по нижнему графику, то он и выберется. Но можно задать вручную как на картинке.
    4. Нужно правильно задать множитель. Фьючерс Си стоит 57 000, а доллар рубль 57 рублей. То есть верхнюю цену надо сократить на три ноля. Эту задачу и решает параметр umnozhenie. Его можно поменять прямо в коде, а можно в настройках индикатора. Вот здесь:
    Индикатор для парного трейдинга+рубле-бочка
    Для SBER/SBERP его надо исправить на 1. В этом случае нули сокращать не нужно. Если оставить как есть — 1000 — , то внизу будут неправильные цифры как показывает зелёная стрелка.
    5. Параметр umnozhenie для разных пар:
    Si/USD_TOM=1000
    ФьючGAZP/GAZP=100 (в 1 фьючерсе 100 единиц базового актива — акций)
    SBER/SBERP=1
    Для любых других пар акций тоже можно ставить 1.
    Вот несколько примеров этого индикатора на разных инструментах.
    1. Фьючерс Сбер-обычка против акции Сбер-обычка. Множитель 100. Фьючерс торгуется дешевле акции, потому что во фьючерсе нет дивидендов. Часовик.
    Индикатор для парного трейдинга+рубле-бочка
    На вечорке акции не торгуются, поэтому будет удобно отфильтровать вечорку и утренний аукцион вот здесь:
    Индикатор для парного трейдинга+рубле-бочка
    2. Фьючерс Си против спотового доллар-рубля. Минутки.
    Индикатор для парного трейдинга+рубле-бочка
    Пишите о результатах, постараюсь помочь. На забывайте:
    1. Два графика впихиваются в одно окно
    2. Идентификатор «1» прикрепляем к верхнему графику, а сам индикатор к нижнему.
    3. Не забывайте ставить верный множитель.
    Удачи :)

    П.С. Добавлю ещё один индикатор: рубле-бочка. Может оказаться полезным. Он делает то же самое, только формула чуть другая: он перемножает два значения: Си умножает на брент и делит на 1000. Скачать рубле-бочку.
    Индикатор для парного трейдинга+рубле-бочка


  7. Аватар Трейдер Вася
    Вопрос по QLua. У одного брокера хорошо работает с квиком, у другого не срабатывает флаг открытия сделки. Как исправить?

    Вопрос по QLua. У одного брокера хорошо работает с квиком, у другого не срабатывает флаг открытия сделки. Как исправить?
  8. Аватар Трейдер Вася
    Как в QLua узнать количество открытых позиций с помощью функции getParamEx?

    Как в QLua узнать количество открытых позиций с помощью функции getParamEx?
  9. Аватар gardist
    Скрипт на qlua - Светофор

    По следам этого поста скрипт на qlua, называется «Светофор».
    Суть скрипта- отслеживать дистанцию до «дна», которое представляет собой лои 2008 года+накопленная инфляция.

    Подсветка строк:
    зеленым- цена ниже уровня инфляции
    желтым — до дна менее 50%
    красным — до дна более 80%

    В чем не смог разобраться:
    как получить лой 2008 года по акции (вбито вручную)
    как получить полное название компаний (вбито вручную)
    как сортировать таблицу (ctrl+клик не помогает)
    кто знает — подскажите!

    Как это выглядит в Квике:
    Скрипт на qlua - Светофор
    Бэктест на проливе 2014 года:
    Скрипт на qlua - Светофор

    Код:

    -- Обьявляем переменные
    sIsRun=true;
    sDate=0;
    sDno=0;
    sDistance=0;
    
    --Инфляция 2009-2016
    sInflation=88.77; 
    
    -- Массив с названием компаний
    aTickerName= {"Сбербанк", "Газпром", "Лукойл", 
                    "ГМКНорНик", "Система", 
                    "Аэрофлот", "Роснефть", "Транснф",
                    "ФСК ЕС", "РусГидро", "СеверСталь", 
                    "Новатек", "Магнит", "Татнефть",
                    "Сургнфтз-п", "М.видео", "ИнтерРАО",
                    "НЛМК", "ММК", "Россети", 
                    "Ростел", "МТС", "Уркалий"}
    
    -- Массив с тикерами
    aTickerList = {"SBER", "GAZP", "LKOH",
                "GMKN", "AFKS",
                "AFLT", "ROSN", "TRNFP",
                "FEES", "HYDR", "CHMF",
                "NVTK", "MGNT", "TATN",
                "SNGSP", "MVID", "IRAO",
                "NLMK", "MAGN", "RSTI", 
                "RTKM", "MTSS", "URKA"};
    
    -- Массив с лоями 2008 года
    aTickerLow2008={14, 86, 740,
                1228, 4.5,
                20, 94, 6728,
                 0.054, 0.4, 80,
                50, 312, 32.63,
                 5.16, 24, 0.54,
                 20, 4.5, 0.6,
                14, 100, 25};
    
    function main()
            -- Создает таблицу
            CreateTable();
    
            -- Основной цикл
            while sIsRun do
                    -- Дата и время
                    sDate=getInfoParam('TRADEDATE').." "..getInfoParam('SERVERTIME');
                    -- Перебираем компании: k -порядковый номер, v - название тикера
                    for k,v in pairs(aTickerList) do
    
                       -- Крайняя цена
                       sBID=tonumber(getParamEx("TQBR", v, "LAST").param_value);
                       -- Расчетное дно
                       sDno=math.floor(((aTickerLow2008[k]*(sInflation+100))/100)*100)/100;
                       -- Сколько до дна %
                       sDistance=math.floor((100-((sDno*100)/sBID))*100)/100;
    
                       -- Вставляем данные в табличку
                       SetCell(t_id, k, 0, tostring(sDate));
                       SetCell(t_id, k, 1, tostring(aTickerName[k]));
                       SetCell(t_id, k, 2, tostring(v));
                       SetCell(t_id, k, 3, tostring(sBID));
                       SetCell(t_id, k, 4, tostring(sDno));
                       SetCell(t_id, k, 5, tostring(sDistance));
    
                      -- Раскрашиваем желтым
                       if sDistance<50 then 
                            Yellow(k);
                       end;
                      -- Раскрашиваем красным
                       if sDistance>80 then 
                            Red(k);
                       end;
                      -- Раскрашиваем зеленым
                       if sDistance<0 then 
                            Green(k);
                       end;
    
    
                    end;
    
                    -- Спим
                    sleep(50000);
            end;
    end;
    
    
    --- Функция создает таблицу
    function CreateTable()
            -- Получает доступный id для создания
            t_id = AllocTable();    
            -- Добавляет 6 колонок
            AddColumn(t_id, 0, "Дата", true, QTABLE_INT_TYPE, 15);
            AddColumn(t_id, 1, "Название", true, QTABLE_INT_TYPE, 15);
            AddColumn(t_id, 2, "Ticker", true, QTABLE_INT_TYPE, 15);
            AddColumn(t_id, 3, "BID", true, QTABLE_INT_TYPE, 15);
            AddColumn(t_id, 4, "Расчетное дно", true, QTABLE_INT_TYPE, 15);
            AddColumn(t_id, 5, "Сколько до дна (%)", true, QTABLE_INT_TYPE, 15);
            -- Создаем
            t = CreateWindow(t_id);
            -- Даем заголовок       
            SetWindowCaption(t_id, "Компании");
       -- Добавляет строку
          for k,v in pairs(aTickerList) do
            InsertRow(t_id, k);
          end
    end;
    
    --- Функции по раскраске ячеек таблицы
    function Red(col)
     for i=0, 5 do
            SetColor(t_id, col, i, RGB(255,168,164), RGB(0,0,0), RGB(255,168,164), RGB(0,0,0));
     end;
    end;
    function Green(col)
     for i=0, 5 do
            SetColor(t_id, col, i, RGB(157,241,163), RGB(0,0,0), RGB(157,241,163), RGB(0,0,0));
     end;
    end;
    function Yellow(col)
     for i=0, 5 do
            SetColor(t_id, col, i, RGB(249,247,172), RGB(0,0,0), RGB(249,247,172), RGB(0,0,0));
     end;
    end;
    
    -- Функция вызывается когда пользователь останавливает скрипт
    function OnStop()
       sIsRun = false;
    end;
    


    ссылка на скрипт
     
    P.S.: не является рекомендацией к покупке/продаже акций, использование программы на ваш страх и риск.

    Кросспост rffx.ru


  10. Аватар Трейдер Вася
    Как в Lua задать условие пересечения индикатора с ценой (сигнал нужно получить в момент пересечения, до закрытия свечи)? Мой не рабочий вариант ниже.

    Как в Lua задать условие пересечения индикатора с ценой (сигнал нужно получить в момент пересечения, до закрытия свечи)? Мой не рабочий вариант ниже.
  11. Аватар Трейдер Вася
    Язык Lua и квик: Как указать ссылку на график цены? Как указать ссылку на индикатор ?

    Язык Lua и квик: Как указать ссылку на график цены? Как указать ссылку на индикатор?
Чтобы купить акции, выберите надежного брокера: