Тестирование модифицированной ССВ 2





// избегаем устанавливать приказы на дни с ограниченной торговлей
if(hi[cb+l] == lo[cb+l]) continue;
// генерируем "стандартные" случайные входные сигналы
signal = 0;
rnum = ran2(&iseed); // случайное число между 0 и 1
if(rnum < 0.025) signal = - 1; // случайный короткий вход
else if(rnum > 0.975) signal = 1; // случайный длинный вход
// входить в сделки по цене открытия
entryposted = 0;
if{ts.position() <= 0 && signal =- 1} {
ts.buyopen('1' , ncontracts);
entryposted = 1;
entryprice = opn[cb+l];
entrybar = cb + 1;
}
else if (ts.position)) >= 0 && signal == - 1) {
ts.sellopen('2', ncontracts);
entryposted = - 1;
entryprice = opn[cb+l];
entrybar = cb + 1;
}
// выходить из сделок, используя модифицированный стандартный выход
if(entryposted > 0) (
// инициализация и выходы для длинных позиций на каждый день
limprice = entryprice + ptlim * exitatr[cb];
stpprice - entryprice - mmstp * exitatr[cb];
ts.exitlonglimit('A', limprice);
ts.exitlongstop('B', stpprice);
]
else if(entryposted < 0) {
// инициализация и выходы для коротких позиций на каждый день
limprice = entryprice - ptlim * exitatr[cb];
stpprice = entryprice + mmstp * exitatr[cb];
ts.exitshortlimit('C' , limprice) ;
ts.exitshortstop('D' , stpprice);
}
else {
// выходы после дня входа
if(ts.position() > 0) ( // длинные позиции
ts.exitlonglimit{'F' , limprice) ;
ts.exitlongstop('G' , stpprice);
if(cb- entrybar >= maxhold) ts.exitlongclose('E')
}
else if (ts.position)) < 0) { // короткие позиции
ts.exitshortlimit{'I' , limprice) ;
ts.exitshortstop('J' , stpprice) ;
if(cb- entrybar >= maxhold} ts.exitshortclose{'H');
}
}
)// обрабатываем следующий день
}

Это код идентичен предыдущему за исключением изменений в стратегии выхода. Система входит на рынок по случайному сигналу, как описывалось ранее, но покупка и продажа производятся только по цене открытия. Кроме того, сохраняется информация о входе, т.е. записывается, отдавался ли приказ на вход (длинная, короткая позиция или никакой) в данном торговом дне (entryposted); по какой цене (entryprice) производился вход, если он был, и в какой день имел место вход (entrybar). Эти данные необходимы для расчета выходов, которые производятся после входа. Если на следующий день отдается приказ войти в рынок (т.е. занять длинную либо короткую позицию по цене открытия следующего дня), то для этого дня также рассчитываются целевая прибыль и защитная остановка. Для длинных позиций защитная остановка устанавливается на некотором уровне (цена входа минус произведение среднего истинного диапазона и некоторого параметра), а лимитный приказ целевой прибыли — на уровне цены входа плюс произведение среднего истинного диапазона и другого параметра. Если в данный день отдается приказ к открытию короткой позиции по цене открытия следующего дня, то также размещаются приказы закрытия данной короткой позиции (лимитный приказ целевой прибыли или защитная остановка). Для длинных позиций расчет производится подобным же образом, но в обратном направлении. Если данный день не используется для входа, то проводится проверка для определения наличия существующей позиции после закрытия дня. Если позиция существует, то размещаются два (а возможно, три) приказа: защитная остановка и целевая прибыль, вычисленные в день открытия данной позиции, и, если позиция открыта более чем maxhold дней, отдается приказ на выход по цене закрытия.