Методология тестирования лунных моделей


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

Все тесты проводились с использованием входов по сигналам лунной модели для торговли портфелем различных финансовых инструментов.

Можно ли получить прибыль, используя лунную модель? Как результативность подобных моделей будет изменяться со временем? Как изменились их результаты за последние годы? Для того чтобы ответить на эти вопросы, и было проведено тестирование.

Применены стандартные выходы, правила входов будут рассмотрены при обсуждении отдельных тестов. Позиции закрываются при подаче сигнала на вход в противоположном направлении либо при срабатывании стандартного выхода. В приведенном ниже коде описана модель входа на основе лунных циклов.

int LunarEventDates (int n) {

// подсчитывает дату лунной фазы, начиная

// с января 1900.

// n - ввод: номер фазы луны

// 0,4,8... новолуния

// 1,5,9... луна в первом квартале

// 2,6,10... полнолуние

/ / 3,7,11... луна во втором квартале

//возвращает - вывод: дата события по юлианскому календарю

static long ndate;

static float timzon = - 5.0 / 24.0; // восточное стандартное время

static float fгас;


flmoon {n >> 2, n & 3, &ndate, &frac);

frac = 24.0 * {frac + timzon);

if(fгас < 0.0) { // корректировка времени

ndate—;

frac += 24.0;

)

if(frac > 12.0) (ndate++; frac - = 12.0;)

else frac += 12.0;

return ndate; // юлианская дата события

}

int LunarEquivDate (int date, int n) (

// рассчитываем дату предыдущего n- го (n < 0) или

// будущего (n > 0) случая фазы луны, равной

// сегодняшней фазе

// date - ввод: текущая дата в формате ГГГММДД

// n - ввод: лунные циклы назад{- ) или вперед (+)

// return - вывод: дату предыдущего или будущего цикла в формате ГГГММДД

static long nstar, ndatel, ndate2, curdate, ntarg, nans;

static int mm, dd, yyyy;

curdate = julday((date/100)%100, date%10O, 1900+date/lOOOO);

while(curdate >= ndate2) {ndatel = LunarEventDates(++nstar); ndate2 = LunarEventDates(nstar + 1) ;}

while(curdate < ndatel) {ndatel - LunarEventDates{—nstar); ndate2 = LunarEventDates(nstar + 1);}

if(curdate < ndatel curdate >= ndate2

abs(ndate2 - ndatel - 7) > 2)

nrerror("LunarEquivDate: calculation error");

nans = LunarEventDates(nstar +4 * n);

nans += (curdate - ndatel);

caldatfnans, &mm, &dd, &yyyy) ;

return 10000*(yyyy- 1900) + 100*mm + dd;

}

void LunarAvg (float *a, float *v, float *dt, int mode, int m, int n) {

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