Зарабатывающие торговые сигналы (читать до конца!)

    • 01 марта 2023, 13:00
    • |
    • _sk_
  • Еще

Решил «спалить грааль». Опишу тестирование торговой системы, которую можно использовать для демо-трейдинга, например, транслируя сигналы в мессенджерах и повышая свой авторитет как опытного трейдера среди аудитории. Риски использования лежат только на вас самих!

Система эксплуатирует нестационарность рынка, используя для входов и выходов моменты с повышенной волатильностью. Моменты входа и выхода зависят от одного явного параметра lookback и одного неявного greed. Торговля ведётся в лонг и шорт, может применяться на любых таймфреймах, но лучше на мелких. Подходит любой достаточно волатильный и ликвидный инструмент. Я буду демонстрировать результаты на фьючерсе на акции «Сбера» SR.
Зарабатывающие торговые сигналы (читать до конца!)

Период для тестирования выбран с начала 2015 года по конец февраля 2023 года. Торговля идёт фиксированной суммой на весь капитал по номиналу. Комиссия и проскальзывание установлены на уровне 0,03%. Склейка фьючерсов не используется, в конце дня, предшествующего дню экспирации, позиции закрываются и на следующий день открываются уже в новом фьючерсе. Таймфрейм 5 минут, чтобы было удобно оперативно транслировать сигналы через интернет.



( Читать дальше )

Ограничитель количества транзакций на чистом QLua

    • 21 декабря 2022, 13:37
    • |
    • _sk_
  • Еще
При торговле с помощью роботов в терминале QUIK рано или поздно встаёт вопрос об ограничении количества отправляемых в секунду транзакций, чтобы не начинались ошибки вида: «Превышен лимит отправки транзакций для данного логина».

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

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

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

QLua: таблица крупных "склеенных" обезличенных сделок - 2

    • 25 января 2022, 09:43
    • |
    • _sk_
  • Еще
Недавно ко мне обратился один из смартлабовцев с просьбой доработать скрипт из поста https://smart-lab.ru/blog/610116.php, чтобы можно было более гибко подходить к раскраске выводимой там таблицы крупных «склеенных» сделок. Я решил проделать эту работу и выложить сюда модернизированный скрипт.

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

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

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Алготрейдинг в QUIK с 14 сентября

    • 09 сентября 2020, 15:23
    • |
    • _sk_
  • Еще
МосБиржа планирует 14.09.2020, в конце-концов, перейти на 19-значные номера заявок и сделок. При этом терминалы QUIK, которые должны обеспечивать корректную работу с такими номерами в QLua, всё ещё в сыром состоянии. Историю вопроса можно почитать, например, тут:
forum.quik.ru/forum10/topic5119/

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

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

Просто цена или что-то, стоящее за ней?

    • 13 июля 2020, 13:23
    • |
    • _sk_
  • Еще
При разработке торговой системы на основании свечного графика можно идти двумя путями.

Путь 1. Сфокусироваться только на ценовом графике, искать некоторые закономерности, сформулировать правила входа в позицию и выхода из неё на основании пороговых значений неких индикаторов (не обязательно классических). Торговля паттернов, по-видимому, тоже сюда попадает: сформировали волны с такими-то соотношениями — входим в позицию с некоторыми тейками и стопами. При этом объяснение, почему торговая система работает, будет статистическим: за некоторый период эти правила входа выхода обеспечивают приемлемый график эквити. Почему индикаторы и паттерны именно такие? Да так просто повелось, такая рыночная экология сложилась. Пока она существенно не поменялась торговая система будет зарабатывать.

Путь 2. Предложить более глубокую модель, где каким-то образом вычисляется что-то, стоящее за ценой и определяющее её. Например, пусть в модели как-то связываются спрос и предложение в предыдущие и текущий момент времени некоторой ощутимой группы участников рынка, после чего вычисляется текущий совокупный спрос (total demand) и предполагается, что именно этот совокупный спрос и будет двигать цену в ближайшем будущем (есть корреляция между будущим приращением цены и текущим total demand модели). Если есть заметный перекос, надо быстро зайти в рынок и успеть прокатиться на этом дисбалансе (есть положительное математическое ожидание). В этом случае модель делает статистический прогноз на ближайшее будущее более обосновано, что-ли, по сравнению  тем, как это было для первого пути.

Какой из вариантов более плодотворен для получения хороших результатов в алготрейдинге?

Есть ли какие-то существенные аргументы за или против второго пути?

Лично у меня больше успехов по первому направлению, а хотелось бы и по второму тоже чего-то добиться.

Ответы на ребусы

    • 12 июля 2020, 08:45
    • |
    • _sk_
  • Еще
Вчера я написал пост, где предлагалось размять мозги и решить несколько «околорыночных» ребусов.

Настало время опубликовать ответы для тех, кому интересно, и показать, что решения ребусов, всё-таки, есть.


( Читать дальше )

Ребусы

    • 11 июля 2020, 10:17
    • |
    • _sk_
  • Еще
В выходные рынки закрыты, поэтому можно и развлечься на рыночно-математическую тему. Извините, но у алготрейдеров будет преимущество. :)

Разгадайте ребусы, где одинаковым буквам соответствуют одинаковые цифры.

Ребусы



Примечание 1. Ребус может иметь больше одного решения.

Примечание 2. Пост рекламой не является. :)


Поиск и эксплуатация закономерностей

    • 09 июля 2020, 13:58
    • |
    • _sk_
  • Еще

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

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



( Читать дальше )

Как я нейросети в трейдинге применял

    • 27 июня 2020, 08:24
    • |
    • _sk_
  • Еще
Ниже я честно описал одну из своих неудачных попыток применения нейросетей для трейдинга и привёл результат теста на истории системы для торговли на фьючерсе RI.

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

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

( Читать дальше )

Опыт доработки QLua-скриптов для QUIK 8.5.2

    • 15 мая 2020, 16:29
    • |
    • _sk_
  • Еще
В новой версии терминала 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


( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

теги блога _sk_

....все тэги



UPDONW
Новый дизайн