На этой основе удалось получить лучшую из пока обнаруженных стратегий размещения защитной остановки при исходном параметре 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 {