image.thumb.png.25e6eb4867f80490088f2103474e1c66.png

 

Альтернатива стоп-лоссу в алгоритмических торговых стратегиях

 

Если вы следите за моей работой в течение какого-то времени, то вы знаете, что я провел много исследований методов выхода из сделок. 

 

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

 

По этой причине в последнее время я протестировал множество алгоритмических торговых стратегий без стопов.

 

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

 

Резюмируя негативные комментарии, становится ясно, что большинство трейдеров обязательно применяют стоп-лоссы в своих алгоритмических торговых стратегиях. Для многих людей наличие стоп-лосса является чем-то само собой разумеющимся. Я понимаю это и согласен с этим – ПРИ УСЛОВИИ, ЧТО ВЫ ВКЛЮЧАЕТЕ СТОП-ЛОССЫ В СВОИ СТРАТЕГИИ ПОСЛЕ ТОГО, КАК УЗНАЕТЕ ВСЕ ФАКТЫ О НИХ:

  • Стоп-лоссы, как правило, ухудшают производительность торговли. Это цена  безопасности, которую они (предположительно) приносят. При проведении тестов на исторических данных я не видел, чтобы добавление стоп-лосса значительно улучшало производительность стратегии. Они обычно снижают доходность и не улучшают соотношение прибыли к риску.

  • Стоп-лосс оказывает огромный психологический эффект, потому что вы можете крепко спать, зная, что у ваших открытых позиций есть стопы.

  • В случае шокирующего события стоп-лоссы могут оказаться бесполезными. Цена может пройти с гэпом через ваш стоп, и он в конечном итоге не исполнится.

  • Многие профессиональные трейдеры не применяют стопы. По крайней мере, так они утверждают. Возможно, они лгут, кто знает.

  • Стоп-лоссы обычно размещаются на «очевидных» уровнях, и рынок, похоже, охотится на них перед разворотом.

  • Трейдеры, как правило, устанавливают слишком жесткие стопы. Многие трейдеры устанавливают стопы на фьючерсе E-mini S&P (ES) размером всего лишь в $ 50, думая, что они спасут их от падения цены. Но из-за волатильности рынка 10 стопов по $ 50 сработают намного быстрее, чем 1 стоп-лосс на $ 500.

  • Стоп-лосс действительно закрывает убыточную сделку и поддерживает дисциплину. Трудно слить счет всего за несколько сделок, если вы ставите разумный стоп-лосс.

Хорошо, я признаю, что предвзято отношусь к стопам, хотя сам использую их во многих своих стратегиях. И признаю, что иногда я получал ожоги 3-й степени из-за отсутствия стопов. Помню, как я торговал кофе без стопов, в результате чего эта сделка стоила мне более $ 15 000 за контракт! Грубо говоря, это было отстойно.

 

Учитывая всё это, я всегда задавался вопросом: что, если все мы ошибаемся в отношении стопов? Традиционное мышление говорит, что стопы должны применяться в отдельных сделках. Но как насчет альтернативы – например, стоп-лосса, основанного на месячной сумме убытков? В рамках такой стратегии каждая отдельно взятая сделка может иметь или не иметь стоп-лосс, но, независимо от этого, если в течение месяца стратегия накапливает убыток в размере $ 1 000, $ 2 000 или $ 5 000, то, вероятнее всего, следует закрыть все позиции и сделать перерыв до следующего месяца, после чего возобновить торговлю. Почему бы не поступить таким образом?

 

Когда у меня возникают подобные сумасшедшие мысли, я обычно хочу это доказать или опровергнуть. Я провел 50 миллионов бэктестирований в течение 6+ месяцев, чтобы подтвердить и улучшить свой подход к разработке стратегий. Все свои решения я принимаю на основе данных.

 

Итак, давайте проведем несколько тестов...

 

В этой статье я поделюсь с вами своими находками. 

 

Могут ли алготрейдеры использовать месячные «стопы» для повышения производительности стратегии?

  • Часть 1. Общее описание сетапа и результаты использования стопов, основанных на заданной сумме в долларах

  • Часть 2. Результаты использования стопов, основанных на ATR

  • Часть 3. Результаты использования стопов, основанных на заданной сумме в долларах + ATR

  • Часть 4. Результаты вариаций тейк-профитов, основанных на заданной сумме в долларах

  • Часть 5. Еще одно улучшение концепции?

  • Заключение 

Прежде чем начать разбираться во всем этом, должен сказать, что я не собираюсь обременять вас теорией, тяжелыми математическими уравнениями и тому подобным. Я также не буду пытаться обосновать свои выводы статистическим анализом, доверительными интервалами и т. д. Я трейдер, а не математик-теоретик и не статистик. Я просто покажу результаты и дам вам свою интерпретацию, основанную на моем торговом опыте. Например, если два случая дают разницу в результатах всего лишь в 5%, я не буду отдавать предпочтение какому-то одному из них. Такая небольшая разница может быть важна для аналитиков данных, но для такого трейдера, как я, эти результаты, вероятно, будут бессмысленными. Если различия не являются существенными, моя философия заключается в том, что нет смысла усложнять стратегию ради небольшого улучшения. Мой девиз: простота – залог успеха.

 

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

 

Рынки

 

Я собираюсь протестировать 42 фьючерсных рынка:

 

@AD, @BO, @BP, @C, @CC, @CD, @CL, @CT, @DX, @EC, @ES.D, @ES, @FC, @FV, @GC, @HG, @HO, @JY, @KC, @KW, @LC, @LH, @MP1, @NG, @NK, @NQ, @O, @OJ, @PL, @RB, @RR, @RTY, @S, @SB, @SF, @SI, @SM, @TU, @TY, @US, @W, @YM

 

Это очень диверсифицированная группа инструментов в 7 основных секторах:

  • Валюты

  • Сельское хозяйство

  • Энергетика

  • Металлы

  • Фондовые индексы

  • Процентные ставки

  • Мягкие товары

Таймфреймы

 

Я собираюсь протестировать эти рынки на 5 различных таймфреймах:

 

1440-, 720-, 360-, 180- и 90-минутном. 

 

1440-минутный таймфрейм главным образом является дневным таймфреймом (но не использует расчетную цену биржи для закрытия), на других же таймфреймах обычно формируется несколько баров в день. Но меньшие таймфреймы не означают, что они предназначены только для внутридневных торговых стратегий. Вы можете получить сигнал на 90-минутном таймфрейме, который послужит началом для удержания торговой позиции в течение недели.

 

Код для определения месячного убытка

 

Код для определения месячного убытка довольно прост. В конце каждого бара рассчитывается текущий чистый капитал данной стратегии и сохраняется как “CurrentEquity.” Затем в начале каждого месяца капитал на конец предыдущего месяца записывается как “NewMonthEquity.”

 

В зависимости от значения ежемесячного выхода рассчитывается прибыль или убыток за текущий месяц, и если убыток превышает определенную сумму в этом месяце ($ 2 500 или $ 5 000 за контракт), торговля прекращается до следующего месяца.

 

Обратите внимание, что есть 5 месячных выходов:

  • Отсутствие ограничения месячных убытков (базовый случай)

  • Месячный убыток в размере $ 2 500

  • Месячный убыток в размере $ 5 000

  • Месячная прибыль в размере $ 2 500 (будет обсуждаться позже)

  • Месячная прибыль в размере $ 5 000 (будет обсуждаться позже)

Вот код для Tradestation на языке Easy Language: 

 

var: CurrentEquity(0),CurrentMonth(0),NewMonthEquity(0); 

 

CurrentEquity = NetProfit + OpenPositionProfit

CurrentMonth = Month(date); 

 

If CurrentMonth<>CurrentMonth[1] then Begin 

NewMonthEquity = CurrentEquity[1]; 

end;  

 

Var:CanTradeMonthly(False); 

CanTradeMonthly=True

 

If IMonthly=1 then Begin  

CanTradeMonthly=True

End

 

If IMonthly=2 and CurrentEquity - NewMonthEquity < -2500   then Begin  

CanTradeMonthly=False

End

 

If IMonthly=3 and CurrentEquity - NewMonthEquity < -5000   then Begin  

CanTradeMonthly=False

End

 

If IMonthly=4 and CurrentEquity - NewMonthEquity > 2500   then Begin  

CanTradeMonthly=False

End

 

If IMonthly=5 and CurrentEquity - NewMonthEquity > 5000   then Begin  

CanTradeMonthly=False

End

 

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

If CanTradeMonthly=false then Begin 

sell ("Monthly Cease") next bar at market

buytocover ("Monthly Cease2") next bar at market

End;  

 

//обратите внимание, что все входы должны быть включены в этот блок IF, чтобы сделка открывалась только тогда, когда это разрешено

If CanTradeMonthly then Begin 

entries here

End;

 

Базовые входы

 

В рамках данного тестирования я буду использовать 4 стандартных и хорошо известных входа:

  • Простой вход на импульсе

  • Вход на пробое

  • Вход на пересечении ценой скользящей средней

  • Вход с использованием двух скользящих средних

Все эти входы относятся к категории следования за трендом. Представляю код для Tradestation на языке Easy Language для каждого входа:

 

// inputvar1 = 1 - momentum strategy 

If inputvar1 = 1 then begin 

If close>close[InputVar2] then buy next bar at market;  

if close<close[InputVar2] then sellshort next bar at market

End

 

// inputvar1 = 2 - breakout strategy 

If inputvar1 = 2 then begin 

if high=highest(high,InputVar2) then buy next bar at market;  

if low=lowest(low,InputVar2) then sellshort next bar at market;  

End;  

 

// inputvar1 = 3 - mov avg strategy 

If inputvar1 = 3 then begin 

if close>average(close,InputVar2) then buy next bar at market;  

if close<average(close,InputVar2) then sellshort next bar at market

End;

 

// inputvar1 = 4 - 2mov avg strategy 

If inputvar1 = 4 then begin 

if close>average(close,InputVar2) and average(close,InputVar2)>average(close,2*InputVar2)  then buy next bar at market;  

if close<average(close,InputVar2) and average(close,InputVar2)<average(close,2*InputVar2) then sellshort next bar at market

End; 

 

С помощью этого кода параметр “inputVar1” определяет тип входа, а “inputVar2” – это период ретроспективного анализа (который будет оптимизирован в ходе форвардного тестирования).

 

Обратные входы

 

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

 

// inputvar1 = 1 - momentum strategy 

If inputvar1 = 1 then begin 

if close>close[InputVar2] then buy next bar at market;  

if  close<close[InputVar2] then sellshort next bar at market

End

 

When reversed is just

// inputvar1 = 5 – reverse momentum strategy 

If inputvar1 = 5 then begin 

If close>close[InputVar2] then sellshort next bar at market;  

if close<close[InputVar2] then buy next bar at market

End; 

 

Получается 8 уникальных входов.

 

Выходы

 

Я комбинирую эти 8 входов с 7 различными выходами:

  • Без выхода (стоп и разворот, вход “buy” («покупка») закрывает любой шорт и открывает лонг; для продажи выполняются противоположные действия) 

  • Стоп-лосс

  • Тейк-профит

  • Стоп-лосс и тейк-профит

  • Катастрофический стоп-лосс

  • Скользящий стоп-лосс (трейлинг-стоп)

  • Трейлинг-стоп, который ужесточается после достижения порога прибыли

Ниже представлен код для Tradestation на языке Easy Language для всех этих выходов. Обратите внимание, что это не «традиционные» стопы и тейки, такие как SetStopLoss(1000) или SetProfitTarget(1500). Выходы, которые я использую – это рыночные ордера, основанные на прибыли в открытой позиции в момент закрытия каждого бара. Я обнаружил, что такие «выходы по цене закрытия» более надежны в автоматизированном трейдинге (возможно, только для меня!). Кроме того, в коде для Tradestation есть несколько ошибок, которые могут помешать получить точные результаты из-за параметров SetStopLoss и SetProfitTarget.

 

If IExit=0 then Begin

//no exit;

end;

 

If Iexit = 1 then begin   

//stop loss

if openpositionprofit<-InputVar3   then Begin

sell next bar at market;   

buytocover next bar at market;   

end;

end

   

If Iexit = 2 then begin 

//profit target 

if openpositionprofit>InputVar3   then Begin 

sell next bar at market

buytocover next bar at market

end

end

 

If Iexit = 3 then begin 

//stop loss and profit target 

if openpositionprofit<-InputVar3   or openpositionprofit>InputVar3   then Begin 

sell next bar at market

buytocover next bar at market

end

end

 

If Iexit = 4 then begin 

//catastrophic (hugestop loss 

if openpositionprofit<-5000   then Begin 

sell next bar at market

buytocover next bar at market

end

end

 

If Iexit = 5 then begin 

//trailing stop 

If maxpositionprofit - openpositionprofit>InputVar3   then Begin 

 sell next bar at market

 buytocover next bar at market

end

end

 

If Iexit = 6 then begin 

//trailing stop which tightens 

if maxpositionprofit>InputVar3   and maxpositionprofit - openpositionprofit>(InputVar3/2)   then Begin   

sell next bar at market;   

buytocover next bar at market;   

end

if maxpositionprofit<=InputVar3   and maxpositionprofit - openpositionprofit>InputVar3   then Begin 

sell next bar at market

buytocover next bar at market;

end;

end; 

 

“Iexit” – это тип выхода, а “InputVar3” – это сумма в долларах для стопов и тейков (иногда умноженная на коэффициент).

 

Комбинация стратегий

 

Когда я комбинирую входы и выходы, я использую один вход и один выход и рассматриваю одну уникальную стратегию. Например, вход №1 с выходом №0 – это одна стратегия. Вход №1 с выходом №1 – это другая стратегия. Обратите внимание, что в любой конкретной стратегии/тесте я использую только один вход и один выход на протяжении всей истории. Я не переключаюсь на половине пути со входа на импульсе на вход на пробое. 

 

Следовательно, у меня есть 8 входов х 7 выходов = 56 уникальных стратегий для тестирования.

 

Тестирование

 

Просто чтобы вы представляли, какой объем тестирования здесь задействован:

  • 42 рынка

  • 5 таймфреймов

  • 56 стратегий (8 входов х 7 выходов)

  • 5 уникальных месячных выходов с использованием стопов/тейков

  • 5 периодов ретроспективного анализа

  • 5 стопов/тейков, выраженных в фиксированной сумме в долларах

  • 6 периодов входа/выхода для форвардного тестирования

Если сложить всё это, то получается, что я выполнил 1 470 000 уникальных итераций для первой части этого тестирования, создав 352 800 уникальных финальных кривых капитала. Другими словами, целая ТОННА анализа!

 

Если вы будете работать со стандартными графиками на платформе Tradestation и проводить оптимизацию, вам потребуется для этого много ЛЕТ. Вы будете менять актив, таймфрейм и другой параметр на графике, проводить оптимизацию, компилировать результаты, а затем переходить к следующему рынку, таймфрейму и стратегии. Это будет потрясающее исследование. Это однозначно отнимет много времени!

 

К счастью, у меня есть программный инструмент под названием MultiWalk. Этот инструмент позволяет быстро запускать тесты, программно обращаясь к API оптимизации Tradestation. Это экономит массу времени и избавляет от сложностей при тестировании. 

 

image.png.dd45433fa42b5e13c36f2ec4b88f4796.png

image.thumb.png.c0f89ff688bb1c37e66ed3b0e968981a.png

 

Результаты

 

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

 

Не буду вдаваться в подробности, просто скажу, что после предварительного анализа я остановился на 1 показателе:

 

Соотношение чистой прибыли к средней просадке

 

И я буду применять среднее значение этого параметра для всех прогонов, итераций и случаев. Мне нравится этот параметр производительности, потому что он соединяет прибыль и риск в одном значении.

 

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

 

Одним из примечаний является то, что я использую соотношение чистой прибыли к СРЕДНЕМУ ЗНАЧЕНИЮ просадки. Средняя просадка не так популярна, как максимальная просадка, и многие торговые платформы (в том числе Tradestation) не включают ее в отчеты по производительности. Я считаю этот показатель очень полезным, поэтому сделаю небольшое отступление и немного объясню его.

 

Предположим, что ваша кривая капитала выглядит следующим образом:

 

image.png.82ee4735974f4041fbfe7f6dd7e510a2.png

 

Как определить среднюю просадку за этот период? Всё довольно просто:

  1. Рассчитайте просадку в конце каждого периода или сделки

  2. В конце рассчитайте среднюю величину этих отдельных значений просадки

 

Вот данные для приведенного выше графика, которые показывают среднюю просадку -$ 240. 

 

image.png.7b562208b9f9245ad3acedb98d42c5d0.png

 

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

 

Подумайте об этом как о боли, которую вы испытали бы при виде такой кривой капитала. Если бы среднее значение составляло $ 0, вы бы не испытывали боли!

 

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

 

Вот как выглядит стратегия с ограничением месячного убытка в размере $ 2 500 и без него.

 

image.png.08842b7f04874ac0f1fe1a1466cf394f.png

 

Чтобы было проще понять это, я сравню результаты с базовым случаем, который не включает/отключает ограничение месячного убытка. Я постараюсь найти такие ситуации, результаты которых будут превосходить результаты базовой стратегии.

 

Вот наш первый результат по 4 стандартным стратегиям:

 

image.png.cf6072ddd51b65f4260b0e48b34187b6.png

 

Это говорит нам о том, что ограничение месячного убытка улучшает производительность стратегии с убытком $ 2 500 (улучшение на +6,8% по сравнению с базовым уровнем), но не улучшает производительность стратегии с убытком $ 5 000 (на -14,8% хуже базового уровня). Данное ограничение, по-видимому, улучшает производительность базовой стратегии, отключая ее при небольших суммах месячного убытка, но ухудшает ее производительность при крупных убытках (возможно, кривая капитала немного восстановилась бы, если бы стратегия не отключалась).

 

Улучшение производительности на 6,8% выглядит неплохо, но для меня оно находится в серой зоне: стоит ли данная выгода дополнительных затрат? Может, да, а может, и нет.

 

В качестве проверки этого результата давайте рассмотрим результаты 4 контртрендовых стратегий:

 

image.png.0e5ba09b60286db70f73317d42e92c42.png

 

Это подтверждает, что ограничение месячных убытков в размере $ 5 000 не улучшает результаты и ограничение в размере $ 2 500 тоже не особо помогает! И это опровергает более ранний результат по 4 стандартным стратегиям.

 

По всей вероятности, ограничение месячного убытка $ 2 500 могло бы быть полезным, но я бы на него не рассчитывал. Один набор результатов говорит, что он помогает, а другой – нет.

 

На этом этапе можно сделать вывод, что все усилия до сих пор были пустой тратой времени. В конце концов я обнаружил, что аккуратная идея с ограничением убытка на самом деле не помогает. Тьфу!

 

Но есть еще одна вещь, которую нужно протестировать. Может быть, ограничение месячного убытка работает только с определенными выходами. Помните, что у нас есть 7 уникальных выходов, которые мы протестировали:

  1. Нет выхода, только стоп и разворот

  2. Выход по ордеру стоп-лосс

  3. Выход по ордеру тейк-профит

  4. Выход по ордерам стоп-лосс и тейк-профит

  5. Выход только по катастрофическому стоп-лоссу

  6. Выход по трейлинг-стопу

  7. Выход по трейлинг-стопу, который ужесточается после достижения порога прибыли

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

 

Давайте посмотрим...

 

Базовые стратегии:

image.png.9f1bdf5fd188b53794842f1de30ade14.png

 

Обратные стратегии:

image.png.8404e603fc56ae29f794af7a59644731.png

 

В базовых стратегиях ограничение месячного убытка в размере $ 2 500 в некоторых случаях улучшает производительность, но это опровергается обратными стратегиями. Ограничение месячного убытка $ 5 000 практически всегда ухудшает производительность стратегий.

 

Таким образом, мы приходим к первым выводам:

 

ВЫВОД №1: ограничение месячного убытка $ 5 000 плохо сказывается на производительности – НЕ ИСПОЛЬЗУЙТЕ ЕГО.

 

ВЫВОД №2: ограничение месячного убытка $ 2 500 не дает последовательного улучшения производительности – ЛУЧШЕ НЕ ИСПОЛЬЗОВАТЬ ЕГО.

 

Углубляясь в размышления об ограничениях убытка, я понял, что эти месячные стопы, скорее всего, действуют так же, как и обычные стоп-лоссы в торговых стратегиях. Другими словами, они снижают производительность! А если так, то, возможно, вместо ограничения месячного убытка лучше установить месячную цель по прибыли. Давайте посмотрим:

 

//ограничитель месячного УБЫТКА

 

If IMonthly=2 and CurrentEquity - NewMonthEquity < -2500   then Begin  

CanTradeMonthly=False

End;

 

//ограничитель месячной ПРИБЫЛИ

 

If IMonthly=4 and CurrentEquity - NewMonthEquity > 2500   then Begin  

CanTradeMonthly=False

End; 

 

Вот как выглядит стратегия с ограничением месячной прибыли в размере $ 2 500 и без него:

 

image.png.d9ea99e5834e3b2f9386d415c6d808fe.png

 

Вот результаты торговли с ограничением месячной прибыли в размере $ 2 500 и $ 5 000. 

 

Базовые стратегии:

image.png.7c4abfaeb69aca732facd288b473087d.png

 

Обратные стратегии:

image.png.44856e13bf8cb1618d6ffb970cb73930.png

 

Выглядит отлично! Как в 4 базовых стратегиях, так и в 4 обратных стратегиях с добавлением ограничения месячной прибыли производительность улучшается. Оба ограничения месячной прибыли: как $ 2 500, так и $ 5 000 – значительно улучшают производительность стратегий по сравнению с отсутствием данного ограничения.

 

Как выглядят результаты с различными выходами? Выделяется ли какой-то выход (хороший или плохой) на фоне других?

 

Базовые стратегии:

image.png.76df19602cfc65ff4a75fe527973d9ee.png

 

Обратные стратегии:

image.png.82858801e582a3508067c9788265b1b3.png

 

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

 

Эти результаты приводят нас к выводу №3:

 

ВЫВОД №3: ограничение месячной прибыли $ 2 500 или $ 5 000 улучшает производительность системы – МОЖЕТЕ ЕГО ИСПОЛЬЗОВАТЬ.

 

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

 

Что касается ежемесячной прибыли, то отключив стратегию в середине месяца после получения прибыли, вы «фиксируете» прибыль перед следующей неизбежной просадкой. Так что, возможно, вы избежите или сведете к минимуму некоторые просадки, отключив стратегию после прибыльного периода ее работы. Это также фиксирует прибыль после серии «удачных сделок».

 

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

 

Но как насчет «экстремальных» стратегий – тех, которые всегда приносят прибыль или убытки?

 

Рассмотрим «всегда убыточную» стратегию, которая каждый день приносит убытки. Вы, конечно же, никогда не торговали бы по ней, но если бы даже и торговали, то включили бы в нее ограничение, чтобы минимизировать свои убытки.

 

А если бы у вас была «всегда прибыльная» стратегия, которая никогда не приносит убытков, то ограничение месячной прибыли причинило бы ей вред, поскольку оно искусственно ограничило бы ваши доходы.

 

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

 

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

 

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

image.png.d791241f1d2c71903e9667521b9403b1.png

 

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

 

Часть 2. Результаты использования месячных стопов, основанных на ATR

 

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

 

Во второй части вместо фиксированной суммы в долларах для ежемесячного стоп-лосса или тейк-профита я попробую рассчитать сумму стоп-лосса/тейк-профита, основанных на среднем истинном диапазоне. Поскольку многие трейдеры любят применять значение 3*ATR в отдельных сделках, в качестве точек выхода я протестирую значения 10*ATR и 25*ATR. Понятия не имею, большие они или маленькие, поэтому я протестирую и оценю результаты! Это добавляет еще 1 470 000 уникальных итераций к общей сумме теста.

 

Модифицированный код для подхода с применением ATR выглядит следующим образом (изменения в коде выделены жирным шрифтом):

 

If IMonthly=1 then Begin  

CanTradeMonthly=True

End

 

If IMonthly=2 and CurrentEquity - NewMonthEquity < -10*AvgTrueRange(15)*BigPointValue then Begin  

CanTradeMonthly=False

End

 

If IMonthly=3 and CurrentEquity - NewMonthEquity < -25*AvgTrueRange(15)*BigPointValue then Begin  

CanTradeMonthly=False

End

 

If IMonthly=4 and CurrentEquity - NewMonthEquity > 10*AvgTrueRange(15)*BigPointValue then Begin  

CanTradeMonthly=False

End

 

If IMonthly=5 and CurrentEquity - NewMonthEquity > 25*AvgTrueRange(15)*BigPointValue then Begin  

CanTradeMonthly=False

End; 

 

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

 

Базовые стратегии:

image.png.469ebdf3b19369c9e527e6ba71ebfe59.png

 

Как и прежде, для подтверждения/опровержения возможных выводов из базовых стратегий я использую обратные стратегии. 

 

Обратные стратегии:

image.png.0e530224914ee9c5ad5ea409a245d32e.png

 

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

 

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

 

Базовые стратегии:

image.png.42478f928da9e135de3e1708f129f711.png

 

Обратные стратегии:

image.png.199a2afd1d82074a82fc2064a18cc6ef.png

 

Все результаты близки к нулю, поэтому я прихожу к выводу, что ограничение месячной прибыли в размере 10*ATR и 25*ATR не улучшает производительность стратегии.

 

Таким образом, ограничение месячных убытков и месячной прибыли, основанное на ATR, не улучшает производительность стратегии. Возможно, это связано с коэффициентами ATR. Я выбрал 10*ATR и 25*ATR, потому что они показались мне разумными, но я понятия не имею, хорошие они или плохие. 

 

Из этого вытекает важный вопрос: почему я никогда не считал полезными стопы и тейки, основанные на ATR? Нам говорят, что нужно использовать ATR вместо заданной суммы долларов за контракт. Это кажется логичным, но, похоже, не работает. Или не работает только у меня?

 

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

 

Я всегда достигал бо́льшего успеха при применении стоп-лоссов и тейк-профитов, основанных на заданной сумме в долларах. Возможно, такие результаты получал только я. (Оставляйте комментарии или напишите мне на почту: с какими стопами вы добились бо́льшего успеха  основанными на фиксированной сумме в долларах или на ATR?)

 

Учитывая, что значения 10*ATR и 25*ATR дают плохие результаты, я решил также протестировать значения 3*ATR, 7*ATR, 50*ATR и 100*ATR. Результаты для этих значений представлены ниже вместе с исходными результатами 10*ATR и 25*ATR.

 

image.png.20e9302fbfbebda1bdd4d727644bf48c.png

 

image.png.75e0032c2408abdb854181aaa85d8163.png

 

В базовых стратегиях ограничение месячных убытков и месячной прибыли снижает производительность стратегии независимо от коэффициента ATR. Когда коэффициент ATR достигает значения 50 или 100, его влияние приближается к нулю – это говорит о том, что данные уровни ATR никогда не достигаются в реальной торговле.

 

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

 

В целом вывод по ограничению месячных убытков/прибыли, основанных на ATR, такой:

 

ВЫВОД №4: ограничение месячных убытков/прибыли, основанных на ATR и с различными коэффициентами ATR, не улучшает производительность стратегии.

 

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

 

Часть 3. Результаты использования стопов, основанных на заданной сумме в долларах + ATR

 

Если вы прочитали предыдущие части (Часть 1 и Часть 2) данного исследования, то вы знаете, что я пришел к выводу, что выход, основанный на заданной сумме в долларах месячной прибыли, является возможным жизнеспособным методом для повышения производительности стратегии с поправкой на риск.

 

Единственная небольшая проблема с результатами первой части заключается в том, что я относился ко всем рынкам одинаково: я использовал месячный убыток в размере $ 2 500 на крупных рынках, таких как ES, GC и CL, и такую же сумму на менее волатильных рынках, таких как FV, C и SB. Вряд ли это правильно, вы со мной согласны? В третьей части мы исправляем это упущение, по крайней мере, в некоторой степени.

 

Я собираюсь уменьшить все суммы в долларах (месячный убыток, месячную прибыль, стоп-лоссы, тейк-профиты, трейлинг-стопы и т. д.) на 50% для инструментов, которые не совершают больших движений. Для этого в качестве ограничения я буду использовать значение 30*ATR (пересчитанное в доллары). Если 30*ATR будет меньше $ 1 000 за контракт, то суммы в долларах в коде будут уменьшены на 50%.

 

Ниже представлен код Tradestation для ограничения месячных убытков/прибыли (та же концепция применима к стопам и тейкам в стратегиях, но не показана здесь). Изменения выделены жирным шрифтом:

 

var:DollarMultiplier(0); 

DollarMultiplier=1; 

if AvgTrueRange(30)*BigPointValue<1000 then DollarMultiplier=.5; 

 

If IMonthly=1 then Begin  

CanTradeMonthly=True

End;

 

If IMonthly=2 and CurrentEquity - NewMonthEquity < -2500*DollarMultiplier then Begin  

CanTradeMonthly=False

End

  

If IMonthly=3 and CurrentEquity - NewMonthEquity < -5000*DollarMultiplier then Begin  

CanTradeMonthly=False

End

 

If IMonthly=4 and CurrentEquity - NewMonthEquity > 2500*DollarMultiplier then Begin  

CanTradeMonthly=False

End

 

If IMonthly=5 and CurrentEquity - NewMonthEquity > 5000*DollarMultiplier then Begin  

CanTradeMonthly=False

End;

 

Как видите, для рынков с небольшими движениями вместо уровней $ 2 500 и $ 5 000 теперь применяются уровни $ 1 250 и $ 2 500. Обратите внимание, что любой рынок может иметь меньшие уровни в периоды низкой волатильности. А поскольку волатильность не постоянна, это означает, что уровни для любого инструмента могут меняться каждый день в зависимости от изменений волатильности.

 

Давайте посмотрим на ограничение месячных убытков в базовых и обратных стратегиях:

 

Базовые стратегии

image.png.d0846ef62abde2da9c4407e44d9a1d6a.png

 

Обратные стратегии:

image.png.11ad04737909558e91f9b82f6448b3ef.png

 

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

 

Теперь давайте посмотрим на результат ограничения месячной прибыли.

 

Базовые стратегии:

image.png.508bbeb875868abc24a2112f0b6d486a.png

 

Обратные стратегии:

image.png.6f52c99442976d447602d3beeb82b3a7.png

 

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

 

Теперь мы должны сравнить это улучшение с результатами, полученными в первой части, чтобы увидеть, являются ли изменения, полученные в третьей части, лучшими, чем в первой части:

 

image.png.f8d1b490878a7866a30a4b84ac97260d.png

 

В 3 из 4 сравнений в первой части исследования мы получили лучшие результаты, чем в третьей части. Единственное улучшение в третьей части наблюдалось в базовых стратегиях с ограничением ежемесячной прибыли в размере $ 5 000. 

 

Несмотря на то, что эти данные не поддерживают уровни, основанные на коэффициенте ATR, мне всё равно приятно видеть результаты. Но иногда мне нравится не то, что готов предоставить рынок!

 

ВЫВОД №5: корректировка ATR на ежемесячную прибыль дает хорошие результаты (см. Часть 3), но отсутствие корректировки ATR дает лучшие результаты (см. Часть 1)

 

Почему бы нам теперь не протестировать в коде различные суммы месячной прибыли? А вдруг это еще улучшит нашу ситуацию?

 

Часть 4. Результаты использования вариаций тейк-профитов, основанных на заданной сумме в долларах

 

В качестве дополнительного форвардного теста давайте посмотрим на вариации выхода с ограничением месячной прибыли в коде. До этого момента мы тестировали прибыль $ 2 500 и $ 5 000 за контракт в качестве точки выхода. Получим ли мы лучшие результаты, если применим переменную сумму (которая будет меняться в форвардном тестировании на исторических данных)?

 

Этот подход я буду считать лучшим в случае значительного повышения производительности, тем более что он использует дополнительные оптимизированные входы в рамках форвардного бэктестирования.

 

Вот результаты двух лучших выходов, которые мы протестировали: без выхода (стоп и разворот) и с катастрофическим стопом в размере $ 5 000:

 

image.png.a9ac5bd1e75e467af9b9541f9bbd1fa6.png

 

image.png.72e76051f7ed752bb8b15988564470ee.png

 

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

 

Отлично! К сожалению, в обратных стратегиях мы получили противоположные результаты. Выход с ограничением месячной прибыли в размере $ 5 000 лучше всего подходит для обратных стратегий.

 

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

 

ВЫВОД №6: применение вариаций тейк-профитов, основанных на заданной сумме в долларах, не улучшает производительность в достаточной степени, чтобы можно было оправдать их

 

Часть 5. И последняя попытка. Есть ли какое-то одно финальное улучшение данной концепции?

 

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

 

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

  • Ограничение может носить сезонный/месячный характер, когда лучше не торговать в течение оставшейся части месяца

  • Если данная прибыль/убыток получены в первый день месяца, то стратегия отключается почти на весь месяц, а если они получены в предпоследний день месяца, то стратегия отключается только на 1 день.

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

 

Вот результаты этого изменения:

 

image.png.ebd8b3ae1489b2b7710b8f5b54737a4d.png

 

В 3 из 4 сравнений в первой части исследования мы получили лучшие результаты, чем в пятой части.

 

Единственное улучшение в пятой части наблюдалось в обратных стратегиях с ограничением месячной прибыли в размере $ 2 500. 

 

ВЫВОД №7: применение вариаций ограничений прибыли/убытка, основанных на заданной сумме в долларах, не улучшает производительность в достаточной степени, чтобы можно было оправдать их

 

Заключение касательно месячных ограничений о «прекращении торговли»

 

Если после всего того, что я написал, вы продолжаете читать дальше, примите мои поздравления (и благодарю вас за прочтение этой статьи!). В этом исследовании мы протестировали множество различных путей, большинство из которых оказались бесплодными. Но ведь именно в этом заключается тестирование, не так ли? Увидеть, что работает, а что нет. 

 

В этом отношении месяцы, которые я потратил на тестирование, определенно стоили того. Иногда выяснение того, что не работает, тоже полезно!

 

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

 

image.png.3c708e9579b3620d2ee23e9010cd03e4.png

 

В дальнейшем я собираюсь использовать подход, обозначенный зеленым цветом, с ограничением месячной прибыли в размере $ 5 000, хотя я также рассмотрю пороговое значение $ 2 500 или меньше, в зависимости от ситуации. Например, если бы я тестировал редко торгующие внутридневные стратегии, я, возможно, использовал бы порог $ 1 250. Но если бы я всегда использовал данную стратегию, то было бы целесообразно применить значение порога $ 5 000.

 

Ниже представлен код, который я бы включил в свои стратегии.

 

var: CurrentEquity(0),CurrentMonth(0),NewMonthEquity(0); 

 

CurrentEquity = NetProfit + OpenPositionProfit

CurrentMonth = Month(date); 

 

If CurrentMonth<>CurrentMonth[1] then Begin 

NewMonthEquity = CurrentEquity[1]; 

end;  

 

Var:CanTradeMonthly(False); 

CanTradeMonthly=True

 

If CurrentEquity - NewMonthEquity > 5000   then Begin  

CanTradeMonthly=False

End

 

//закрываем любые открытые сделки, если активируется месячный ограничитель

If CanTradeMonthly=false then Begin 

sell ("Monthly Cease") next bar at market

buytocover ("Monthly Cease2") next bar at market

End;  

 

//обратите внимание, что все входы должны быть включены в этот блок IF, чтобы сделка открывалась только тогда, когда это разрешено

If CanTradeMonthly then Begin 

entries here

End;

 

ОДНО ПОСЛЕДНЕЕ ЗАМЕЧАНИЕ: после проведения этого исследования я протестировал несколько стратегий, отличных от тех, которые я использовал в данном исследовании, и проанализировал несколько тысяч случаев. Результаты снова показали, что ограничение месячной прибыли улучшает производительность стратегий с поправкой на риск. Конечно, эта проверка не была строгой, но приятно было получить такой результат!

 

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

 

 

 

Переведено для сайта TLAP. 

Кевин Дж. Дэйви