проходим через торговые дни, чтобы


Глава 1 Глава 2 Глава 3
// проходим через торговые дни, чтобы смоделировать реальную торговлю for(cb = 1; cb <= nb; cb++) { // не открываем позиций в периоде подсчета // ... то же самое, что установка MaxBarsBack в TradeStation if(dt[cb] < IS_DATE) { eqcls[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; // считаем количество контрактов для позиции // ... мы хотим торговать эквивалентом долларовой волатильности // ... двух новых контрактов на S&P- 500 от 12/31/98 neontracts = RoundToInteger{5673 . О / dlrv[cb]) ; if(ncontracts < 1) ncontracts = 1;

// избегаем устанавливать приказы на дни с ограниченной торговлей if(hi[cb+l] == lo[cb+l]) continue; // генерировать входные сигналы, цены стоп- и лимитных приказов // для всех моделей сезонного входа signal = 0; switch{modeltype) { case 1: // основная модель входа на основе порогов импульса k = cb + disp; tmp = thresh * mal[k]; if(savg[k] > tmp && savg [k- 1] <= tmp) signal = 1; else if (savg [k] < - tmp && savg[k- 1] >= - tmp) signal = - 1; break; case 2: // основная модель входа на пересечении k = cb + disp; if(CrossesAbove(mal, ma2, k)) signal = 1; else if{CrossesBelow(mal, ma2, k)} signal = - 1; break; case 3: // пересечение с подтверждением k = cb + disp; if(CrossesAbove(mal, ma2, k)) { if(stoch[cb] < 25.0) signal = 1; } else if(CrossesBelow(mal, ma2, k)) ( if(stoch[cb] > 75.0) signal = - 1; } break; case 4: // пересечение с подтверждением и инверсией k = cb + disp; if(CrossesAbove(mal, ma2, k)) ( if(stoch[cb] < 25.0) signal = 1; else if(stoch[cb] > 75.0) signal = - 1; }
Содержание раздела