ТЕСТИРОВАНИЕ ЦЕЛЕВОЙ ПРИБЫЛИ
На этой основе удалось получить лучшую из пока обнаруженных стратегий размещения защитной остановки при исходном параметре 2,5, сдвиге СИДС = 1 и коэффициенте адаптации КОЭФФ = 0,30. В оригинальном тесте модифицированного ЭСС (табл. 14-4) был использован оптимальный фиксированный уровень целевой прибыли, сейчас же на его место поставлен динамический лимитный приказ - уровень целевой прибыли, который изначально установлен далеко от рыночной цены, но приближается к ней со временем. Идея состоит в том, чтобы обеспечить выход из "застойных" сделок на пике шумовой активности цены, при этом не жертвуя прибылью потенциально выгодных позиций в первые дни их "жизни". Использованный подход очень напоминает методику получения динамической защитной остановки на основе экспоненциального скользящего среднего. Здесь скользящее среднее инициализируется необычным образом: скользящей сумме присваивается значение рыночной цены плюс (для длинных) или минус (для коротких позиций) произведение среднего истинного диапазона и параметра ptlim. Таким образом, скользящее среднее начинается, как и при вычислении защитной остановки. Точно таким же образом уровень целевой прибыли корректируется в каждый последующий день: расстояние между текущей ценой целевой прибыли и текущей ценой закрытия умножается на параметр ptga. Результат затем вычитается из текущей цены целевой прибыли, приближая ее к рыночной цене. В отличие от защитной остановки целевая прибыль может перемещаться в обоих направлениях, хотя это и маловероятно - если позиция открыта уже достаточно долго, то лимитный приказ прервет сделку при любом сильном благоприятном движении цены. Второй параметр ptga управляет периодом скользящего среднего, т.е. скоростью приближения целевой прибыли к рыночной цене. Правила, в общем, идентичны вышеприведенному тесту защитной остановки на модифицированном ЭСС, но относятся к уровню целевой прибыли.
// Выходим из сделок, используя стандартный выход с улучшенными защитными // остановками и целевой прибылью atr = exitatr[cb]; if(entryposted > 0) {
// инициализация и выходы для длинных позиций на каждый день switch (modeltype) { case 1:
limprice = entryprice + ptlira * atr; stpprice = min (Lowest(lo, 2, cb), entryprice = mmstp * atr);
break; case 2: case 3: case 4:
limprice = entryprice + ptlim * atr; stpprice = entryprice - mmstp * atr; break; default: nrerror("Invalid modeltype") ; }
ts.exitlonglimit('A', limprice}; ts.exitlongstop('B', stpprice);
}
else if(entryposted < 0) {
// инициализация и выходы для коротких позиций на каждый день switch(modeltype) { case 1:
limprice = entryprice - ptlim * atr; stpprice = max (Highest(hi, 2, cb)
entryprice + mmstp * atr) ; break; case 2: case 3: case 4: limprice = entryprice - ptlim * atr; stpprice = entryprice + mmstp * atr; break; default: nrerror("Invalid modeltype"); }
ts.exitshortlimit('C' , limprice); ts.exitshortstop('D' , stpprice); } else {
// выходы после дня входа if(ts.position() > 0} { // длинные позиции switch(modeltype) { case 1: stpprice = max(stpprice, Lowest(lo,2, cb) ) ;
break, case 2: stpprice = max(stpprice,els[cb]-stpa*atr);
break; case 3:
tmp = (hi[cb] - stpa * atr) - stpprice; if(tmp > 0.0) stpprice += stpb * tmp; break; case 4:
tmp = ( h i [ c b ] - stpa * atr) - stpprice; if(tmp > 0.0) stpprice += stpb * tmp; limprice = limprice - ptga*(limprice-cls[cb] ) , break; }
ts.exitlonglimit('F' , limprice) ; ts.exitlongstop ('G' , stpprice};
if (cb-entrybar >= maxhold) ts.exitlongclose('E' } ; }
else if{ts.position() < 0) { // короткие позиции switch (modeltype) [ case 1:
stpprice = min(stpprice, Highest(hi,2,cb) ) ; break;
stpprice = min(stpprice, els [cb]+stpa*atr} ; break; case 3: tmp = (lo[cb] + stpa * atr) - stpprice; if(tmp < 0.0) stpprice += stpb * tmp; break; case 4: tmp = (lo[cb] + stpa * atr) - stpprice; if{tmp < 0.0) stpprice += stpb * tmp; limprice = limprice + ptga*(cls [cb]-limprice); break; )
ts.exitshortlimitl'I1, limprice); ts.exitshortstopl'J1 , stpprice);
if {cb-entrybar >= maxhold) ts.exitshortclose('H' ) ; ) )
Приведенный выше фрагмент кода показывает реализацию динамического лимитного приказа целевой прибыли совместно с экспоненциальной защитной остановкой согласно табл. 14-4.
В табл. 14-5 приведена информация об эффективности торговли портфелем как функции значений исходной целевой прибыли (ptlim в коде, ИЦП в таблице) и коэффициента скорости адаптации (ptga в коде, КОЭФФ в таблице). Первый параметр, управлявший расположением целевой прибыли относительно цены входа (в единицах среднего истинного диапазона), прогонялся от 2 до 6 с шагом 0,5. Коэффициент скорости адаптации прогонялся от 0,05 до 0,4 с шагом 0,05. Лучшее из сочетаний показало эффективность, превосходящую результат, полученный при использовании фиксированной целевой прибыли (соотношение риска/прибыли -1,32, процент прибыльных сделок не изменился - 37%, средний убыток со сделки - $1325). Эта модель также была не слишком чувствительна к изменениям параметров. Результаты показывают, что с целевыми прибылями следует быть осторожным: они имеют тенденцию преждевременно закрывать сделки с высоким потенциалом прибыли. Как видно из табл. 14-5, при более близком размещении целевой прибыли процент прибыльных сделок резко возрастал (больше сделок достигало лимитного приказа целевой прибыли и закрывалось с маленькой прибылью) . При этом соотношение риска/прибыли и средние показатели ухудшались, показывая, что увеличение процента выгодных сделок не может скомпенсировать потери потенциальных прибылей, вызванные слишком близким расположением целевой прибыли. Иногда лучше не иметь никакой целевой прибыли - при этом по крайней мере вы не пропустите важные благоприятные движения рынка. То же справедливо и в отношении коэффициента адаптации - уровни целевой прибыли, слишком быстро приближавшиеся к рыночной цене, преждевременно закрывают хорошие позиции.
Назад