В нашей библиотеке: 321 книг 226 авторов 0 статей За всё время нас посетило 1030272 человек которые просмотрели 19551449 страниц.
Читатели оставили 10 отзывов о писателях, 70 отзывов о книгах и 6 о сайте


Название: Энциклопедия торговых стратегий

Автор: Джеффри Оуэн Кац

Жанр: Технический анализ

Рейтинг:

Просмотров: 2093

Страница: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 |




Шаблоны правил

 

Первый шаблон  правила (case l в функции Rules)  определяет сравнение между двумя ценами и порогом: правило принимает значение ИСТИНА (T RUE), если цена закрытия 1b1 дней назад больше,  чем некоторый поро- говый фактор  (thr) плюс цена закрытия 1b2 дней назад. В остальных случа- ях правило  принимает  значение  ЛОЖЬ (FAL SE). Неизвестные (1b1, 1b2 и thr) оставлены пустыми для будущего использования при реализации про- граммы. Этот шаблон был включен,  потому что тот вид правил, которые он представляет,  был полезен в предыдущих исследованиях.

Второй шаблон правила (case 2) включает простые скользящие  сред-

ние, которые часто используются для определения  тренда. Обычно счи- тается, что рынок будет двигаться вверх, если цена выше ее скользящего среднего, и опускаться вниз, если цена ниже ее скользящего среднего. В шаблоне присутствуют только два неизвестных:  первый  (per) контроли-

рует число  дней  в скользящем среднем  и второй  (v4)  контролирует на- правление сравнения  (выше или ниже).

Третий шаблон правила (case 3) идентичен второму (case 2), за исклю-

чением того, что вместо простого скользящего среднего используется экс- поненциальное  .

ГЛАВА 12    ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ                                                                                                                          287

 

Было  много  рассуждений относительно важности данных  по суммар- ной величине открытых позиций на рынке  (открытому интересу). Лэрри Виллиамс (Larry William s, 1979) упомянул, что снижение открытого инте- реса в течение  периодов застоя  цен указывает на потенциал для сильного подъема.  Сокращение открытого интереса может  быть интерпретирова- но как снижение количества обращающихся на рынке контрактов, созда- вая условия,  когда  спрос  на контракты может  перевесить предложение. Четвертый шаблон правила (case 4) просто вычисляет процентное сниже- ние открытого интереса за период от 1Ь1 дней назад до 1 дня назад (откры- тый интерес, как правило, не публикуется для текущего дня)  и сравнива- ет эту величину с порогом (thr). Если снижение больше,  чем порог, то пра- вило принимает значение ИСТИНА.  В остальных случаях оно принимает значение ЛОЖЬ. Порог и период  (1b1) — неизвестные, которые будут ис- пользованы при реализации программы.

Пятый шаблон  правила (case 5) подобен четвертому шаблону, но рас- считывает повышение, а не падение открытого интереса. Если происхо- дит увеличение,  большее  чем  пороговое значение,  то правило возвра- щает значение ИСТИНА.  Другие  ситуации соответствуют значению ЛОЖЬ.

Шестой шаблон  правила (case 6) может называться условием  «нового максимума». Шаблон запрашивает, отмечен  ли 1b1-дневный новый  мак- симум  за период  последних 1b2 дней.  К примеру,  правило может звучать так:  «Если достигнут  новый  50-дневный максимум в пределах последних

10 дней,  то правило принимает значение ИСТИНА,  в других случаях — ЛОЖЬ».  Это правило пытается найти  простое  условие  пробоя, учитывая пробои, которые произошли несколько дней назад (возможно, сопровож- даемые откатами к предыдущим уровням сопротивления, ставшими уров- нями поддержки, что расценивается другим правилом как хорошая  точка входа).  В данном правиле есть два пробела,   которые необходимо будет заполнить при проведении расчетов:1b1и 1b2.

Седьмой шаблон  правила (case 7) идентичен шестому,  за исключени- ем того, что определяются новые минимумы, а не новые максимумы.

Восьмой шаблон  правила (case 8) исследует  индекс  среднего  направ- ленного движения относительно двух порогов  (thr1 и thr2). Этот индика- тор является мерой  наличия тренда,  как обсуждалось в главе,  посвящен- ной пробоям. Если среднее направленное движение (AD X) выше нижне- го порога  и ниже  верхнего  порога,  то правило возвращает значение ИС- ТИНА.  В других случаях правило возвращает значение ЛОЖЬ.

Девятый шаблон  правила (case 9) выполняет сравнение порогов  со

значением стохастического осциллятора, аналогично шаблону 8.

Десятый шаблон  правила (case 10) оценивает направление наклона осциллятора M ACD . Длины  (1b1 и 1b2) двух скользящих средних,  которые составляют M AC D , и направление наклона (v4) необходимы для выбора значения ИСТИНА  или ЛОЖЬ и определены как параметры.

288                                                                                        ЧАСТЬ II   ИССЛЕДОВАНИЕ входов в РЫНОК

 

МЕТОДОЛОГИЯ   ТЕСТИРОВАНИЯ

 

Ниже  приводятся шаги,  необходимые для эволюционного создания мо- дели входа, основанной на шаблонах правил, используемых в этом иссле- довании:

 

1.    Выберите  произвольную хромосому с  12 элементами. Она представляет собой потенциальное решение (случайное и, ве- роятно, не очень хорошее).

2.     Поставьте в соответствие каждому  параметру  правил  опреде- ленное число,  чтобы получить  три полностью определенных правила (одно  для  каждого  гена) ,  и  определите значение ИСТИНА/ ЛОЖЬ для всех дней  во временном ряду.

3.      Обработайте ценовые данные  день за днем.  Если в данный день все три правила возвращают значение ИСТИНА  и если нет те- кущей  длинной (или  короткий) позиции, то модель получает рыночный приказ на покупку  (или продажу)  при завтрашнем открытии.

4.     Если  имеется позиция,  используйте стандартную стратегию выхода для осуществления выхода.

5.         Оцените торговую  эффективность потенциального решения.

Для этого  определите «пригодность решения» как соотноше- ние  риск/ прибыль в годовом  выражении — величина, кото- рая фактически является значением {-критерия.

6..     Сообщите генетическому оптимизатору, насколько пригодно (в вышеупомянутом смысле)  потенциальное решение (хромо- сома) . Это позволит генетическому оптимизатору обновить по- пуляцию хромосом.

7.     Если  решение отвечает  определенным критериям, то следует сгенерировать сводку  эффективности  системы и другую  ин- формацию и сохранить эти данные  в файле  для последующе- го рассмотрения.

8.    Повторять вышеупомянутые шаги  снова  и снова  до тех пор, пока не пройдет  достаточное число  «поколений».

 

Так  как  вышеупомянутые шаги  повторяются, решения или  «поколе- ния»,  созданные генетическим оптимизатором, в среднем становятся луч- ше и лучше.  Большое количество отдельных эффективных решений по- явится в течение  эволюционного процесса. Большинство решений будет записано в файле,  созданном в ходе неоднократного выполнения первых семи  вычислительных шагов.  Ниже  будет рассмотрен код,  написанный на C++ , который осуществляет вышеупомянутые шаги.

ГЛАВА 12     ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ     289

 

Из-за природы правил, вероятно, будет различным поведение моде- лей при  открытии длинных и коротких позиций. В связи  с этим  модели входа для длинных позиций найдены и проверены отдельно  от моделей входа для коротких позиций. Эффективность модели оценивается на всем портфеле. Цель состоит  в том,  чтобы найти  набор  правил, которые обес- печивают наилучшую эффективность  торговли всем  портфелем финан- совых  инструментов. Процедура, используемая здесь,  отличается от на- ших более ранних исследований (Katz, M cC orm ick, февраль  1997), где по- иск оптимальных правил  проводился на каждом  рынке  в отдельности -— подход,  в большей степени подверженный эффектам «вредной» подгон- ки под исторические данные. Напомним вывод,  полученный в отноше- нии нескольких моделей,  которые были первоначально оптимизированы на индивидуальных инструментах: при использовании одной  модели для всех рынков без оптимизации или  настройки под отдельный рынок эф- фективность данной модели  может существенно понизиться. В нижесле- дующих  тестах  использовалась стандартная платформа C++ ,  стандарт- ные приказы входа и стратегия выхода.

 

static int EventPresent (int *es, int m, int cb) {

// Используется функцией Rules для облегчения кодирования

int i;

for(i=cb-m+l; i<=cb; i++)

if(es[i]) return TRUE;

return FALSE ;

}

 

static void Rules (float *opn, float *hi, float *lo, float *cls, float *vol, float *oi, float *atr, int nb, int vl, float v2, float v3, float v4, int *ans) {

 

// Процедура определяет шаблоны правил, используемых

// в генетическом процессе эволюции модели, основанной на правилах.

// opn, hi, lo,     cls        — стандартные ценовые данные [l..nb]

// vol, oi            — объем и открытый интерес [l..nb]

// nb     — количество дней

// vl, v2, v3, v4 — селектор правил и параметры

// ans    — выходные ценовые данные [l..nb]

 

// локальные макрофункции

#define LinearScale(х,a,b) ( (х)* ( {b}-(а))/1000.0+(а) )

#define BiasedPosScale(х,а) (0 . 000001*(х)*(х)*{а})

#define Compare{a,b,dir) (((dir)>=0)?((a)>(b) }: (fa)<(b)))

 

// локальные переменные

static int lbl, lb2, per, cb, maxlb=100;

static float thr, fac, thr2, thrl, tmp, tiny=l.ОЕ-20; static int IsNewHigh[MAXBAR+l], IsNewLow[MAXBAR+l]; static float Serl[MAXBAR+1] ;

 

// шаблоны правил

switch(vl} {      // выбираем правило case 1: // сравнение изменения цены с порогом

290      ЧАСТЬ II   ИССЛЕДОВАНИЕ входов в РЫНОК

 

lb 1  =      ( i n t) Bi a s e d P o s S ca l e ( v2 ,     50 . 0 ) ;

lb 2  =      ( i n t) Bi a se d P o sS ca l e ( v3 ,     50 . 0 ) ;

fa c   =   L i n earSca l e ( v4 ,    -2 . 5 ,   2 . 5 )   *   s qr t( a b s ( lb l  -  I b2 ) > ;

fo r ( c b- m a xlb ;    c b< = n b;    cb++ )     {

thr = fac * atr [cb];

ans[cb] = cls[cb-lbl]  - cls[cb-lb2]  > thr;

]

break;

 

case 2: // сравнение цены с простым скользящим средним per = 2 + (int)BiasedPosScale(v2, 48.0); Averages(Serl,  cls, per, nb) ;

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

ans[cb] = Compare(cls[cb], Serl[cb],  V4-500.0);

break;

 

case 3: // сравнение цены с экспоненциальным скользящим средним per = 2 + (int)BiasedPosScale(v2, 48.0);

XAverageS(Serl,  cls, per, nb) ;

for(cb-maxlb;  cb<=nb;  cb++)

ans[cb] = Compare(cls[cb], Serl[cb], V4-500.0);

break;

 

case 4: // сравнение падения открытого интереса с пороговым значением

1b1 = 2 + (int)BiasedPosScale (v2, 48.0); thr = LinearScale(v3,  0.01, 0.50); for{cb=maxlb;  cb<=nb; cb++) {

tmp = (oi[cb-lbl]  - oi[cb-l])  / (oi [cb-lbl]  + tiny);

ans [cb] = tmp > thr;

]

break;

 

case 5: // сравнение увеличения открытого интереса с пороговым значением

1b1 = 2 + (int) BiasedPosScale(v2, 48.0); thr = LinearScale(v3,  0.01, 0.99); for(cb=maxlb;  cb<=nb; cb++) {

tmp = (oi [cb-1] - oi[cb-lblj)  / (oi [cb-lbl] + tiny) ;

ans [cb] = tmp > thr;

}

break;

 

case 6: // недавние новые максимумы

1bl = 2 + (int)BiasedPosScale(v2, 48.0);

1b2 = 1 + (int)BiasedPosScale(v3, 8.0);

for(cb=lbl+3;  cb<=nb; cb++)

IsNewHigh[cb]  = hi [cb] > Highest(hi, 1b1, cb-1);

for(cb-maxlb;  cb<=nb; cb++)

ans[cb] = EventPresent(IsNewHigh, 1b2, cb) ;

break;

 

case 7: // недавние новые минимумы

1bl = 2 + (int)BiasedPosScale(v2, 48.0);

1b2 = 1 + (int)BiasedPosScale(v3, 8.0);

for(cb=lbl+3;  cb<=nb; cb++)

IsNewLow[cb]  = lo[cb] < Lowest(lo, 1b1, cb-1) ;

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

ans[cb] = EventPresent(IsNewLow, 1b2, cb);

break;

 

case 8: // среднее направленное  движение thrl = LinearScale(v2,  5.0, 50.0);

thr2 = thrl + LinearScale(v3,  5.0, 20.0);

ГЛАВА 12      ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ    291

 

AvgDirMov{hi,  lo, cls, nb, 14, Serl);

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

ans [cb] = (Serl[cb]  > thrl && Serl [cb] < thr2)

&& Compare (Serl[cb]  , Serl[cb-l],  v4-500.0);

break;

 

case 9: // Медленный %К

thr = LinearScale(v2,  5.0, 95.0); fac = LinearScale(v3,  1.0, 20.0); thrl = thr - fac;

thr2 = thr + fac;

StochOsc(Serl,  hi, lo, cls, 2, 10, nb) ;

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

ans [cb] = (Serl[cb) > thrl && Serl [cb] < thr2)

&& Compare(Serl[cb],  Serl[cb-1],  V4-500.0);

break ;

 

case 10: // направление наклона MACD

lb1 = 2 + (int)BiasedPosScale(v2, 18.0);

lb2 = lbl + 1 + (int)BiasedPosScale(v3, 48.0); MacdOsc(Serl, cls, 1, lbl, lb2, nb) ; for(cb=maxlb;  cb<=nb; cb++)

a n s[c b ]   =  C o m par e ( Se r l[c b ] ,   Se r l[c b-2 ] ,   v 4-500 . 0 ) , •

brea k;

 

d e f a u l t :

nrerror("Undefined rule template  selected");

break;

]

 

// первые maxlb элементов результата  должны иметь значение ЛОЖЬ

memset (&ans [1] , 0, sizeof(*ans)  * maxlb);

 

#undef BiasedPosScale

#undef LinearScale

 

}

 

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 = xl6modOl.c

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

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

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

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

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

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

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

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

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

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

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

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

 

// описываем локальные переменные

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

static int disp, k, modeltype;

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

static float exitatr[MAXBAR+1] ;

static int rulel[MAXBAR+1],  rule2[MAXBAR+1],  rule3[MAXBAR+1];

292      ЧАСТЬ II   ИССЛЕДОВАНИЕ входов в РЫНОК

 

// копируем параметры в локальные переменные для более удобного обращения к ним modeltype = parms[14];             // модель: 1=длинная позиция,  2=короткая ordertype = parms[15];           // вход:  1=на открытии,  2=по лимитному приказу,

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

maxhold =10;   // максимальный  период удержания позиции ptlim = 4;   // целевая прибыль в единицах волатильности mmstp = 1;     // защитная остановка в единицах волатильности

 

// выполнение расчетов для всей ценовой информации

AvgTrueRangeS(exitatr,hi,lo,cls,50,nb);            // средний истинный диапазон для

// выхода

switch(modeltype)  {

case 1: case 2:  // для моделей открытия длинных и коротких позиций

// для каждого дня отдельно оценить три правила

Rules (opn, hi, lo, cls, vol, oi, exitatr, nb, parms[1], parms[2], parms[3], parms[4], rulel);

Rules (opn, hi, lo, cls, vol, oi, exitatr, nb,

parms[5] , parms[6] , parms[7] , parms[8] , rule2); Rules (opn, hi, lo, cls, vol, oi, exitatr, nb,

parms[9] , parms[10] , parms[11] , parms[12] , rule3};

break;

default:  nrerror("Invalid  model type");

 

/ проходим через дни,  чтобы моделировать  настоящую торговлю or(cb = 1; cb <= nb; cb++) {

 

// не открываем позиций до начала периода выборки

//... то же самое, что установка MaxBarsBack в TradeStation if(dt[cb] < IS_DATE) { eqcls[cb] = 0.0; continue; }

 

// выполняем все ожидающие приказы и сохраняем значение капитала по

// закрытию

rс = ts.update(opn[cb] , hi[cb], lo [cb], cls[cb], cb}; if(rc != 0) nrerror("Trade  buffer overflow"); eqcls[cb] = ts.currentequity{EQ  CLOSETOTAL};

 

// подсчитываем  количество  контрактов  для торговли

// ... мы хотим торговать долларовым  эквивалентом  волатильности

// ... 2 новых контрактов S&P-500 на 12/31/98 ncontracts - RoundToInteger(5673.О / dlrv[cb] ) ; if(ncontracts < 1) ncontracts = 1;

 

// избегаем устанавливать  приказы на дни с ограниченной  торговлей if(hi[cb+l] == lo[cb+l])  continue;

 

// генерируем входные сигналы,  цены стоп- и лимитных приказов signal = 0;

switch(modeltype)  {

case 1: // только длинные позиции

if(rulel[cb]  && rule2 [cb] && rule3[cb]) signal = 1;

break;

case 2: // только короткие позиции

if(rulel[cb]  && rule2 [cb] && rule3[cb]} signal = -1;

break;

]

limprice = 0.5 * (hi[cb] + lo [cb]);

stpprice = cls[cb] + 0.5 * signal * exitatr[cb] ;

 

// открываем позицию,  используя определенные  типы приказов if(ts.position(}  <= 0 && signal == 1} {

switch(ordertype)  { // выбираем нужный тип приказа

ГЛАВА 12     ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ     293

 

case 1: ts.buyopen('1', ncontracts); break;

case 2: ts.buylimit('2', limprice, ncontracts); break; case 3: ts.buystop('3' , stpprice, ncontracts); break; default: nrerror("Invalid buy order selected");

}

}

else if(ts.position)) >= 0 && signal == -1) {

switch(ordertype) { // выбираем нужный тип приказа case 1: ts.sellopen('4', ncontracts); break;

case 2: ts.selllimit('5', limprice, ncontracts); break;

case 3: ts.sellstop('6', stpprice, ncontracts); break;

default: nrerror{"Invalid sell order selected");

}

}

// симулятор использует стандартную стратегию выхода

tmp = exitatr[cb];

ts.stdexitcls('X', ptlim*tmp, mmstp*tmp, maxhold);

 

] // обрабатываем следующий день

]

 

C+ +  код описывает шаблоны правил  и стратегию  торговой  системы. Шаблоны правил определяются с помощью функции Rules. Аргументы  v1, v2, v3 и v4 (четыре  числа,  которые  содержит  каждый  ген)  несут всю ин- формацию, требуемую для реализации шаблонов правил.  Аргумент v1 используется для выбора  требуемого  шаблона  правила  из  10 доступных; аргументы  v2, v3 и v4 используются для определения требуемых парамет- ров каждого правила  (направления сравнения, периоды  скользящих сред- них и т.д.). Затем  правило  оценивается на всех днях,  и оценки (1 для ИСТИНА,  0 для ЛОЖЬ) помещаются в вектор cms, возвращающий резуль- таты функции.

Макрос BiasedPosS cale (x, а) используется для создания соответствия между целыми  числами от 0 до 1000 и непрерывным диапазоном от 0 до а. Макрос используется, чтобы вычислить периоды  обратного обзора для определения ценовых  экстремумов и периоды  скользящих средних v2, v3 или v4, значения которых получены  из генетического алгоритма и прону- мерованы целыми  числами от 0 до  1000. Соответствие между номерами от 1 до 1000 и числами из диапазона от 0 до а нелинейно — оно устроено так,  чтобы  можно  было  более детально  исследовать меньшие значения параметров. Например, предположим, что период  скользящего среднего изменяется от 2 до 100 дней. Необходимо с одинаковой точностью произ- водить выбор лучшего решения между периодами 2, 3 и 4 и периодами 30,

50 и 90. Точность поиска должна быть выше для маленьких чисел. Это свя- зано  с тем,  что изменение периода  скользящего среднего  от 2 до 5 дней сильнее  повлияет на результаты  торговли,  чем изменение от 50 до 60.

Макрос L inearS cale (x, а, b) выполняет линейную адресацию целочис- ленного  диапазона 0 ... 1000 к диапазону а ...    . Макрос обычно использу- ется при вычислении порогов  или отклонений. В коде шаблона  правила все параметры вычислены внутри функции Rules, а не внутри ГА. Генети-

294                                                                                        ЧАСТЬ  II   ИССЛЕДОВАНИЕ входов в РЫНОК

 

ческии алгоритм имеет  инструкцию генерировать числа  в диапазоне от

0 до 1000, за исключением элементов хромосом 1, 5 и 9, которые являются первыми числами в каждом  гене  и используются в качестве  селекторов шаблонов правил. Масштабирование проводится внутри  функции Rules, так как шаблоны для различных видов правил имеют различные диапазо- ны изменения параметров и контрольных значений.

Процесс эволюции торговых  систем  начинается со случайного выбо- ра значений хромосомы. Генетический оптимизатор выбирает два члена популяции и спаривает их (исходя  из определения скрещивания, нормы мутации и размера  гена).  Затем полученное потомство возвращается как потенциальное решение. Когда  компоненту ГА сообщают об эффектив- ности полученного решения, он сравнивает ее с наименее пригодным чле- ном популяции. Если пригодность потомства больше,  чем у наименее при- годного  члена,  то ГА заменяет наименее пригодный член  решения полу- ченным потомством. Этот процесс повторяется в течение  нескольких по- колений и осуществляется с помощью программной оболочки (не приве- денной в данной книге) ,  которая,  в свою  очередь,  делает  повторные запросы к функции Model для моделирования торговли и оценки пригод- ности  системы.

Код  функции Model почти  идентичен используемому в более  ранних главах. До цикла  индексации дней,  в котором генерируются приказы для торговли, функция Rules вызывается три раза (один раз для каждого гена), и результаты помещаются во временные ряды rule1, rule2 и ruleЗ. При этом также  подсчитывается средний истинный диапазон за последние 50 дней, поскольку это необходимо для стандартного выхода и оценки правил. Внут- ри  цикла  оценивание правил  производится для текущего  дня  (rulel[cb], rule2[cb], rule3[cb]),  и если все оценки возвращают значение ИСТИНА,  то генерируется сигнал на покупку  (или продажу,  если исследуются входы в короткую позицию). Входы запрограммированы стандартным способом для каждого  из трех тестируемых приказов. В эволюционном процессе используются только  данные  из выборки.

Выходные данные, полученные от программной оболочки, позволяют

выбрать  желаемое решение, которое  можно  использовать в торговле  от- дельно  или в группе  моделей.  Решения могут быть легко  сформулирова- ны как понятные правила для оценки их «физического смысла» и исполь- зования их в качестве  элементов других систем.

 

РЕЗУЛЬТАТЫ  ТЕСТОВ

 

Были выполнены шесть тестов. Эволюционный процесс использовался для поиска оптимальных правил входа в длинные и короткие позиции с каж- дым из трех приказов для входа: по цене открытия, стоп-приказу и лимит- ному приказу. Во всех случаях  было  создано 2500 поколений генетичес-

ГЛАВА 12    ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ                                                                                                                        295

 

кой обработки.  Задача вычисления всех решений и сохранения их в фай- лы потребовала всего несколько часов на быстром P en tium , что демонст- рирует практическую пригодность  этого метода. Для каждого теста гене- тический процесс произвел табличный файл  (G Files от 1 до 6), состоящий из строк,  соответствующих каждому из поколений. Таким образом, каж- дая  строка  представляет определенное решение.  Большинство ранних решений были мало пригодными для торговли, но качество решений улуч- шалось с появлением  новых поколений, что характерно для ГА. Каждая строка содержит информацию относительно  эффективности отдельного решения — набора параметров,  который представляет ген, содержащий- ся в полной хромосоме.

Были выбраны лучшие решения для входа в длинную и короткую по-

зицию по цене открытия.  Эти решения  использовались для проведения шести тестов,  результаты которых приведены  ниже.  В частности,  было протестировано решение,  которое обеспечивало лучший вход в длинную позицию по цене открытия,  и его эффективность была оценена обычным способом на обеих выборках. То же самое решение было проверено и оценено  с входом по стоп-приказу и лимитному приказу. Такая же про- цедура была проведена для коротких позиций:  было определено лучшее решение для входа в короткую позицию по цене открытия.  Затем реше- ние  было  проверено на обеих выборках с каждым из двух типов  прика- зов.  Мы не отбирали отдельное оптимальное решение для каждого  типа приказа, потому что такие действия не позволят сравнить эффективность различных видов приказов. Например, оптимальный вход по цене откры- тия  может  давать  модель  пробоя, в то время  как  оптимальный вход по стоп-приказу может наблюдаться при использовании противотрендовой модели ценового импульса. Эти модели никак не связаны друг с другом, и их результаты ничего  не говорят об общей  эффективности различных видов приказов.  Поэтому мы сначала искали наилучшую модель с рыноч- ным приказом по цене открытия,  а затем тестировали найденную модель с другими видами приказов. Поскольку модель остается неизменной, этот подход позволяет делать значимые сравнения различных типов приказов.

 

Решения  для входов в длинную позицию

 

Табл. 12-1 представляет торговые результаты 20 лучших решений для вхо- дов в длинные позиции по цене открытия (G F ile 1). Каждая строка пред- ставляет различную торговую  модель.  Параметры не указываются, но представлены номера поколений (НОМЕР), вероятность или статистичес- кая значимость (ВЕР, десятичный знак опущен, но подразумевается), сред- няя  прибыль в долларах  за сделку  ($СДЕЛ),  общее  количество сделок (СДЕЛ),  фактор прибыли (Ф.ПРИБ), доходность в процентах годовых (ДОХ%) и чистая  прибыль или убыток  (П/ У).

296                                                                                 ЧАСТЬ II   ИССЛЕДОВАНИЕ входов в РЫНОК

 

Таблица 12—1.    Лучшие 20 решений,  полученные  для длинных позиций  с входом по цене открытия

 

 

Эффективность большинства из этих  моделей, по меньшей мере,  впе- чатляет. Лучшие модели имеют статистическую значимость выше 0,00007, что  означает, что  эти  решения имеют очень высокую вероятность при- быльной торговли в будущем. Многие решения заработали более  50% го- довых.   В некоторых случаях прибыли достигли значительно более  высо- ких уровней. Хотя  лимитный приказ дал много наилучших решений, ос- тальные приказы также показали много хороших, если  не великолепных результатов. Как  и в предыдущих исследованиях,  ГА превосходно обна- руживает многие пригодные для торговли модели.

 




Страница: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 |

Оцените книгу: 1 2 3 4 5

Добавление комментария:






Информацию в электронную библиотеку yourforexschool.com добавляют исключительно для ознакомления. Если вы являетесь автором книги или компанией которая имеет права распространения и вы хотите чтоб на сайте не было вашей книги, то напишите в обратную связь и мы незамедлительно удалим её.

Копирование материалов сайта разрешено только с использованием активной ссылки на yourforexschool.com Copyright © 2010