Методология тестирования


Глава 1 Глава 2 Глава 3

Во всех тестах циклических моделей входа используется стандартный портфель из 36 рынков. Количество контрактов для покупки или продажи на каждом рынке подбиралось для соответствия долларовой волатильности двух контрактов S&P 500 на конец 1998 г. Использован стандартный выход: защитная остановка закрывает любую позицию, убытки которой превышают одну единицу волатильности. Кроме того, лимитный приказ закрывает позиции, прибыль которых превышает четыре единицы волатильности, а рыночный приказ по цене закрытия закрывает позиции, не закрытые предыдущими выходами в течение 10 дней. Правила входов рассмотрены в обсуждении модели и индивидуальных тестов. Все тесты проведены при помощи стандартного C- Trader toolkit. Ниже приведен код модели, основанный на волновом фильтре со стандартной стратегией выходов:

static void Model (float *parms, float *dt, float *opn, float *hi, float *lo, float *cls, float *vol, float *oi, float *dlrv, int nb, TRDSIM &ts, float *eqcls) {

// Модели группы волновых фильтров

// File = x14mod01.c

// parms — набор [1..MAXPRM] параметров

// dt - набор [l..nb] дат в формате ГГММДД

// орn — набор [1..nb] цен открытия

// hi — набор [1..nb] максимальных цен

// 1о - набор [l..nb] минимальных цен

// cls — набор [1..nb] цен закрытия

// vol — набор [1..nb] значений объема

// oi — набор [1..nb] значений открытого интереса

// dlrv - набор [l..nb] средних долларовой волатильности

/ / nb — количество точек в наборе данных

// ts - ссылка на класс торгового стимулятора


// eqcls - набор [l..nb] уровней капитала по ценам закрытия

// объявляем локальные переменные

static int rc, cb, ncontracts, maxhold, ordertype, signal;

static int disp, k, modeltype, fcount, goodcycle, domperndx;

static float mmstp, ptlim, stpprice, limprice, tmp;

static float width, oldwidth, lper, sper, per, ratio;

static float exitatr[MAXBAR+1], **inphase, **inquad, **power;

static float peakpower, phase, peaknoise, domperiod;

static float buyphase, sellphase, phaseb, oldphase, oldphaseb;

static WAVFILT filter[20];

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

width = parms[l]; // ширина полосы пропускания фильтра (0.05 .. 0.20}

disp= parms[2]; // временное смещение в градусах

modeltype = parms[8]; // модель: 1=торговать развороты циклов

ordertype = parms[9]; // вход: 1=на открытии, 2=по лимитному приказу,

// 3=по стоп- приказу

maxhold = 10; // период максимального удержания позиции

ptlim = 4; // целевая прибыль в единицах волатильности

mmstp = 1; // защитная остановка в единицах волатильности

// Создаем искусственный набор цен закрытия в

// форме синусоиды. Это плазмода для проведения тестов.

// Модель должна хорошо торговать на данном наборе цен.

// #define USESIMEWAVE

#ifdef USESINEWAVE

per = 3.0;

ratio = exp (log (30.0/3.0) / (nb - 1));

sper=0.0;

for (cb = 1; cb <= nb; cb++) (

sper += 2.0 * PI * (1.0 / per);

cls[cb] = sin(sper);

per *= ratio;

}

#endif

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