Избранное трейдера MrD

по

Пара строк в гроб теоретико-вероятностному подходу к рынкам

Доброй ночи, коллеги!

Я не перестаю удивляться количеству людей, которые пытаются лечить свои фрустрации от рыночных лоссов путем изучения учебников по ТВиМС. Ну т.е. я ни разу не против любой научной и околонаучной деятельности (успешно тренирует мозг), но всячески не рекомендую рассчитывать на будущие профиты на основании вновь приобретенных знаний.

К примеру, я до сих пор пытаюсь расколоть крепкий орешек задачи максимизации «правильной» эквити. Эта задача легко решается при наличии квантового компьютера в 512+ кубит и крайне тяжело во всех остальных случаях.

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

Пусть x(i) — это цены
Пусть d(i) = x(i) — x(i-1) — это приращения цен

Составим 2 выражения (формульный синтаксис взял из Excel — чтобы было меньше вопросов)

1. сумм(d(n)*(ЗНАК(d(n-1))+ЗНАК(d(n-2)))*abs(d(n-1)))
2. сумм(d(n)*(ЗНАК(d(n-1))+ЗНАК(d(n-2)))*abs(d(n-2)))

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

Qlua: получение данных из таблицы текущих торгов, создание таблиц в торговом терминале.

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

1. Получение биржевых данных через функцию getParamEx
2. Выгрузка списка параметров функции getParamEx через DDE из торгового терминала
3. Создание пользовательских таблиц в торговом терминале


Одна из особенностей работы через квик это то, что можно получать достаточно большой объем биржевой информации по интересуемым инструментам. Большинство других платформ для алгоритмической торговли и терминалов в РФ будут выдавать только цену открытия, максимум/минимум дня, последнюю цену, цену закрытия, объемы по инструментам и максимум еще 3-5 каких-то дополнительных пунктов. В распоряжении тех, кто использует qlua огромная матрица параметров таблицы текущих торгов.


Получить их можно через функцию getParamEx:

getParamEx(код класса актива, инструмент, параметр), где:

код класса: например в случае акций это «TQBR», а в случае срочного рынка «SPBFUT».
инструмент: тикер.
параметр – один из параметров для соответствующей группы инструментом (об этом подробнее ниже).


Функция возвращает таблицу со следующими полями:



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

Получение тикеров торгуемых бумаг через getClassSecurities

Благодаря наводке @quant_trader (за что отдельное спасибо!), переписал свой первый скрипт из поста https://smart-lab.ru/blog/916765.php по выгрузке из терминала всех торгуемых бумаг. Теперь всё выполняется штатными средствами с помощью getClassSecurities.

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

Особенности запроса. Если ввести:

sec_list = getClassSecurities("TQBR")<br />message(sec_list)

то терминал выдаст строку, где через запятую будут все тикеры, при этом видим, что список не полон, обрывается на RTSB:

Получение тикеров торгуемых бумаг через getClassSecurities

Как выяснилось, это связано только с ограничением самого терминала на вывод строки (не более 899 символов).

При этом если посмотреть длину строки, то будет видно, что символов больше:

sec_list = getClassSecurities("TQBR")
message(tostring(string.len(sec_list)))

выдаст 1281

Разбив строку по запятым получим весь массив тикеров для дальнейшей работы:



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

Доходность к получению

Напомним основные различия между YTM и HPR. 

YTM (yield to maturity)  — доходность к погашению, номинальная или эффективная, в зависимости от контекста. Это ставка дисконтирования, при которой приведенная стоимость потока платежей по облигации равна ее рыночной цене. Методики расчета YTM есть на сайте Мосбиржи. В Quik и брокерских приложениях указывается эффективная доходность. Ее можно вычислить и самостоятельно при помощи функции Excel ЧИСТВНДОХ(..) /XIRR(..)/ При расчете YTM  неявно предполагается, что облигация удерживается до погашения и все получаемые купоны реинвестируются под эту же ставку. Иными словами, это априорная оценка доходности, рассчитываемая заранее. 

HPR  (holding period return) — реализованная доходность за время удержания позиции. Именно она важна для инвестора, так как отражает  финансовый результат в течение срока владения облигацией. Этот срок может быть любым; предполагается, что по его истечении облигация продается или погашается.



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

Скучно стало на СЛ. Еще 1 гвоздь в крышку гроба гипотезы о нормальном распределении приращений рыночных цен

Добрый вечер, коллеги!

Давеча случилось чудо событие — удалось построить линейно-квадратичный прогноз будущего приращения цены по предыдущим приращениям.
И такой нарядный, что статистически значимо превосходит линейные прогнозы, а прибавка к эквити составляет +25% (в смысле умножить на 1.25, что немало, но это только начало).

Соответственно:
1. Если приращения цен образуют многомерное нормальное распределение (и пох на корреляции), то наилучший прогноз будущего приращения цены = условное МО = линейная функция от предыдущих приращений цен
2. Если нелинейный прогноз систематически работает лучше — про Гаусс можно смело забывать

Что вы думаете по этому поводу, коллеги?

P.S. Вопрос скорее к опционщикам, т.к. «нормальные» трейдеры (за редким исключением) не основывают свои ТС на гипотезе нормальности приращений цен

Вопрос к алготрейдерам про мани менеджмент (нужен ли он?)

Добрый вечер, коллеги!

Сразу оговорюсь, почему задаю сей вопрос только алготрейдерам. Дело в том, что мануальные трейдеры принимают решения настолько сложным и непонятным мне образом, что вполне могут генерить поток сделок с биномиальным распределением профитов и лоссов, успешно применять формулу Келли, наращивать капитал в разы и на порядки и не жужжать). В любом случае, проверить это практически невозможно).

У алготрейдеров (на первый взгляд) все проще.
1. Запустил тест системы, посмотрел на процент прибыльных и убыточных сделок, на среднюю прибыль и средний убыток
2. Посчитал по Келли плечо и/или долю капитала
3. Первый шаг на пути к хуллиарду сделан

В жизни все, конечно, не так. Жизнь — жестче © Армянское радио.

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

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

О возможности создания самонастраивающейся ТС (читать только алготрейдерам)

Доброй ночи, коллеги!

Начну, как водится, издалека.

Несколько лет назад на вопрос одной девушки в дискуссии про мой размер эквити я в шутку ответил «17 см» (в каждой шутке есть доля шутки). Это не привело к долгим дискуссиям, напротив, породило всего 2 каммента:
1. Один широко известный на СЛ писатель заявил, что у него 18 см (верю)
2. Другой, неизвестный мне писатель, заявил, что на СЛ встречается и 24 см, и даже больше, но без надобности об этом не пишут (тоже верю)

Несколько часов назад я запилил топик про частоту подстройки параметров ТС: Вопрос к алготрейдерам (smart-lab.ru)

2 человека ответили честно, у остальных (так получается) система сама подстраивается под рынок. Удивительно.

Я, вроде не самый тупой, но 25+ лет стремился к системе, которая настраивается сама (без моего вмешательства).
И только в прошлом году нашел семейство прибыльных ТС, которое зависит всего от 2-х параметров.
Оба параметра меняются медленно (адиабатически), так что значимо уплывают от оптимальных значений за 6-12 мес.

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

Лайфхак QLUA для загрузки больших данных

    • 27 апреля 2023, 22:45
    • |
    • GOLD
      Популярный автор
  • Еще
Мой дорогой друг, если ты гоняешь бэктесты в QLUA, то тебе регулярно приходится загружать исторические данные. Как правило, это текстовый файл с тысячами строк в формате D,T,O,H,L,C,V:

20220915,090000,61420,61497,61406,61464,241
20220915,090100,61460,61476,61420,61451,160
20220915,090200,61444,61489,61436,61479,185

Осмелюсь предположить, что эти строки ты заливаешь в массив с помощью string.match. Это готовый парсер строки с разделителем. Работает достаточно шустро. Я на нем сидел пару лет.

Когда данных не много, такой метод загрузки не напрягает. Но когда за день 20-30 раз загружаешь сотни тысяч или миллион строк, то потери времени становятся невыносимыми.

Стал искать способ ускорить этот процесс. И он таки нашелся. Выяснил следующее:

Если строки в файле истории сконвертировать в такой вид (делается 1 раз):

table.insert(MyTable,{«20220915»,«090000»,61420,61497,61406,61464,241})
table.insert(MyTable,{«20220915»,«090100»,61460,61476,61420,61451,160})
table.insert(MyTable,{«20220915»,«090200»,61444,61489,61436,61479,185})



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

Простой Грааль для curve-fitting

Добрый вечер, коллеги!

Все мы в разное время занимались подгонкой (curve-fitting) и всегда с разным успехом.
Главное в подгонке — убедить себя в том, что подогнанное решение будет работать и в будущем.

С этим есть большие сложности.

Субоптимальные алгоритмы для максимизации эквити можно легко получить на любом интервале. Вне зависимости от типа модели исполнения — маркетной, лимитной etc. Я специально пишу «субоптимальные», поскольку в полном объеме решение задачи максимизации эквити практически невозможно получить без квантового компьютера или чего-то в таком роде — такое решение неизбежно будет зависеть от огромного перебора данных. К счастью, приближения к идеальному решению получаются достаточно просто.

Тем не менее, все субоптимальные алгоритмы, максимизирующие результат эквити, начинают сразу косячить за пределами окна оптимизации. У меня не получилось побороть этот феномен, ну и я не слышал, чтобы кто-то в мире смог как-то его побороть.
Да, есть масса способов аутотренинга, вроде WTF WFT тестов, но это не более, чем способ убедить себя в успехе (IMHO).

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

Простой способ отличить закономерность от подгонки

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

Хочу поделиться с теми из вас, кому это интересно, простой, но полезной фичей.

Не секрет, что все алготрейдеры в том или ином виде используют подгонку для получения рабочих стратегий.
Кто-то делает это в лоб и надеется, что полученный методом curve-fitting алгоритм будет работать в будущем.
Кто-то дополнительно делает WTF WFT тесты и отбраковывает плохих кандидатов.
Кто-то просто использует моделирование для подбора оптимальных параметров системы.
Во всяком случае мне неизвестна ни одна алгоритмическая ТС вообще без параметров.

Ниже я расскажу, как отличить пруху от собственной гениальности потенциально проявившую себя закономерность от простого результата подгонки

1. Тестируем алго в достаточно большом окне (лично я использую 500000+ баров)
2. Тестируем алго в окне вдвое большего размера (1000000+ баров)

Если результат вырос в 2 раза (примерно) — возможно, наша ТС эксплуатирует некую стабильную закономерность
Если в 1.5 раза (примерно, точнее в sqrt(2)) — скорее всего, это тупо результат подгонки

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

....все тэги
UPDONW
Новый дизайн