24398f5c

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


// копируем параметры в локальные переменные для удобного обращения 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; Содержание Назад Вперед