// копируем параметры в локальные переменные для удобного обращения
thresh = parms[1]; // порог выходных значений нейронной сети
ranseed = parms[2]; // используется для инициализации случайной
// последовательности
maxhold = 10; // период максимального удержания позиции
ptlim =4.5; // целевая прибыль в единицах среднего истинного
// диапазона
mmstp = 1.5; // защитная остановка в единицах среднего истинного
// диапазона
// выполняем вычисления по всему объему данных
AvgTrueRangeS(exitatr,hi,lo,cls,50,nb); // средний истинный
// диапазон для выхода
NeuralForecast(prd, cls, nb) ; // прогнозы
// запускаем генератор случайных чисел
// ... используем различные случайные последовательности для каждого рынка
// ... 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] = О.Э; 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);
// считаем количество контрактов для позиции
// ... мы хотим торговать эквивалентом долларовой волатильности
// ... 2 новых контрактов на S&P- 500 от 12/31/98
ncontracts = RoundToInteger(5673.О / dlrv[cb]);
if(ncontracts < 1) ncontracts = 1;
// избегаем устанавливать приказы на дни с ограниченной торговлей
if(hi[cb+l] == lo[cb+l]) continue;
// генерируем "стандартные" случайные сигналы входа
signal = 0;
rnum = ran2(siseed);
if (rnum < 0.025) signal = - 1; // случайный короткий вход
else if (rnum > 0.975) signal = 1; // случайный длинный вход
// входим в сделки по цене открытия
entryposted = 0;
if(ts.position() <= 0 && signal == 1) (
ts.buyopen('l', 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;
)