HOME

Real DrawDown. Настоящий ДроДаун.

Еще совсем недавно я восторгался информативностью и подробностью репорта стратегии в Омеге. Особенно в сравнении с убогим отчетом Метастока. Однако, все течет, все изменяется. Неизбежно настали времена, когда поиски максимальных цифр дохода и вертикально уходящих ввысь кривых эквити сменились рутинными исследованиями методов выживания и снижения рисков в бурных водах рыночных коллизий. Приступив к изучению и реализации алгоритмов управления размером позиции (при неоценимой помощи Дмитрия Толстоногова (DT)), я с удивлением обнаружил, что большинство цифр из отчета стратегии Омеги моментально потеряли всякий практический смысл. Например, Омега считает значение максимального Дродауна в абсолютных величинах. Если на тестовом периоде стратегия начинает торговать с капитала в 10.000 руб., а заканчивает с размером счета в 150.000 руб., что мне скажет цифра максимального дродауна из отчета стратегии Омеги - 6.800 руб.? Это "ужасающая" просадка в 68% от 10.000, или приемлемые 4,5% потерь на последних сделках? Омега упорно хранит молчание по этому поводу, видимо с целью максимального сбережения наших нервных клеток.

Лирическое отступление и Position Sizing.

Я пришел на рынок давно и надолго. И не собираюсь завтра сворачивать лавочку, распихивая потными руками толстые пачки заработанных купюр по карманам. Поэтому, на данный момент, все мои поползновения в области Money Management ограничены только термином Position Sizing (управление размером поизции). Причем только в сторону уменьшения. Никакого левеража. В лучшем случае позиция будет открыта на весь объем лимита. Но чаще всего количество задействованных средств составляет лишь часть той суммы, которая отпущена на торговлю данным инструментом. Вот именно для определения оптимального размера этой части нам и нужно знать, какой максимально неблагоприятный Дродаун возможен при использовании той или иной стратегии.

Так как одинаковые методы определения размера открываемой позиции могут (и должны) использоваться в различных торговых системах, лучше всего записать эти алгоритмы в виде отдельных функций Easy Language, а затем вызывать их в нужных нам стратегиях в нужный момент. Для примера я приведу коды двух ММ-функций. В одной из которых, для определения количества приобретаемых бумаг используется простой вариант метода FixedFractional (открытие позиции на фиксированную часть счета), в другой - размером позиции управляет волатильность. Следует сразу оговориться, что конкретная реализация кодов может отличаться в зависимости от рынка, на котором осуществляется торговля. В приведенных ниже примерах все формулы адаптированы для торговли акциями РАО ЕЭС на ММВБ, с минимальным размером лота = 100 акций, сделки только лонг, цена исполнения - Close, размер начального капитала = 10.000 руб., полученная прибыль реинвестируется, плечо не используется.

1. $MM_Fract (функция)

{***************************************
Written by: Konstantin Kopyrkin (aka konkop) 23.06.2001
Description: This function calculate numbers of shares
based on fixed fraction of equity per trade
Copyright(c) konkop, 2001
****************************************}

Inputs: Capital(Numeric), {Initial Capital}
Lot(Numeric), {Minimum Lot size}
Fract(Numeric); {fixed fraction of equity per trade in percent}

Vars: Equity(0), Num(0);

Equity = Capital + NetProfit; {Total equity}

Num = floor(Equity*Fract*0.01/Close/Lot)*Lot; {Number of shares}

if close <> 0 and Num > Equity/close then
Num = Equity/close;

if Num < Lot then Num = 0;

$MM_Fract = Num;

2. $MM_Volat (функция)

{***************************************
Written by: Konstantin Kopyrkin (aka konkop) 23.06.2001
Description: This function calculate numbers of shares to trade
based on risk-volatility model
Copyright(c) konkop, 2001
****************************************}

Inputs: Capital(Numeric), {Initial capital}
Lot(Numeric), {Minimum Lot size}
LenVolat(Numeric), {Period ATR}
Risk(Numeric) ; {Percent of total capital under volatility risk}

Vars: Volat(TrueRange), Equity(0), Num(0);

Volat = Xaverage(TrueRange, LenVolat);
Equity = Capital + NetProfit; {Current equity}

if Volat <> 0 then
Num = floor(Equity*Risk*.01/Volat/Lot)*Lot; {Number of shares}

if close <> 0 and Num > Equity/close then
Num = Equity/close; {Number of shares with minimal risk}

if Num < Lot then Num = 0;

$MM_volat = Num;

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

Inputs: Capital(10000), {Initial capital}
Lot(100), {Minimum shares in 1 Lot}
Fract(50); {Fraction % of equity per trade}

Vars: Num(0);

Num = $MM_Fract(Capital, Lot, Fract);

Для стратегии с использованием риска от волатильности:

Inputs: Capital(10000), {Initial capital}
Lot(100), {Minimum shares in 1 Lot}
LenVolat(14), {Length of average volatility}
Risk(1); {Risk in percent of volatility}

Vars: Num(0);

Num = $MM_Volat(Capital, Lot, LenVolat, Risk);

Ну и, соответственно, в командах покупки в кодах сигналов необходимо добавить:

... Buy Num Shares at Close;

Обратите внимание, что в первом случае позиция всегда открывается на 50% текущего счета (Fract=50), во втором случае, для расчета размера позиции используется 1% от счета на 14-периодный ATR (Risk=1, LenVolat=14). Эти значения были выбраны с целью получения примерно одинакового дохода от каждого метода, на едином периоде испытаний и одной и той же стратегии. При этом, в использованной стратегии, средний риск на сделку составляет примерно 2% от счета при обоих методах Position Sizing.

Для примера, в качестве "базовой" системы, я использовал несложную стратегию на основе "Индикатора прорыва динамического ценового канала" ("Современный трейдинг" № 4, 2001г., стр.24-28) на часовых данных РАО ЕЭС (ммвб) с января 1998 г. по июль 2001г. (в других материалах на этом сайте, варианты подобной стратегии носят имя "NRTR" - Nick Rypock Trailing Reverse).

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

Рис.1. Темно-синяя линия - эквити стратегии с Fixed Fractional. Голубая линия - эквити стратегии на основе риска от волатильности.

Однако, если посмотреть в стандартный репорт стратегии Омеги, мы не сможем получить сколь-нибудь вразумительного ответа о преимуществах того или другого способа Position Sizing, применительно к данной торговой системе. Встроенные алгоритмы Омеги позволяют вести сравнительный анализ только двух методов Money Management - торговля фиксированным числом контрактов и торговля фиксированной суммой денег. В результате, выдаваемые в отчет цифры предназначены, скорее, для запутывания и успокоения пользователя в части вероятных рисков, а не для реальной оценки возможных (обязательных) неприятностей, возникающих на пути к заветному обогащению.

Первое же, чего мне сразу стало недоставать - процентное выражение Дродаунов от размера торгуемого счета.

Настоящий ДроДаун!

В данном контексте, под Дродауном мы будем понимать результат серии неблагоприятных сделок, которые препятствуют возникновению нового пика на кривой эквити торговой системы. Это не обязательно серия из только убыточных сделок. В период Дродауна могут входить и прибыльные сделки, которые, однако, не приводят к появлению нового максимального значения эквити. Причем, еще раз подчеркну, нас совершенно не должен интересовать Дродаун выраженный в абсолютных единицах. Просадка в 10.000 руб. от счета в 200.000 руб. составит всего 5% и вряд ли вызовет опасения. Однако просадка в 10.000 руб. от счета в 20.000 руб. составит уже "катастрофические" 50% и, скорее всего, не будет считаться приемлемой. Поэтому "важнейшим из искусств" для нас становится определение величины Дродаунов именно в процентах от текущего размера счета.

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

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

Для осуществления выше переречисленного я предлагаю использовать дополнительную функцию Easy Language, которая производит все необходимые расчеты и выводит результат в CSV-файл, который потом можно обрабатывать в Экселе:

$DD_Report (функция)

{***************************************
Written by: Konstantin Kopyrkin (aka konkop) 14.08.2001
Description: This function calculate and output strategy
percentage Profits, Equity and DrawDowns.
Copyright(c) konkop, 2001
****************************************}

Inputs:Capital(Numeric); {Initial Capital}

Vars: Trades(0), Equity(0), EquityPick(0), AbsPercProf(0), EqPercProf(0), DD(0), MaxDD(0);

Equity = Capital + NetProfit;
Trades = TotalTrades;

{Calculate closed trade percentage profit}
If EntryPrice(1)<>0 and Equity<>0 then begin
AbsPercProf = (ExitPrice(1)-EntryPrice(1))/EntryPrice(1)*100;
EqPercProf = PositionProfit(1)/(Equity-PositionProfit(1))*100;
End;

{Calculate closed trade percent DrawDown}
If Equity > EquityPick then EquityPick = Equity;
If Equity < EquityPick Then DD = IFF(EquityPick=0,0,-100*(EquityPick-Equity)/EquityPick) else DD = 0;
If DD < MaxDD Then MaxDD = DD;

{Output report}
If barnumber = 1 then
Print(File("C:\DD_report.csv"),"Ticker",",","Strategy",",","Interval",",","Date",",","Trades",",","Init_Capital",",",
"Equity",",","EqPick",",","Profit $",",","AbsPercProfit1 %",",","EqPercProfit %",",","Trade_DD%",",","Max_DD%");

If Trades <> Trades[1] then begin
Print(File("C:\DD_report.csv"),
GetSymbolName+","+GetStrategyName+","+NumToStr(BarInterval,0)+","+ELDateToString(Date)+","+NumToStr(Trades,0)+","+
NumToStr(Capital,0)+","+NumToStr(Equity,0)+","+NumToStr(EquityPick,0)+","+NumToStr(PositionProfit(1),2)+","+
NumToStr(AbsPercProf,2)+","+NumToStr(EqPercProf,2)+","+NumToStr(DD,2)+","+NumToStr(MaxDD,2));
End;

$DD_report = 1;

Теперь достаточно в конце кода исследуемой стратегии добавить строчку:

Value10 = $DD_Report(Capital);

И все необходимые данные, после нанесения стратегии на график, будут записаны в файл C:\DD_report.csv, который в Экселе будет выглядеть следующим образом:

Ticker Strategy Interval Date Trades Init_Capital Equity EqPick Profit $ AbsPercProfit1 % EqPercProfit % Trade_DD% Max_DD%
EESR98~2.CSV 1_NRTR_MM_vol 60 21/01/1998 1 10000 9850 10000 -150 -3.07 -1.52 -1.5 -1.5
EESR98~2.CSV 1_NRTR_MM_vol 60 28/01/1998 2 10000 9682 10000 -168 -5 -1.74 -3.18 -3.18
EESR98~2.CSV 1_NRTR_MM_vol 60 03/02/1998 3 10000 9772 10000 90 3.85 0.92 -2.28 -3.18
EESR98~2.CSV 1_NRTR_MM_vol 60 10/02/1998 4 10000 9706 10000 -66 -1.37 -0.68 -2.94 -3.18
EESR98~2.CSV 1_NRTR_MM_vol 60 12/02/1998 5 10000 9530 10000 -176 -2.67 -1.85 -4.7 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 03/03/1998 6 10000 11012 11012 1482 17.45 13.46 0 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 05/03/1998 7 10000 10919 11012 -93 -1.67 -0.85 -0.84 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 11/03/1998 8 10000 11530 11530 611 7.07 5.3 0 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 23/03/1998 9 10000 11275 11530 -255 -2.55 -2.26 -2.21 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 31/03/1998 10 10000 11135 11530 -140 -2.54 -1.26 -3.43 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 27/04/1998 11 10000 11652 11652 516.6 4.64 4.43 0 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 06/05/1998 12 10000 11337 11652 -315 -3.4 -2.78 -2.7 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 19/05/1998 13 10000 11292 11652 -45 -2.04 -0.4 -3.09 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 21/05/1998 14 10000 11148 11652 -144 -4 -1.29 -4.33 -4.7
EESR98~2.CSV 1_NRTR_MM_vol 60 28/05/1998 15 10000 11088 11652 -60 -2.63 -0.54 -4.84 -4.84
EESR98~2.CSV 1_NRTR_MM_vol 60 04/06/1998 16 10000 11863 11863 775 31.96 6.53 0 -4.84

Пояснения, пожалуй, требуют только два столбца: AbsPercProfit - это прибыль(убыток) в процентах от текущего размера счета, которая была бы получена в сделке при полном задействовании доступных денежных средств. EqPercProfit - прибыль(убыток) в процентах от текущего размера счета, реально полученная с учетом Position Sizing.

Данный файл можно самостоятельно исследовать средствами Эксель, строя различные диаграммы. Однако, более интересна возможность сравнения результатов стратегий с различными методами Money Management. Для этого, на отдельные листы файла Эксель были помещены полученные отчеты от обеих систем и произведено их сравнительное исследование. Полученные кривые дохода Вы уже могли видеть на рисунке выше. А вот как выглядят ДроДауны:

Рис.2. Синяя линия - ДроДауны торговой системы на основе FixedFractional. Желтые - ДроДауны с использованием риска от волатильности.

Обратите внимание, насколько более глубокими были просадки эквити с применением FixedFractional в начале периода испытаний. Да, да. Это те самые, пресловутые, лето-осень 1998 года. Явно, методы на основе волатильности были в тот период более предпочтительны. Однако, в правой части диаграммы, их преимущество уже исчезает. Теперь мы можем наглядно наблюдать, какой ущерб нашему капиталу наносят неблагоприятные периоды торговли. Причем, именно в процентах от текущего размера счета. Можно видеть, что метод фиксированной части (FixedFractional) допустил максимальную просадку счета больше 12%, в то время как метод риска от волатильности не терял больше 10% от счета за весь период испытаний. При том, что общий доход составил одинаковое значение. Впрочем, выводы можно делать самые разные, но целью данного материала является не столько сравнение конкретных методов ММ, сколько получение в удобоваримом виде достоверных данных из стратегии для дальнейших исследований.

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

Рис.3. Синие столбцы - прибыль(убыток) сделки в процентах от счета с использованием FixedFractional. Красные столбцы - прибыль(убыток) в процентах от счета с использованием риска от волатильности.

Ну и, наконец, можно использовать столбец таблицы AbsPercProfit для оценки эффективности применяемого метода ММ в каждой конкретной сделке. В случае с FixedFractional можно даже не смотреть на полученный результат - с использованием фракции от счета в 50%, каждая сделка принесет примерно половину прибыли(убытка) от максимально возможного. А вот с методом риска от волатильности интересно взглянуть, насколько эффективно используется доступный капитал:

Рис.4. Синие столбцы - вероятная прибыль(убыток) с максимальным задействованием доступных средств. Красные столбцы - прибыль(убыток) полученные с помощью метода риска от волатильности. Результаты так же даны в процентах от текущего размера счета.

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

Файл Эксель, в котором были получены приведенные выше примеры, можно взять здесь. Однако сразу хочу предупредить, файл лишен какой-либо автоматизации (макросы и т.п.), поэтому все преобразования надо производить вручную. На листы "Report1" и "Report2" копируются данные из отчетов DD_report.csv, полученные в каждой из стратегий. На листах "Profit1" и "Profit2" сравниваются значения AbsPercProfit и EqPercProfit каждой из стратегий (эффективность использования средств). На листах "Profit Compare", "Equity Compare" и "DD Compare" сравниваются, соответственно, прибыль, эквити и ДроДауны каждого метода ММ. Диапазоны исходных данных для диаграмм надо корректировать вручную, в каждом конкретном случае.

Now available! (18.12.2001)

Файл Excel с макросом "DD_compare" автоматически обрабатывающий отчеты DD_report.csv.

 

(с) konkop, 2001.

HOME

 

Hosted by uCoz