// выполняем вычисления для всех данных
AvgTrueRangeS(exitatr,hi,lo,cls,50,nb) ; // средний истинный диапазон для
// выхода
switch (modeltype) [
case 1:
// Ничего не делайте! Место для будущего кода,
break ;
default: nrerror ("Invalid model type");
)
// проходим через дни, чтобы смоделировать реальную торговлю
for(cb = 1; cb <= nb; cb++) {
// не открываем позиций до начала периода выборки
// ... то же самое, что установка MaxBarsBack в TradeStation
if(dt[cb] < IS_DATE) 1 egcls[cb] = 0.0; continue; )
// выполняем ожидающие приказыи сохраняем значение капитала
rc = ts.update (opn [cb] , hi [cb] , lo [cb] , cls [cb] , cb) ;
if(rc != 0) nrerror{"Trade buffer overflow");
eqcls[cb] = ts.currentequity(EQ_CLOSETOTAL);
//не торгуем в последние 30 дней выборки
// оставляем место в массивах для будущих данных
if(cb > nb- 30) continue;
// считаем количество контрактов для позиции
// ... мы хотим торговать эквивалентом долларовой волатильности
// ... 2 новых контрактов на S&P- 500 от 12/31/98
ncontracts = RoundToInteger(5673 . О / dlrv[cb] ) ;
if (ncontracts < 1) ncontracts = 1;
// избегаем устанавливать приказы на дни с ограниченной торговлей
if(hi[cb+1] == lo[cb+1]} continue;
// генерировать входные сигналы, цены стоп- и лимитных приказов
signal = 0;
switch (modeltype) {
case 1:
// ищем хороший цикл для торговли
domperndx = 0;
peakpower = - 1.0;
for(k = 1; k <= fcount; k++) {
if(power[k][cb] > peakpower) {
peakpower = power[k][cb];
domperndx = k;
}
goodcycle = FALSE;
if(domperndx > 3 && domperndx < fcount- 1) {
peaknoise = 0.0;
for(k = 1; k <= fcount; k++) {
if (abs(k - domperndx) > 2) {
if (power[k] [cb] > peaknoise)
peaknoise - power[k] [cb] ;
}
if(peakpower > 1.5 * peaknoise) goodcycle = TRUE;
}