выполняем вычисления по всему объему





ptlim =4.5; // целевая прибыль в единицах среднего истинного диапазона
mmstp = 1.5; // защитная остановка в единицах среднего истинного диапазона
// выполняем вычисления по всему объему данных, включая правила
AvgTrueRangeS{exitatr,hi,lo,cls,50,nb); // средний истинный диапазон для
/ / выхода
Rules{opn, hi, lo, cls, vol, oi, exitatr, nb,
parms [1] , parms[2], parms[3], parms [4] , rulel);
Rules (opn, hi, lo, cls, vol, oi, exitatr, nb,
parms[5], parms[6], parms[7], parms[8], rule2);
Rules (opn, hi, lo, cls, vol, oi, exitatr, nb,
parms[9], parms[10], parms[11], parms[12], rule3);
// запускаем генератор случайных чисел
// ... используем различные случайные последовательности для каждого рынка
// ... ts.model() возвращает индекс рынка (SP=1, YX=2, ...)
iseed = - (ranseed + 10 * ts.model());
rnum = ran2(&iseed);
// проходим через дни, чтобы смоделировать реальную торговлю
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.currenteguity(EQ_CLOSETOTAL);
// считаем количество контрактов для позиции
// ... мы хотим торговать эквивалентом долларовой волатильности
// ... 2 новых контрактов на S&P- 500 от 12/31/98
ncontracts = RoundToInteger(5673.0 / dlrv[cb]);
if(ncontracts < 1) ncontracts = 1;


// избегаем устанавливать приказы на дни с ограниченной торговлей
if(hi[cb+l] == lo[cb+l]) continue;
// генерируем "стандартные" случайные сигналы входа
signal = 0;
rnum = ran2 (Stiseed) ;
if (rnum < 0.025 &&
modeltype == 2) signal = - 1; // случайный короткий вход
else if (rnum > 0.975 &&
modeltype == 1) 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;
}


Содержание раздела