Тестирование динамических защитных остановок 4





// выходы после дня входа
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;
}
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;
сазеЗ:
tmp = {lo[cb] + stpa * atr) - stpprice;
if(tmp < 0.0) stpprice += stpb * tmp;
break;
}
ts.exitshortlimit('I' , limprice) ;
ts.exitshortstop('J' , stpprice);
if(cb- entrybar >= maxhold) ts.exitshortclose('H') ;
}
}
} // обрабатываем следующий день
}

Вышеприведенный код реализует МССВ с заменой фиксированной защитной остановки на одну из трех динамических методик. Вид защитной остановки выбирается параметром modeltype, и в зависимости от вида выбранной остановки программа оптимизирует значения еще трех дополнительных параметров. Для остановки на основе максимального максимума/минимального минимума за два последних дня (ММ/ММ) параметр mmstp — это количество средних истинных диапазонов (не обязательно целое число), прибавляемых или отнимаемых от цены входа для получения защитной остановки для входного дня. Защитная остановка входного дня устанавливается на уровне цены входа или минимального минимума за два последних дня плюс или минус указанное количество средних истинных диапазонов (выбирается уровень, более удаленный от текущей рыночной цены). Для двух других остановок (на основе среднего истинного диапазона и ЭСС) уровень защитной остановки входного дня инициализируется стандартным образом, т.е. цена входа минус (для длинной позиции) или плюс (для короткой позиции) произведение mmstp на средний истинный диапазон.
Затем в каждом торговом дне производится коррекция уровня защитной остановки. Вид коррекции зависит от выбранного параметром modeltype типа. Для остановки на основе ММ/ММ рассчитывается максимальный максимум или минимальный минимум в зависимости от вида открытой позиции (короткая или длинная). Если результат ближе к рыночной цене, чем текущий уровень защитной остановки, то он используется в качестве новой защитной остановки. В другой модели средний истинный диапазон умножается на второй параметр stpa. Результат вычитается (для длинной позиции) или прибавляется (для короткой) к текущей цене закрытия. Если результат ближе к текущей цене, чем текущий уровень защитной остановки, то он заменяет уровень защитной остановки, приближая его, таким образом, к текущей рыночной цене. Для третьего типа остановки (на основе ЭСС) средний истинный диапазон умножается на второй параметр stpa. Результат вычитается (для длинной позиции) или прибавляется (для короткой) к текущей цене закрытия для получения сдвига. Эта разность заносится в переменную tmp. Уровень защитной остановки обновляется в последующие дни путем прибавления imp, умноженной на другой параметр (коэффициент коррекции stpb) к текущей защитной остановке. Это, впрочем, производится только в том случае, если коррекция сместит уровень защитной остановки ближе к текущей цене. Расчеты подобны методике получения экспоненциального скользящего среднего (ЭСС) — с той разницей, что при расчете собственно ЭСС было бы возможно смещение уровня защитной остановки в обе стороны и не использовался бы предварительный сдвиг. В этой модели stpb определяет эффективный период экспоненциального скользящего среднего, которое может изменяться только в одном направлении — к текущей рыночной цене.