На этой основе удалось получить лучшую из пока обнаруженных стратегий размещения защитной остановки при исходном параметре 2,5, сдвиге СИДС=1 и коэффициенте адаптации КОЭФФ = 0,30. В оригинальном тесте модифицированного ЭСС (табл. 14-4) был использован оптимальный фиксированный уровень целевой прибыли, сейчас же на его место поставлен динамический лимитный приказ — уровень целевой прибыли, который изначально установлен далеко от рыночной цены, но приближается к ней со временем. Идея состоит в том, чтобы обеспечить выход из «застойных» сделок на пике шумовой активности цены, при этом не жертвуя прибылью потенциально выгодных позиций в первые дни их «жизни». Использованный подход очень напоминает методику получения динамической защитной остановки на основе экспоненциального скользящего среднего. Здесь скользящее среднее инициализируется необычным образом: скользящей сумме присваивается значение рыночной цены плюс (для длинных) или минус (для коротких позиций) произведение среднего истинного диапазона и параметра ptlim. Таким образом, скользящее среднее начинается, как и при вычислении защитной остановки. Точно таким же образом уровень целевой прибыли корректируется в каждый последующий день: расстояние между текущей ценой целевой прибыли и текущей ценой закрытия умножается на параметр ptga. Результат затем вычитается из текущей цены целевой прибыли, приближая ее к рыночной цене. В отличие от защитной остановки целевая прибыль может перемещаться в обоих направлениях, хотя это и маловероятно — если позиция открыта уже достаточно долго, то лимитный приказ прервет сделку при любом сильном благоприятном движении цены. Второй параметр ptga управляет периодом скользящего среднего, т. е. скоростью приближения целевой прибыли к рыночной цене. Правила, в общем, идентичны вышеприведенному тесту защитной остановки на модифицированном
ЭСС, но относятся к уровню целевой прибыли.
|
// Выходим из сделок, используя стандартный выход с улучшенными защитными остановками и целевой прибылью
atr = exitatr[cb];
if(entryposted > 0) {
// инициализация и выходы для длинных позиций на каждый день
switch (modeltype) {
case 1:
limprice = entryprice + ptlim * 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,cls[cb]-stpa*atr);
break;
case 3:
tmp = (hi[cb] - stpa * atr) - stpprice;
if(tmp > 0.0) stpprice += stpb * tmp;
break;
case 4:
tmp = (hi[cb] - 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;
case 2:
stpprice = min(stpprice, cls[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.exitshortlimit('I', limprice);
ts.exitshortstop('J', 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, при более близком размещении целевой прибыли процент прибыльных сделок резко возрастал (больше сделок достигало лимитного приказа целевой прибыли и закрывалось с маленькой прибылью). При этом соотношение риска/прибыли и средние показатели ухудшались, показывая, что увеличение процента выгодных сделок не может скомпенсировать потери потенциальных прибылей, вызванные слишком
близким расположением целевой прибыли. Иногда лучше не иметь никакой целевой прибыли — при этом по крайней мере вы не пропустите важные благоприятные движения рынка. То же справедливо и в отношении коэффициента адаптации — уровни целевой прибыли, слишком быстро приближавшиеся к рыночной цене, преждевременно закрывают хорошие позиции.
Далее
Вернуться к оглавлению
|