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

  1. Логотип Quik Lua
    Ограничитель количества транзакций на чистом QLua
    При торговле с помощью роботов в терминале QUIK рано или поздно встаёт вопрос об ограничении количества отправляемых в секунду транзакций, чтобы не начинались ошибки вида: «Превышен лимит отправки транзакций для данного логина».

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

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

    Авто-репост. Читать в блоге >>>
  2. Логотип Quik Lua
    QLua: таблица крупных "склеенных" обезличенных сделок - 2
    Недавно ко мне обратился один из смартлабовцев с просьбой доработать скрипт из поста https://smart-lab.ru/blog/610116.php, чтобы можно было более гибко подходить к раскраске выводимой там таблицы крупных «склеенных» сделок. Я решил проделать эту работу и выложить сюда модернизированный скрипт.

    Настройки раскраски таблицы производятся в самом скрипте. Я сделал какие-то настройки для светлой темы терминала, может быть, весьма далёкие от ваших идеалов. Каждый пользователь пусть настраивает сам на свой вкус через палитру RGB (для каждого из трёх основных цветов нужно выбрать интенсивности от 0 до 255), редактируя строки в начале основного скрипта.

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

    Авто-репост. Читать в блоге >>>
  3. Логотип QUIK
    Алготрейдинг в QUIK с 14 сентября
    МосБиржа планирует 14.09.2020, в конце-концов, перейти на 19-значные номера заявок и сделок. При этом терминалы QUIK, которые должны обеспечивать корректную работу с такими номерами в QLua, всё ещё в сыром состоянии. Историю вопроса можно почитать, например, тут:
    forum.quik.ru/forum10/topic5119/

    У меня лично тестовый терминал 8.8.4.3 периодически падает через пару-тройку дней непрерывной эксплуатации. Реальная торговля пока идёт на версии 8.3. При этом альтернатива такая: либо вообще тушить торговлю с 14 числа придётся, либо сидеть и бояться, что терминал внезапно упадёт. Неприятная ситуация.

    Алготрейдеры, использующие QLua, кто и как планирует жить с 14 сентября? Напишите в комментариях.

    Авто-репост. Читать в блоге >>>
  4. Логотип Quik Lua
    Опыт доработки QLua-скриптов для QUIK 8.5.2
    В новой версии терминала QUIK 8.5.2 произведён апгрейд языка Lua для написания торговых скриптов с версии 5.1 до версии 5.3. Это нужно для того, чтобы корректно обрабатывать 19-значные номера заявок и сделок на срочном рынке МосБиржи. Типа number в Lua 5.1 не подходит: там все числа хранятся как double, соответственно целые числа до 2^53 = 9 007 199 254 740 992 записываются без потери точности, а 19-значные номера заявок и сделок будут больше этой границы.

    Версия Lua 5.3 обратно несовместима с Lua 5.1. Я почти не использовал внешние библиотеки и для меня было два важных изменения: отказ от module (это было сделано в версии 5.2) и введение целочисленной арифметики (версия 5.3).

    Для избавления от использования module пришлось переработать много кода, хотя изменения были несложные. Приведу пример. Раньше был такой код Arrays.lua для работы с массивами:

    --
    -- Выполнение действий с массивами.
    --
    
    local pairs = pairs
    local type = type
    
    module(...)
    
    --- Создать копию массива (таблицы)
    -- @return копию массива (таблицы)
    function copy(array)
        local copy_array = {}
        if type(array) ~= "table" then
            return array
        end
        for k, v in pairs(array) do
            if type(v) == "table" then
                copy_array[k] = copy(v)
            else
                copy_array[k] = v
            end
        end
        return copy_array
    end
    
    --- Узнать, начинается ли индексация в массиве с нуля или с единицы.
    -- @return 0 или 1
    function base(array)
        if array[0] ~= nil then
            return 0
        else
            return 1
        end
    end
    
    --- Вычислить число элементов в массиве.
    -- @return число элементов в массиве
    function size(array)
        local n = 0
        for _, _ in pairs(array) do
            n = n + 1
        end
        return n
    end
    
    --- Проверить пустой или нет массив.
    -- @return true/false
    function isEmpty(array)
        for _, _ in pairs(array) do
            return false
        end
        return true
    end
    
    --- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1.
    -- @return первый индекс массива, где ничего не записано
    function firstEmptyIndex(array)
        local i = 1
        while array[i] ~= nil do
            i = i + 1
        end
        return i
    end


    Авто-репост. Читать в блоге >>>
  5. Логотип Московская биржа
    CLJ0: по-настоящему страшный график ГО
    Согласен, ситуация с экспирацией CLJ0 на МосБирже вышла неординарная. Но, считаю, нам ещё повезло, даже тем, кто влетел!

    Берём из терминала график цены CLJ0 и накладываем на него графики ГО. Для большей наглядности сделаем так, чтобы цена была на правой шкале, а размер ГО — на левой, а также сделаем так, чтобы был виден 0 на обеих шкалах. Видим вот это:

    График цены CLJ0 и размера ГО

    Из графика понятно, что размер ГО примерно пропорционален цене. А теперь подумайте над тем, что было бы, если бы планка оказалась не на $8.84, а, скажем, на $3, $1 или ещё ниже. Народ бы втарил на всю котлету, пока ГО низкое, а потом бы их экспирировали по -$37!

    Интересно, какие выводы сделает МосБиржа касательно правил расчёта ГО после вчерашнего цирка с конями?

    Авто-репост. Читать в блоге >>>
  6. Логотип Нефть
    CLJ0: по-настоящему страшный график ГО
    Согласен, ситуация с экспирацией CLJ0 на МосБирже вышла неординарная. Но, считаю, нам ещё повезло, даже тем, кто влетел!

    Берём из терминала график цены CLJ0 и накладываем на него графики ГО. Для большей наглядности сделаем так, чтобы цена была на правой шкале, а размер ГО — на левой, а также сделаем так, чтобы был виден 0 на обеих шкалах. Видим вот это:

    График цены CLJ0 и размера ГО

    Из графика понятно, что размер ГО примерно пропорционален цене. А теперь подумайте над тем, что было бы, если бы планка оказалась не на $8.84, а, скажем, на $3, $1 или ещё ниже. Народ бы втарил на всю котлету, пока ГО низкое, а потом бы их экспирировали по -$37!

    Интересно, какие выводы сделает МосБиржа касательно правил расчёта ГО после вчерашнего цирка с конями?

    Авто-репост. Читать в блоге >>>
  7. Логотип Quik Lua
    QLua: таблица крупных "склеенных" обезличенных сделок
    Иногда хочется наблюдать за ситуациями, когда участники торгов исполняют по рынку крупные заявки. Конечно, можно смотреть на обычную ленту обезличенных сделок с настроенными фильтрами на размер сделки, но ведь можно написать специальный QLua-скрипт, который будет отбирать сделки, являющиеся результатом исполнения.

    В терминале QUIK ордерлог недоступен, поэтому надо как-то эвристическим образом определить, что набор обезличенных сделок относится к одной и той же рыночной заявке. Например, можно проверять, что инструмент в текущей сделке совпадает с инструментом в предыдущей сделке, направление сделки то же самое, время сделки совпадает с точностью до миллисекунд, и цена при покупке растёт, а при продаже — падает.

    Если суммарный объём не менее какой-то границы, которую можно задать для каждого инструмента индивидуально, такие «склеенные» сделки выводятся в таблице. В ней указаны:
    — суммарный объём;
    — количество обезличенных сделок, которые были склеены;
    — начальная цена и конечная цена;

    Авто-репост. Читать в блоге >>>
  8. Логотип Quik Lua
    QLua: формирование свечных данных для робота
    Поделюсь своим опытом, который может быть полезен начинающим алготрейдерам, пишущим своего робота на QLua.

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

    Пример 1. Мы торгуем акции на 30-минутках и при этом не хотим учитывать свечу, которая получается в 9:30 из-за аукциона открытия, и не хотим, чтобы аукцион закрытия портил последнюю свечу дня в 18:30. Хотим только нужные свечи в одном массиве.

    Пример 2. Мы торгуем фьючерсы только в дневную сессию, а вечернюю сессию выбрасываем, поскольку наша стратегия в этом случае даёт более приличный график эквити. Хочется иметь «отфильтрованный» свечной ряд.

    Пример 3. Мы торгуем американские акции на Санкт-Петербургской бирже и хотим, чтобы время свечей было как в Америке, а не как на бирже, и хотим оставить только основные торги с 9:30 до 16:00 по буржуйскому времени.

    Авто-репост. Читать в блоге >>>
  9. Логотип коронавирус
    Оптимальная продолжительность карантина
    Допустим, что вирус настолько заразный, что карантином его не победить, и болеть будет всё население рано или поздно.

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

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

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

    Авто-репост. Читать в блоге >>>
  10. Логотип Доллар рубль
    Si и тренд
    Та же самая трендовая система с теми же периодами тестирования и настройками по комиссии и проскальзыванию, но уже для фьючерса Si.

    2017 год (+7.15%)

    Оптимизация на промежутке с 2014-01-01 по 2016-12-31, торговля 2017 год.

    Si, 2017 год

    2018 год (+9.83%)

    Оптимизация на промежутке с 2015-01-01 по 2017-12-31, торговля 2018 год.

    Si, 2018 год

    Авто-репост. Читать в блоге >>>
  11. Логотип Сбербанк
    Сбер и тренд
    Есть торговая система, которая пытается ловить тренды. Основана на индикаторах, есть параметры для оптимизации.

    Тестирование идёт с постоянным размером капитала, в среднем использование капитала примерно 50%, фьючерс SR, комиссия + проскальзывание установлены в размере 0.02% от оборота (адекватные).

    В тесте параметры оптимизируются по промежутку в три года и потом ещё год идёт торговля с использованием этих параметров. На графиках эквити разным цветом указаны промежутки IS и OOS.

    2017 год (+1.73%; так себе, но живы остались)

    Оптимизация на промежутке с 2014-01-01 по 2016-12-31, торговля 2017 год.

    SR, 2017 год

    2018 год (+24.86%; неплохо, особенно с плечом)

    Оптимизация на промежутке с 2015-01-01 по 2017-12-31, торговля 2018 год.

    SR, 2018 год

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