Оценка ожидаемой максимальной просадки с помощью Монте Карло

До недавнего времени я считал, что эта штука является моим ноу-хау. Оказалось, не я один использую эту технику. Может быть, это вообще статистический баян. И все же, кажется, это самая подходящая тема для первого топика.

Допустим, у нас есть стратегия, которая сгенерировала симпатичную кривую эквити. Как и у любого порядочного грааля, у нее есть свои провалы. Тем не менее, реализованная максимальная просадка нас вполне устраивает, и мы решаем пустить стратегию в продакшн.

Читать дальше →

Еще о MaxLoosingStreak и MO_LoosingStreak

Чтобы закрыть тему о максимальной серии убыточных сделок, я решил написать пост, разъясняющий некоторые тонкие моменты.

В разных исследованиях приводилось два варианта формулы:

1) MaxLoosingStreak = LN(1 / nTrades) / LN(1 — ProbWin)

(Здесь, и далее: для краткости в этом посте не раскрываются ипользованые обозначения, см. ссылки на предыдущие посты)

Эта формула, упомянутая у ubertrader подробно расписанная в одном из моих предыдущих постов рассчитывает максимальную длину серии убыточных сделок со степенью достоверности, зависящей от числа проведенных трейдов.


Читать дальше →

Сказка из чата о МО серии лоссов

20:35:50 ‹kent› начнем про кубик и коробки
20:36:02 ‹kent› возьмем шестигранный кубик
20:36:16 ‹kent› вот есть Успех=(выпадение 1) с вероятностью p=1/6
20:36:30 ‹kent› есть Неудача=(выпадение любой цифры КРОМЕ 1) с вероятностью q=(1-p)=5/6
20:36:54 ‹kent› кубики есть у всех!?
20:37:11 ‹kent› кидаем кубик до наступления события Успех, т.е. кидаем и ждем когда выпадет 1
после выпадения 1 надо подсчитать число Неудач, чему равно мат.ожидание числа неудач?
20:42:23 ‹kent› ващето 5
20:42:47 ‹kent› ну тут тупо должно быть
20:43:01 ‹kent› каждая цифра выпадает по разу
20:43:32
Читать дальше →

Python: формула оценки последовательности убыточных сделок (часть 2)

Как мы выяснили здесь и здесь ubertrader в оригинальном посте-исследовании сравнивал результат формулы для MaxLoosingStreak, которая выдает результат с определенной степенью достоверности, зависящей от числа проведенных трейдов, c AvgStreak (среднее значение всех испытаний Монте-Карло). Т.е. брал среднее значение распределения длины убыточных серий.

Математически это не совсем корректно. И в данном посте мы подкорректируем методологию и скрипт на Python чтобы сравнивалась одна и та же величина, вычисленная по аналитической формуле, и численным методом.

Читать дальше →

Наивероятнейшая длина серии убыточных сделок

Система совершила кол-во сделок равное nTrades
тогда

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

МО_LoosingStreak = — Ln(1 + ProbWin * nTrades)/ Ln(1-ProbWin)
(ожидаемое максимальное количество лоссов подряд)

===========================
Где:
MO_LoosingStreak — наивероятнейшая длина максимальной серии убыточных сделок т.е.
наиболее вероятное максимальное количество лоссов подряд т.е. мат.ожидание
максимального количество лоссов подряд, т.е. наиболее типичное число лосей

nTrades — количество проведенных по системе трейдов;
ProbWin —
Читать дальше →

Исследуем формулу оценки max loosing streak

Недавно ubertrader написал пост, в котором использовал формулу для оценки максимального количества убыточных сделок подряд на основе вероятности прибыльной сделки и количества трейдов (ProbWin и nTrades). Сама формула выглядит следующим образом:

MaxLoosingStreak = LN(1 / nTrades) / LN(1 — ProbWin)

Где:
  • MaxLoosingStreak — ожидаемая величина максимальной длины серии убыточных сделок (максимальное количество лоссов подряд);
  • nTrades — количество проведенных по системе трейдов;
  • ProbWin — вероятность выигрышной сделки, [0..1). Мы исходим из предпосылки что данная величина является константой,

Читать дальше →

Python: формула оценки последовательности убыточных сделок

Риск системы, и ее просадка во многом зависит от последовательности нескольких убыточных сделок. Как правило MaxDD возникает как серия из нескольких убытков, а не как один большой лось.

Существует аналитическая формула, которая позволяет оценить ожидаемое количество убытков подряд, на основе количества сделок в системе и вероятности выигрыша.

LoosingStreak = LN(1 / nTradesCount)/LN(1 — WinProbability)

FYI: Логарифмы натуральные. WinProbability — проценты в долях единицы, 0.6 = 60%

Я решил эту формулу численно перепроверить и написал простенький скрипт на Python.

Читать дальше →

Python: скрипт анализа рисков системы

Небольшое дополнение к постуот aspirin и Avals . Простенькая число-дробилка, которая показывает ожидаемые параметры по системе, рассчитывает NetProfit, MaxDD, PF, %win, и число убыточных сделок подряд.

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

Вот результат моделирования «системы» у которой avgwin = 50, avgloss = 50, win% = 50%. Теоретически мы знаем, что МО этой системы = 0. Но в зависимости от того, как падает наша монетка, мы можем получить как + так и
Читать дальше →