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





// Использование моделей, основанных на факторе сезонности.
// 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");
}


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