Использование моделей, основанных на факторе


Глава 1 Глава 2 Глава 3
// Использование моделей, основанных на факторе сезонности. // File = x12mod01.c // parms — набор [1..MAXPRM] параметров // dt - набор [l..nb] дат в формате ГГММДД // орn — набор [1..nb] цен открытия // hi - набор [l..nb] максимальных цен // 1о — набор [1..nb] минимальных цен // cls - набор [l..nb] цен закрытия // vol — набор [1..nb] значений объема // oi — набор [1..nb] значений открытого интереса // dlrv — набор [1..nb] средних долларовой волатильности // nb - количество торговых дней в наборе данных // ts — ссылка на класс торгового симулятора // eqcls — набор [1..nb] уровней капитала при закрытых позициях // объявляем локальные переменные static int rc, cb, neontracts, maxhold, ordertype, signal; static int avglen, disp, k, modeltype, rnatype;

static float mmstp, ptlim, stpprice, limprice, tmp, thresh; static float exitatr[MAXBAR+1]; static float savg[MAXBAR+1] , pchg[MAXBAR+1] , stoch[MAXBAR+1] ; static float ma1[MAXBAR+1] , ma2 [MAXBAR+1] ; // копируем параметры в локальные функции для удобного обращения avglen = parms[1]; // длина скользящей средней disp - parms[2]; // фактор смещения thresh = parms[3]; // пороги для импульсных моделей matype = parms[7]; // тип скользящей: // 1=простое скользящее среднее // 2- экспоненциальное // 3=треугольное с передним взвешиванием // 4- треугольное // 5=простое центрованное // 6 =экспоненциальное центрированное // 7 =треугольное центрированное modeltype = parms[8]; // тип модели: // 1- импульс // 2- пересечение // 3=пересечение с подтверждением // 4=пересечение с подтверждением и инверсией ordertype = parms[9]; // вход: 1- на открытии, 2- по лимитному приказу, // 3 - по стоп - приказу maxhold = 10; // период максимального удержания позиции рt1irn = 4 ; // целевая прибыль в единицах волатильности mmstp = 1; // защитная остановка в единицах волатильности // выполняем вычисления для всех данных, используя процедуры быстрой // обработки массивов AvgTrueRangeS(exitatr,hi,lo, cls, 50, nb) ; // средний истинный диапазон для // выхода pchg[l] = 0.0; for(cb =2; cb <= nb; cb++) { tmp = cls[cb] - cls[cb- l]; // изменение цены tmp = tmp / exitatr[cb]; // нормирование pchg[cb] = clip(tmp, - 2.0,2.0); // клиппинг } switch(modeltype) { case 1 // данные для импульсной модели SeasonalAvg(savg,pchg,dt,1,OOS_DATE,nb); // сезонности MovAvg{savg,savg,matype,avglen,nb); // сглаживание // скользящей for(cb = 1; cb <= nb; cb++) rna2 [cb] = fabs (savg [cb] } ; MovAvg(mal, ma2, 1, 100, nb}; // среднее отклонение break; case 2: case 3: case 4: // данные для модели пересечения SeasonalAvg(savg,pchg,dt,1,OOS_DATE,nb); // сезонности for(cb =2; cb <= nb; cb++) savg [cb] = savg[cb- l] ; // объединение MovAvg{mal,savg,matype,avglen,nb); // сглаживание среднего MovAvg(ma2,rnal,matype,avglen,nb) ; // пересечение средней if(modeltype ==3 modeltype == 4) // стохастический // осциллятор StochOsc(stoch,hi,lo,cls,1,9 , nb) ; // 9- дневный Быстрый %К; break; default: nrerror{"TRAPSMOD: invalid modeltype"); }
Содержание раздела