Про стоп-лоссы

Когда в трейдерских тусовках разговор заходит на тему стоп-лоссов начинается holly war, ставить не ставить, где ставить и прочая лубудистика.

Но самая большая ошибка на мой взгляд, в том что люди считают, что стоп-лосс является неким элементом ММ или Риск Менеджмента. Особенно страдают неокрепшие трейдерские умы от прочтения книг, где им предлагается ставить стоп не более 2%, на минимуме предыдущей свечи и прочие “классические” методы аля “cut your losses, let profit run”

С позиции кванта, стоп-лосс – это такой же способ выхода из позиции как тейк-профит, n-Bar stop, или стандартный системный выход. Но сегодня мы о стопах и ММ тут вообще ни при чем. Да соглашусь, что уровень стоп-лосса влияет на риск, но на этапе разработки системы, при чем риск находит объективное отражение в параметрах системы. ММ и РМ это совершенно другой этап System Development Framework, и лучше его оставить на потом чтобы не забивать голову лишней информацией и действовать последовательно.

Любителям коротких стоп-лоссов посвящается

Бытует мнение, что короткий стоп пропорционально уменьшает риск, но это не совсем так, чтобы ставить короткие стопы нужен идеальный тайминг входа. А когда с таймингом все не просто, рынок с упорством вышибает все эти стопы, тут и рождаются все эти басни про кукловодов…

Стоп лосс – ставится не для того, чтобы выйти из рынка когда он пойдет против позиции. Он ставится для того, чтобы выйти когда рынок камнем будет падать, т.е. считаю что стопы ставятся не для того чтобы срабатывать в штатной ситуации. Считаю что приемлемым уровнем выхода по стопу 5-10% от выборки, стоп – это фол последней надежды для системы. В штатной ситуации у системы должно быть правило(а) на выход из позиции, т.н. интеллектуальный стоп, когда система решает, что рынок изменился и пора выходить. Лейтмотив этого поста – стопы надо ставить достаточно далеко от рынка, ибо они последний рубеж нашей обороны, на события как были недавно в Америке например.

Кстати в Амиброкере можно легко выставлять стопы в UnitSize (см. пред посты) Де факто получается адаптивный к волатильности стоп и тейк.

ApplyStop(stopTypeProfit,stopModePoint, 2700 / UnitSize,1);
ApplyStop
(stopTypeLoss, stopModePoint1400 / UnitSize,1);

 

Стопы-лоссы коварны

Хуже чем ставить близкие стоп-лоссы, является подгонка стопо-лоссов системы в отсутствие качественных выходов. Я обжегся в этом году неплохо на том, что заоптимайзил систему без edge. В итоге получил по шее от рынка.

Легким движение оптимизатора, система превращается, система превращается….

система превращается, в сущщий кошмар в 2010 году.

Мораль сей бастни: наличие стоп-лосса и тейка, как бы это красиво не выглядело на еквити не гарантирует работоспособности в будущем, когда система начнет ломаться никакие стопы не спасут.

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

Stridsman – Trading Systems That Work

Прочитал пару книг этого дядьки, очень понравились его подходы к оценке систем, наводят на много мыслей. Жаждущим идей, их там есть) Книги можно скачать с паука.

Решил вот запостить пару заметок из моей work book. Автор предлагает несколько простых и понятных метрик с помощью которых можно оценить качество системы и индивидуальных трейдов в частности.
 

Встал вопрос насколько эффективно та или иная система использует возможности которые ей представляет рынок, т.е. насколько хорош тайминг системы. Буквально сразу нашел описание подобной проблематики в книге Stridsman – Trading Systems That Work. Г-н Strindsman описывает несколько путей решения и методик оценки:

1. Относительная эффективность – оценка эффективности сделки в % относительно входа/выхода и максимальных/минимальных движений цены.

Относительная эффективность сделки

Для лонгов:

Общая = (ExitPrice – EntryPrice) / (HighPrice – LowPrice)

Вход = (HighPrice – EntryPrice) / (HighPrice – LowPrice)

Выход = (ExitPrice – LowPrice) / (HighPrice – LowPrice)

Для шортов:

Общая = (EntryPrice – ExitPrice) / (HighPrice – LowPrice)

Вход = ( EntryPrice – LowPrice) / (HighPrice – LowPrice)

Выход = (HighPrice – ExitPrice) / (HighPrice – LowPrice)

Для данного подхода вместо цен актива можно использовать реальный профит полученные при размере позиции равной 1 юниту.

Полученная оценка будет выражена в %. 

 

2. Эффективность на основе оценки DrawDown разных фаз сделок – любая сделка может быть разделена на несколько фаз имеющих DrawDown.

Для начала перечислим все типы DD:

• Start Trade DrawDown (STD) – просадка от точки входа в сделку до минимального уровня цены в этой сделки

• End Trade DrawDown (ETD) – просадка от максимального уровня цены в сделки до цены закрытия

• Closed Trade DrawDown (CTD) – зафиксированная просадка по закрытой сделке

• Total Equity DrawDown (TED) – общая просадка Equity т.е. MaxDD

ЛЮБАЯ СДЕЛКА включает в себя 3 фазы: STD, фаза основного движения, ETD.

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

MAE and MFE
• Разницы м/у MAE и STD практически нет, она скорее философская. Суть в том что улучшение показателей STD (тайминг входа) достигается путем усовершенствования входов, а улучшение MAE за счет улучшения stop-loss и тайминга выхода. Однако нужно учитывать что MAE может произойти в самом конце сделки, т.е. фактически после STD

• В свою очередь между MFE и ETD существует принципиальная разница, MFE – это максимальный потенциальный профит , а ETD = MFE – ExitPrice.

Для оценки эффективности работы системы можно анализировать ScatterPlot :

Profit/MAE

 

Profit/MFE

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

Drawdown Freak Index

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

Цитата:

A bad situation occurs when the median drawdown is larger than the average drawdown. Then the smaller drawdowns are in minority, representing lhe freak occurrences, all the more so, the closer the average drawdown is to the smallest drawdown. To express this mathematically, divide the average drawdown, by the median drawdown. The higher this value is above one. the more freakish the large drawdowns behind the large average drawdown. Similarly, dividing the maximum drawdown by the average drawdown, gives an indication of how large the maxim uum drawdown is in relation to the average drawdown. with a value of two indic catin? that the maximum drawdown is twice as large as the average drawdown. An alternative is to divide half the maximun drawdown by the average drawdow n. so that the 2: 1 relationship will be represented by the value one.

Multiplying these formulas with each other gives us a combined value for how freakish the average drawdown is in relation to the median drawdown, and how freakish the maximum drawdown is in relation to the average drawdown:

DFI = (AD / MeD) * [(MaD / 2) / AD] = (MaD /2) / MeD

AD – Avg. DD

MeD – Median DD

MaD – Maximum DD

System Development Framework

Создание торговой системы – сложнейшая задача, речь идет конечно же о Algorithmic Trading или Quantative Trading, а не о непостижимом в виде графических построений ТА и пр. волн и крокодилах :) 

Наверное самое сложное в создании системы – это поиск идеи, при этом идея должна быть достаточно робастной чтобы в первоначальном виде показывать потенциал прибыли который может быть дожат в дальнейшем с помощью оптимизации и доводки системы до ума в целом. Дальше идет череда тестов/оптимизаций, установка лимитов на систему и отправка ее в бой, эта цепочка на мой взгляд содержит в себе очень много действий больше чем человек может позволить себе контролировать одновременно (около 7 факторов одновременно – это предел, как говорят психологи).

Чтобы упростить подход к комплексной картине System Development я разделил его условно на 4 слоя, в моем TODO List идет именно такая градация, и тот или иной новый проект я отношу к тому или иному слою:

  • Слой идей – слой на $1 мио, те идеи из которых могут вырасти торговые системы
  • Слой реализации идей – Framework превращающий идею в набор правил, тестирование и оптимизация
  • Слой управления системами – очень важный слой, сюда включены правила оценки эффективности систем (относительно рынка – EdgeTest), оценка рисков  (Bootstrapping, Monte-Carlo VaR), правила определения какие лимиты раздать системам и по каким критериям, критерии поломки/консервации систем и пр.
  • Технический слой– сюда относятся все проекты по реализации технической части для реализации реальной торговли на рынке (ПО для Роботов)

Настоящей библией в понимании структуры и всей картины SysDev Framework стала ветка System Development with acrary на ET, во многом я перенял подход автора ветки, во многом его дополнил и видоизменил, но ни разу не пожалел что в свое время несколько раз перечитал ветку с карандашем, до полного понимания что там написано :) Но главное что я уяснил, нужно иметь стратегическое видение на собственную торговлю, от рассматривания результатов отдельных систем стоит переходить к общим результатам портфеля систем.

В своих постах постараюсь, раскрыть тему эффективности и устойчивости торговли, бОльший упор делая на Слой управления системами.

Читать далее: System Development Framework II

Создание торговой системы

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

Какие подходы существуют к выбору сайза для прикидочных тестов:

  • Тест 1 лотом/контрактом  – самый простой подход, используется как правило для фьючерсов
  • Тест с привязкой к портфелю – подход как правило применим для акций (проблема тут состоит в привязке к начальной сумме на счете, а все результаты как правило считаются в % от портфеля, при этом возможно реинвестирование которое искажает картину)

Проблем с этими подходами не было, если бы нам не требовалось проводить дополнительные расчеты с композитными портфелями систем – так буду называть систему состоящую из других систем. Другая проблема, что эти подходы абсолютно не учитывают волатильность инструментов на котором они тестируются и волатильность периодов, соответственно они будут давать результаты разного порядка.

Каким же образом мы можем привести результаты тестов на совершенно разных инструмента, периодах и таймфреймах к общему знаменателю?

Ответ: отнормировать сайз которым входит система на волатильность инструмента, при этом отвязавшить от начального капитала, и проводить все расчеты в деньгах. Такой подход позволяет отличить реальную доходность системы на периоде, а не то что она попала в высокую волатильность.

Для иллюстрации:

Для простоты возьмем элементарное подобие системы: купить на открытии продать на закрытии дня, еще для упрощения задачи тестируем на 1 инструменте – индексе РТС (дневки 1995года).

Задача: количественно оценить эффективность системы в различные периоды времени.

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

1. Тестирование без реинвестирования – думаю всем ясно почему. Как частный случай – будем тестировать 1 лотом.

2. Отвязка результата от первоначального капитала – тут вопрос более тонкий, т.к. тестируем 1 лотом мы можем абстрагироваться как от начального капитала, так и стоимости удержания позиции, естесственно мы потеряем такую оценку как профит на вложенный капитал. Но отвязка от капитала умышленна дальше попробую объяснить почему, но сейчас примем как данность, что результативность системы мы будем оценивать в деньгах.

3. Оценка показателей системы в денежном выражении (уход от относительного изменения) – в связи с тем что мы отказались от стоимости позиции и начального капитала естесственно мы не можем посчитать профит в %. Умышленно я не считаю его от изменения цен в %, т.к. мой подход подразумевает мультиинструментальность (стоки, фьючи, форекс, сложные композитные инструменты типа пар и т.п.) Все это дело я хочу сравнивать между собой в рамках одного подхода, и естесственно нужно как-то нормировать, об этом далее.

Задача оценить ее ежемесячные доходности и сравнить между собой. На суд общественности выложу 3 графика с месячными доходностиями этой системы но с разнымы подходами к выбору сайза:

1. Сайз – 1 лот

2. Сайз – тарим на все деньги с реинвестированием.

3. Сайз – нормированный (об ентом дальше)

Вопрос: можем ли мы глядя на эти графики сказать, что система отработала лучше/хуже в 2004 году чем например в 2008 ?

Месячные доходности при тестировании 1 лотом

Месячные доходности при тестировании всем сайзом

Месячные доходности при тестировании 1 Unit (нормировка на волатильность)

Посмотрим на диаграммы доходностей с сайзом "на все деньги + реинвест", и с нормированным сайзом (см. рисунки выше). Что мы видим в контексте 2004 и 2008 года? В первом случае (где на все деньги таримся), "+" и "-" результаты в 2004 по масштабу явно отличаются от 2008 года, можно ли сделать вывод – система отработала в 2004 году хуже т.к. принесла меньше профита? Думаю нельзя, т.к. любая система зависит от рыночной волатильности, которая по сути влияет на профит. Во втором случае мы как раз нормируем наш сайз на рыночную волатильность, и приводим доходности системы к общему знаменателю. Месячные доходности нашей системы теперь распределены более менее равномерно, и мы можем сравнивать помимо абсолютного профита, еще просадки, средние сделки в пунктах, станд. отклонения и др. абсолютные показатели систем(ы) между собой.

Продолжение следует…

Шаблон торговой системы для Amibroker

В предыдущем посте были приведены доказательства преимуществ нормированного по волатильности сайза, называю его UnitSize, он считается как отношение константы K к некоему динамическому показателю волатильности рынка, я взял 10ти дневный ATR(). Важно понимать что 10 дневный считается именно на дневном таймфрейме, в т.ч. для внутридневных систем идет обращения к старшему фрейму, важно то чтобы для любого таймфрейма одного инструмента размер UnitSize был эквивалентен дневному!
Ниже “шапка” кода для Амиброкера которая идет для любой моей системы:

SetOption( "InitialEquity", 100000);
SetOption( "DisableRuinStop", True); 
SetOption( "AllowSameBarExit", True); 
SetOption( "ActivateStopsImmediately", True);
SetOption( "MinShares", 0.0001);
SetOption( "AllowPositionShrinking", True);
SetOption( "MinPosValue", 0);
SetOption( "MaxOpenPositions", 100); 
SetOption( "FuturesMode", True);
SetOption( "InterestRate", 0);
SetOption( "PriceBoundChecking", False);
SetOption( "AccountMargin", 100);
SetOption( "ReverseSignalForcesExit", False); 
SetTradeDelays(0,0,0,0);  

//Расчитываем UnitSize

TimeFrameSet(inDaily);

  UnitDaily = Nz(1000/ATR(10));

TimeFrameRestore();

UnitSize = TimeFrameExpand(UnitDaily, inDaily, expandFirst);

MarginDeposit = 1;

PositionSize = UnitSize * MarginDeposit;

SetBarsRequired(sbrAll,sbrAll); // Включаемвсебары


UPD. 8.09.2010 У некоторых людей получались нули на выходе при тестах с UnitSize, из-за того что подход позволяет использовать дробные лоты < 0, задайте в окне Information и настройках тестера поле RoundLotSize = 0

Теперь усложним задачу, хочу посмотреть как моя “супер система” из предыдущего поста отработает на индексе S&P500 (^GSPC:Yahoo). Опять же месячные доходности, обратите внимание на порядок цифр доходностей индекса РТС(см. предыдущий пост, последний рис.) и SP500 (5000;-5000).

Ну и пожалуй еще добавлю 10y TREASURY NOTE (^TNX:Yahoo) – порядок цифр тот же (5000;-5000). Для интереса можете на Yahoo прикинуть цены и волатильности каждого инструмента

Что это нам дает?
В итоге мы получили возможность сравнивать результаты систем на любом инструменте, это касается не только месячных доходностей но и Equity, Avg Profit и пр. показателей эффективности систем.
UnitSize – это фундамент System Development Framework который я использую, хочу отметить нормировка по волатильности не является особой методикой ММ, тут задача абсолютно прикладная – привести системы к общему знаменателю. А уже к нормированным результатам мы можем применять абсолютно любые схемы ММ.

Мультисистемный тестер стратегий (часть 1)

Давно задался вопросом: как оттестировать в один прогон и построить Equity несколько систем одновременно. Не прибегая к танцам с бубном вроде объединения данных Equity каждой системы или написанию своего тестера стратегий.

Идею мне подкинул Олег (000), суть ее проста:
1. Создаем несколько клонов-инструментов (с одинаковыми данными и именами например EESR_1, EESR_2, EESR_N – по количеству систем)
2. Создаем один файл мега-систему, которая содержит в себе несколько систем.
3. В этом файле настраиваем фильтры для каждой системы(чтобы она торговала только определенной серией инструментов *_2 например)
4. Задаем объем капитала каждой системе
5. И тестим.
На выходе мы получаем, уже составную Equity, посчитанные общие к-ты Шарпа, CAR/MDD и т.п.

Основной вопрос, что при тесте 10 систем на 100 инструиментах, ручками все переименовывать не хватит жизни, поэтому мое врожденное чувство лени заставило меня накатать следующий скриптик: который помогает сделать(или очистить ранее созданную) группу клонов-инструментов для дальнейшего тестирования.
Читать далее…

Мультисистемный тестер стратегий (часть 2)

Итак первый этап пройден мы создали набор клонов-инструментов теперь очередь за стратегией:
Чтобы сделать бэктестинг стратегий на множестве инструментов придется немного поработать руками, структура afl кода должна состоять из нескольких уровней:

1 уровень – Мега стратегия, которая объединяем в себе множество стратегий, именно этот afl файл должен быть загружен в тестер и прогоняться на истории
2 уровень – множество файлов с системами они включают в себя правила торговли

Внимание: не копируйте нижеприведенный код, из-за особенностей показа кавычек, амиброкер не будет его правильно компилировать. Скачайте прикрепленный файл ниже по ссылке

Давайте разбираться подробнее:
Читать далее…

Тестирование портфеля МТС и составная equity

Любой трейдер у кого больше одной системы наверняка задавался вопросом, о том, как его системы будут работать вместе. Следующий код позволяет складывать equity нескольких систем в одну и тестировать результат на доходность и просадку.

Дополнительные возможности

1. Можно добавить бенчмарк, и посмотреть как составная эквити ведет себя по сравнению с индексом.
2. Можно также рассчитать к-ты Шарпа, Альфа и Бета.
3. Для каждой системы можно задать свой вес при тестировании.

Читать далее…