в локальные переменные для удобного





// копируем параметры в локальные переменные для удобного обращения
thresh = parms[l]; // порог выходных значений для сети
netnum = parms[2]; // число нейросети
mode = parms[6] ; // обучение (режим=1) или тест (режим=2)
ordertype = parms[9]; // тип входного приказа
maxhold = 10; // период максимального удержания позиции
ptlim = 4; // целевая прибыль в единицах волатильности
mmstp = 1; // защитная остановка в единицах волатильности
//выполняем вычисления по всему объему данных с помощью векторных процедур
AvgTrueRangeS(exitatr,hi,lo,cls,50,nb); // средний истинный диапазон для
// выхода
RevStochOsc(revstoch,hi,lo,cls,2,10,nb); // обратный Медленный %К
// готовим набор фактов для обучения нейросети
if(mode == 1) { // режим подготовки
// фактов (р6=1)
// открываем выходной файл и записываем N- TRAIN в файл
// заголовок перед обработкой первого рынка
if(strcmp(ts.symbol(), "SP") == 0) (
fil = fopen("yl5fac01.dat", "wt");
fprintf(fil, "%d\n%d\n", (int)18, (int)l);
factcount = 0;
}
// записываем действительные факты в файл
// делаем для каждого рынка в портфеле
for(cb = 1; cb <= nb; cb++) (
if(dt[cb] < ISJATE) continue; // период анализа
if(dt[cb+10] > OOS_DATE) break; // игнорируем данные вне пределов выборки
fprintf(fil, "%6d", ++factcount) ; // номер факта
PrepareNeurallnputs(var, cls, cb) ;
for(k = 1; k <= 18; k++)


fprintf(fil, "%7.3f", var[k]); // входные значения
fprintf(fil, "%7.3f\n",revstoch[cb] ); // цель
if((cb % 1000) == 1)
printf("CB = %d\n", cb); // информация о прогрессе
}
// закрываем выходной файл и выходим после обработки последнего рынка
if(strcmp(ts.symbol(), "LB") == 0) (
fclose(fil);
exit(0);
}
}
// моделируем торговлю с обученной нейросетью
if(mode == 2) { // режим торгового симулятора (рб=2)
// загружаем обученную сеть перед обработкой первого рынка
if (strcmp(ts.symbol(), "SP") == 0) (
sprintf(netname, "/nets/nn%d.net", netnum);
nnet = ntlload(netname) ;
if(nnet == NOLL) nrerror(ntlerrm(ntlerrc()));
}
// проходим через дни, чтобы смоделировать реальную торговлю
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");
egcls[cb] = ts.currentequity(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;

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