WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |

«THE ENCYCLOPEDIA OF TRADING STRATEGIES JEFFREY OWEN KATZ, Ph.D. ...»

-- [ Страница 4 ] --

for(j = 1;

j < 100;

j++) ( // идем вперед if(cnt >= m) break;

// достаточность лет для теста sdate = ((int)dt[i] - 10000 * j);

// исходная дата if (sdate < dt[3]) break;

// идем к началу k = max(0, (int)(i-260.893*j));

// приблизительный индекс hunt(dt, n, sdate, &k) ;

// находим точный индекс if(sdate > dt[k]) k++;

if(sdate = dt[k]) continue;

cnt++;

sum += v[k];

// накапливаем среднюю } for(j = 1;

j < 100;

j++) ( // идем вперед if (cnt >= m) break;

// достаточность лет для теста sdate = ((int)dt[i] + 10000 * j);

// исходная дата ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК k = min(n, (int)(i+26Q.893*j));

// приблизительный индекс hunt(dt, n, sdate, &k);

// находим точный индекс if(sdate > dt[k]) k++;

if(sdate = dt[k]) continue;

cnt++;

sum += v[k];

// накапливаем среднюю } a[i] = sum / cnt;

// заканчиваем среднюю } // следующая текущая дата } } 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 = 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) ;

// средний истинный диапазон для // выхода ГЛАВА 8 СЕЗОННОСТЬ 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");

} // проходим через торговые дни, чтобы смоделировать реальную торговлю for(cb = 1;

cb <= nb;

cb++) { // не открываем позиций в периоде подсчета //... то же самое, что установка MaxBarsBack в TradeStation if(dt[cb] < IS_DATE) { eqcls[cb] = 0.0;

continue;

} // выполняем ожидающие приказы и считаем кумулятивный капитал rc = ts.update (opn [cb], hi [cb], lo [cb], cls [cb], cb) ;

if(rc = 0) nrerror("Trade buffer overflow");

eqcls [cb] = ts.currentequity(EQ_CLOSETOTAL) ;

// не входим в сделки в последние 30 дней внутри выборки // оставляем место в массивах для будущих сезонностей if(cb > nb-30) continue;

// считаем количество контрактов для позиции //... мы хотим торговать эквивалентом долларовой волатильности //... двух новых контрактов на S&P-500 от 12/31/ neontracts = RoundToInteger{5673. О / dlrv[cb]) ;

if(ncontracts < 1) ncontracts = 1;

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

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

switch{modeltype) { case 1: // основная модель входа на основе порогов импульса k = cb + disp;

tmp = thresh * mal[k];

if(savg[k] > tmp && savg [k-1] <= tmp) signal = 1;

else if (savg [k] < -tmp && savg[k-1] >= -tmp) signal = -1;

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

case 2: // основная модель входа на пересечении k = cb + disp;

if(CrossesAbove(mal, ma2, k)) signal = 1;

else if{CrossesBelow(mal, ma2, k)} signal = -1;

break;

case 3: // пересечение с подтверждением k = cb + disp;

if(CrossesAbove(mal, ma2, k)) { if(stoch[cb] < 25.0) signal = 1;

} else if(CrossesBelow(mal, ma2, k)) ( if(stoch[cb] > 75.0) signal = -1;

} break;

case 4: // пересечение с подтверждением и инверсией k = cb + disp;

if(CrossesAbove(mal, ma2, k)) ( if(stoch[cb] < 25.0) signal = 1;

else if(stoch[cb] > 75.0) signal = -1;

} else if(CrossesBelow(mal, ma2, k)) { if(stoch[cb] > 75.0) signal = -1;

else if(stoch[cb] < 25.0) signal = 1;

) break;

default: nrerror("TRAPSMOD: invalid modeltype");

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

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

// входим в сделку, используя определенный тип приказа if (ts.position)) <= 0 && signal == 1) ( switch(ordertype) { // выбираем желаемый тип приказа 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.position1) >= 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);

} // обрабатываем следующий день ) Определив локальные переменные и векторы, первый блок програм мы копирует различные параметры в соответствующие переменные для более удобного и понятного обращения к ним. Параметры описаны в ссыл ках, размещенных в коде.

ГЛАВА 8 СЕЗОННОСТЬ Следующий блок проводит все расчеты на полной серии данных. Сред ний истинный интервал для 50 дней рассчитывается и сохраняется в век торе (exitatr). Впоследствии он будет использоваться для размещения за щитных остановок управления капиталом и целевых уровней прибыли в стандартизованной стратегии выхода. Средний истинный интервал в этом векторе (или в ряду данных) также используется для нормализации воз никающих в ходе работы программы изменений цен.

После вычисления среднего истинного интервала рассчитываются нормализованные и «обрезанные» изменения цен. Каждая точка в ряду данных pchg отражает изменение цены между ценами закрытия текуще го и предшествующего дней. Изменения цены затем нормализуются пу тем деления их на средний истинный интервал и «обрезаются» для сни жения влияния экстремальных перепадов цены (статистических выбро сов). Нормализация необходима, поскольку волатильность рынков меня ется со временем иногда очень сильно. Например, сейчас индекс S&P в 5 и более раз дороже, чем 15 лет назад. Очевидно, что и средняя дневная волатильность изменилась соответствующим образом. Если бы измене ния цены не подвергались нормализации и не представлялись в единицах текущей волатильности, сравнение сезонных явлений за разные годы было бы искаженным. Годы, когда волатильность была выше, давали бы больший вклад, чем годы с низкой волатильностью. В случае S&P 500 пос ледние годы полностью доминировали бы при проведении усреднения, а при нормализованном представлении каждый год вносит почти одинако вый вклад. Срезание выбросов проводится на уровне — 2 и + 2 средних истинных интервала, чтобы удалять случайные и аномальные значения, не искажая общую оценку.

Опция выбора modeltype определяет, какие операции проводятся да лее. Значение 1 выбирает основную импульсную модель. Сезонные пока затели рассчитываются для обрезанных и нормализованных изменений цен, причем в пределах выборки используется метод «складного ножа», а вне пределов выборки — метод «всех прошедших лет». Эти операции обес печиваются вызовом функции SeasonalAvg. Временной ряд сезонных по казателей затем сглаживается скользящим средним (вид среднего уста навливается параметром matype, а длина— параметром avglen). Затем рассчитывается временной ряд средних абсолютных отклонений сезон ных импульсов. Этот ряд представляет собой простое скользящее сред нее с периодом 100 дней от ряда абсолютных значений сезонных импуль сов, которое затем используется в дальнейших расчетах уровней поро гов. Значения modeltype 2, 3 и 4 представляют собой вариации моделей, основанных на пересечении. Сезонные показатели рассчитываются, и показатель изменения цены для каждого дня интегрируется (вычисляет ся «бегущая сумма»), в результате образуется новый ряд, ведущий себя подобно ценовому ряду. Эта синтезированная серия отображает движе ние цен на основе типичного поведения рынка в предшествующие и, воз 190 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК можно, в будущие годы. Затем рассчитываются два скользящих средних:

та! (скользящее среднее интегрированного сезонного ряда типа matype с периодом avglen) и та2 (сигнальная линия для определения момента пересечения, представляет собой скользящее среднее ma1 с теми же па раметрами matype и avglen). Если же выбран modeltype 3 или 4, то прово дятся дополнительные расчеты для моделей с подтверждением и/или ин версией;

в данном случае рассчитывается значение Быстрого %К с перио дом 9 дней, которое затем сохраняется в векторе stoch.

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

Modeltype 1 представляет базовую модель, основанную на пороге це нового импульса. Порог рассчитывается как произведение множителя, оп ределяющего относительную величину порога (thresh) на среднее абсолют ное отклонение сезонного импульса за прошлые 100 дней. Сигнал к по купке генерируется, если сумма сезонного импульса (savg) и параметра смещения (disp) поднимается выше уровня порога. Если данная сумма опус кается ниже величины, равной значению порога со знаком минус, подает ся сигнал на продажу. Иными словами, если для данного дня плюс-минус несколько дней (disp) предсказывается достаточно сильный сезонный им пульс цен, то торговля ведется в направлении ожидаемого движения.

Modeltype 2 представляет базовую модель пересечения и использует скользящие средние интегрированных сезонных показателей текущего дня плюс фактор смещения. Если первое скользящее среднее поднимает ся выше второго, генерируется сигнал к покупке. В противоположном случае генерируется сигнал к продаже. Фактор смещения позволяет мо дели искать моменты пересечения, которые произойдут в будущем через несколько дней. Таким образом, преодолевается запаздывание, свойствен ное скользящим средним. Поскольку сезонные средние основываются на исторических данных, отстоящих от текущей даты не менее чем на один год, вполне приемлемо прогнозировать на несколько дней вперед.

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

Modeltype 4 использует модель, основанную на пересечении с добав лением подтверждения и инверсии. При использовании modeltype 4 сиг нал к покупке подается, если первое скользящее среднее пересекает вто ГЛАВА 8 СЕЗОННОСТЬ рое снизу вверх. При этом значение стохастического осциллятора долж но быть не менее 25. Если же при верхнем пересечении стохастический показатель превышает уровень 75, то модель подает сигнал к продаже исходя из предположения, что произошла инверсия. Если первое сколь зящее среднее ниже второго, и нормальная сезонная модель подтвержда ется значением стохастического осциллятора, превышающим уровень 75, генерируется сигнал к продаже. Если в этом случае показатель составит менее 25, предполагается инверсия и отдается сигнал к покупке.

В свою очередь цена лимитного приказа (limprice) устанавливается на уровне середины ценового диапазона текущего дня. Цена входного стоп приказа (stpprice) устанавливается на уровне закрытия текущего дня плюс (для покупки) или минус (для продажи) половина среднего истинного ди апазона последних 50 дней. Остальные блоки кода идентичны приводив шимся в предыдущих главах: они обеспечивают размещение приказов указанного вида (ordertype) и стандартные выходы.

РЕЗУЛЬТАТЫ ТЕСТОВ Проводились тесты двух основанных на сезонных явлениях моделей вхо да: модели на пересечении (с подтверждением и инверсией и без них) и модели, основанной на ценовом импульсе. Каждая модель исследовалась с тремя видами обычных входных приказов: вход по цене открытия, по лимитному и стоп-приказу.

В табл. 8-1 и 8-2 показаны результаты тестирования этих моделей по отдельным рынкам в пределах выборки (табл. 8-1) и вне пределов выбор ки (табл. 8-2). В первом столбце указаны обозначения рынка. Последняя колонка показывает, сколько прибыльных тестов было получено для дан ного рынка. Цифры в верхней строке указывают номер теста, последняя строка — на скольких рынках данная модель была прибыльной. Эти дан ные достаточно подробно показывают степень прибыльности системы:

один минус (—) означает умеренные средние убытки в сделке ($2000 — 4000), два минуса ( ) — крупные убытки (более $4000). Один плюс (+) означает умеренную прибыль ($1000 — 2000), два плюса (+ +) означают крупную прибыль — более $2000 в сделке. Пустая ячейка обозначает при быль до $ 1000 или убыток до $ 1999. (Названия рынков и их символы соот ветствуют обозначениям табл. II-1;

часть II, введение.) Тесты базовой модели, основанной на пересечении Интегрированный временной ряд ценоподобных сезонных показателей сглаживался с помощью простого скользящего среднего ma1 с периодом avglen. На его основе строилось второе среднее та2. Сигнал к покупке 192 ЧАСТЬ И ИССЛЕДОВАНИЕ входов в РЫНОК генерировался, когда та! пересекала снизу вверх та2. Сигнал к продаже генерировался, когда ma 1 пересекала сверху вниз та2. В целом это та же модель, основанная на пересечении скользящих средних, но в ней исполь зуются не собственно цены, а прогнозируемые сезонные временные ряды.

Вход обеспечивается рыночным приказом по цене открытия (тест 1), ли митным приказом (тест 2) или стоп-приказом (тест 3).

Оптимизация в этих тестах состояла в прогонке параметра периода скользящего среднего avglen от 5 до 20 с шагом 5 и также в прогонке пара метра смещения (disp) от 0 до 20 с шагом 1. С использованием входа по цене открытия по показателю соотношения риска/прибыли в пределах выбор ки оптимальными были значения периода скользящего среднего 20 и сме щения 5. При входе по лимитному приказу оптимален был период 20 и сме щение 8, при входе по остановке период 20 и смещение 6. Модель, видимо, лучше работала с длинными скользящими средними (с сильным сглажива нием), и для входов по лимитному приказу требовались немного более ран ние сигналы по сравнению с входами по рыночному и стоп-приказу.

В пределах выборки не было получено ни одного положительного ре зультата при использовании и длинных, и коротких позиций, хотя сред ний убыток в сделке был гораздо меньше, чем во многих тестах из преды дущих глав. Лучше всего работали стоп-приказы, немного хуже — лимит ные приказы, а хуже всего — рыночные приказы по цене открытия. Для стоп-приказов и лимитных приказов при ограничении только длинными позициями торговля была выгодной. Во всех случаях наилучший период скользящих средних составлял 20 дней, а оптимальное значение смеще ния изменялось для разных типов приказов. При использовании входа по цене открытия оптимальное смещение равнялось 5 дням, при входе по лимитному приказу — 8 дням, а по стоп-приказу — 6 дням. Это вполне осмысленно, поскольку лимитные приказы отдаются раньше, чем рыноч ные приказы по открытию (так как для выполнения лимитного приказа требуется некоторое время).

Вне пределов выборки результаты показали подобное же распределе ние относительной эффективности по показателям средней прибыли со сделки ($СДЕЛ);

использование приказов по остановке давало прибыль в $576 со сделки, что соответствует доходности 8,3% годовых. Это немного, но, тем не менее, это реальный положительный результат на недавних данных вне пределов выборки. При использовании входов по стоп-при казу торговля, ограниченная только длинными позициями, была выгод ной и в пределах, и вне пределов выборки, а торговля короткими позици ями была убыточной в обоих случаях. Это соответствует результатам мно гих ранее проводившихся тестов. Для всех видов приказов и всех выбо рок процент прибыльных сделок составлял от 40 до 43%.

Интересно отметить, что даже в убыточных вариантах потери капита ла были значительно меньше, чем встречавшиеся в разнообразных пре дыдущих тестах.

ГЛАВА 8 СЕЗОННОСТЬ Минимум был достигнут в декабре 1995 г., а с тех пор и до февраля 1999 г.

(конец данных) отмечен резкий подъем.

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

Кроме этого, интересно отметить расхождение между поведением сезонных моделей в этом исследовании и в наших собственных тестах S&P 500 более раннего периода (Katz, McCormick, апрель 1997). Различия, скорее всего, объясняются разной настройкой процедуры оптимизации.

В ранних тестах проводилась настройка на торговлю только индексом S&P 500, а в более поздних — целым портфелем финансовых инструмен тов. По сравнению с другими рынками сезонные явления на рынке S&P 500 имеют гораздо более высокую частоту и, следовательно, требуют ис пользования скользящих средних со значительно меньшим периодом.

196 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК Кроме того, ранние тесты не использовали отдельных выходов для того, чтобы была возможность захватывать сезонные тренды длиной в несколь ко недель. В данных тестах стандартный выход закрывает сделку спустя не более чем 10 дней — скорее всего, эффективность всех рынков, а не только S&P 500, увеличилась бы при замене стандартного выхода на вы ход, способный удерживать позицию при продолжительных трендах.

Тестирование базовой модели, основанной на ценовом импульсе Для модели, основанной на импульсе, проводилось сглаживание неинте грированного сезонного временного ряда изменений цены при помощи центрированного простого скользящего среднего с периодом avglen. Цен трированное СС не дает запаздывания, поскольку относительно текуще го дня этот метод усредняет одинаковое количество прошлых и будущих точек данных. Использование этого метода оправдано для сезонных мо делей, в которых оценка сезонного влияния на определенную дату осно вывается на данных старше одного года. Для этого сглаженного ряда се зонных изменений цены рассчитывается ряд средних абсолютных откло нений. Для этого рассчитывалось абсолютное отклонение для каждого дня.

Затем ряд абсолютных отклонений усреднялся с помощью скользящего среднего с периодом 100 дней. Сигнал на покупку генерировался, если значение сезонного импульса данного дня плюс смещение (disp) превы шало некое пороговое значение (thresh), умноженное на среднее абсолют ное отклонение сезонного импульса. Сигнал на продажу генерировался, если сезонный импульс с учетом смещения был меньше произведения порогового множителя (thresh) и среднего абсолютного отклонения, взя того со знаком минус. Входы выполнялись при помощи различных прика зов: в тесте 4 — вход по открытию, в тесте 5 — вход по лимитному прика зу, в тесте 6 — по стоп-приказу.

Оптимизировался период скользящего среднего, смещение и порог.

Период прогонялся от 5 до 15 с шагом 5;

смешение от 1 до 10 с шагом 1;

порог от 1,5 до 2,5 с шагом 0,5. Наилучшая эффективность в пределах вы борки отмечена при периоде 15, пороге 2,5 и смещении 2 вне зависимости от вида приказа. Для входа по открытию и по стоп-приказу было предпоч тительно смещение 2, для входа по лимитному приказу — смещение 1. В соответствии с этим ожиданиями значения смещения были гораздо мень ше, чем в модели, основанной на пересечении, в которой за счет смеще ния необходимо было компенсировать запаздывание скользящих средних.

В общем, результаты были гораздо хуже, чем у сезонной модели на пересечении средних. В пределах выборки только входы по стоп-приказу были прибыльными. Вне пределов выборки ни один вид входов не дал положительных результатов. Средние убытки в сделке были весьма зна чительными, и, как ни странно, длинные позиции работали хуже, чем ко ГЛАВА 8 СЕЗОННОСТЬ роткие. Это противоречит общей картине более высокой эффективности длинных сделок.

При входе по рыночному приказу по цене открытия и по лимитному приказу капитал снижался с начала выборки до конца периода вне вы борки. При использовании входа по лимитному приказу падение капита ла было более плавным. При использовании входов по стоп-приказу гра фик изменения капитала колебался в горизонтальном диапазоне до мая 1990 г. Затем начался резкий рост капитала, продолжавшийся до сентяб ря 1990 г. С тех пор и почти до конца данных капитал медленно падал.

После апреля 1997 г. капитал практически перестал изменяться.

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

В пределах выборки 15 рынков были в той или иной степени прибыль ными при использовании стоп-приказа, 13 рынков — при входе по откры тию и 9 рынков — при входе по лимитному приказу. Вне пределов выбор ки эти значения составили соответственно 15, 16 и 16.

Хотя модель, основанная на ценовом импульсе работала хуже на це лом портфеле, она показала отличные результаты на большем количестве отдельных рынков, чем модель, основанная на пересечении.

Испытания модели, основанной на пересечении с подтверждением Эти модели идентичны описанным выше основным моделям на пересе чении, за исключением того, что решение о входе принимается только в том случае, когда сезонное поведение рынка подтверждается соответству ющим значением стохастического Быстрого %К. Если пересечение сви детельствует о благоприятном моменте для покупки, покупка осуществ ляется только при значении Быстрого %К менее 25%. Это означает, что 198 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК для генерации сигнала к покупке рынок должен находиться в состоянии снижения или быть вблизи сезонного минимума для покупки. Таким же образом продажа осуществляется, если значение Быстрого %К более 75%, что указывает на близость рынка к максимуму. Как и в других тестах, ис пользованы стандартные выходы. В тесте 7 вход осуществлялся по откры тию, в тесте 8 — по лимитному приказу, а в тесте 9 — по стоп-приказу.

Оптимизация для этих тестов стояла в прогонке периода скользящего среднего avglen от 5 до 20 с шагом 5 (Р1) и смещения disp от 0 до 20 с шагом (Р2). Для рыночного входа по открытию оптимальные значения составляли 15 для периода скользящего среднего и 7 для смещения. Для входа по лимит ному приказу оптимальные значения составляли 15 для периода скользяще го среднего и 6 для смещения. Для входа по стоп-приказу оптимальные зна чения составляли 20 для периода скользящего среднего и 9 для смещения.

При рассмотрении результатов каждой сделки использование подтвер ждения Быстрым %К ухудшило эффективность работы системы как в пре делах, так и вне пределов выборки при использовании входов по откры тию и по лимитному приказу;

в обоих случаях потери были значительны ми. При переходе на стоп-приказы в обеих выборках отмечена неболь шая прибыль. В пределах выборки средняя сделка принесла доход $846, вне пределов выборки $1677. В пределах выборки 41% сделок был выгод ным, годовая доходность составила 5,8%. Статистическая значимость это го результата низка, но по крайней мере результат нельзя назвать явно случайным. И длинные, и короткие позиции были прибыльны. Вне преде лов выборки 44% сделок были прибыльными, годовая доходность соста вила 19,6%. Вероятность того, что результаты не являются случайными, составила 77%. По-прежнему выгодными были и длинные, и короткие сдел ки. По сравнению с другими системами количество сделок было относи тельно низким — всего 292 в пределах и 121 вне пределов выборки. В об щем, модель снова оказалась прибыльной — сезонный принцип, видимо, все-таки может служить основанием для заключения сделок.

График изменения капитала для рыночного входа по цене открытия показывает постепенное снижение до мая 1989 г., затем горизонтальный участок до августа 1993 г. Далее до конца выборки и большую часть време ни вне выборки капитал падал. График изменения капитала для входа по лимитному приказу выглядит подобным образом, но падение капитала шло более плавно. График для входа по стоп-приказу выглядит принципиаль но иначе: капитал быстро падал до мая 1987 г., затем рос с ускорением до июня 1995 г. (начало периода вне выборки) и с тех пор практически не изменялся. Максимальные прибыли были достигнуты между июнем 1990 г.

и маем 1991 г., маем и сентябрем 1993 г. и между январем и июнем 1995 г.

Последний из периодов прибыли находится вне пределов выборки.

По сравнению с двумя предыдущими моделями постоянная прибыль для всех видов приказов отмечена на меньшем количестве рынков. При быль при всех трех видах входов как в пределах, так и вне пределов выбор ГЛАВА 8 СЕЗОННОСТЬ ки отмечена только на рынке леса. На рынке неэтилированного бензина все входы были прибыльны в пределах выборки, а входы по открытию и стоп-приказу были высокоприбыльны вне пределов выборки. На рынках кофе и какао получена прибыль при всех видах входов в пределах выбор ки, но только при входе по стоп-приказу вне выборки. При использовании входа по стоп-приказу как в пределах, так и вне пределов выборки рынки NYFE, серебра, палладия, сырой нефти, леса и кофе были высокоприбыль ными. Как и ранее, рынки пшеницы были убыточными. Таким образом, показатели этой модели достаточно постоянны для успешного примене ния с использованием входа по стоп-приказу на избранных рынках.

Тесты модели, основанной на пересечении с подтверждением и инверсией Эта модель представляет собой аналог предыдущей, но с проведением дополнительных сделок в участках, где были возможны инверсии. Напри мер, если пересечение средних давало сигнал на покупку, но Быстрый %К был выше уровня 75%, то подавался сигнал на продажу. В основе идеи ле жало предположение о возможном обращении обычного сезонного цик ла. Подобным же образом, если пересечение указывало на продажу, но Быстрый %К был менее 25%, то подавался сигнал на покупку. Эти сигна лы выполнялись дополнительно к сигналам системы, основанной на пе ресечении с подтверждением. В тесте 10 использовался вход по цене от крытия, в тесте И — вход по лимитному приказу, в тесте 12 — вход по стоп-приказу.

Оптимизация для этих тестов состояла в прогонке периода скользя щего среднего avglen от 5 до 20 с шагом 5 (Р1) и смещения disp от 0 до 20 с шагом 1 (Р2). Для входа по открытию оптимальные значения составляли 15 для периода скользящего среднего и 2 для смещения. Для входа по ли миту оптимальные значения составляли 20 для периода скользящего сред него и 4 для смещения. Для входа по стоп-приказу оптимальные значения составляли 20 для периода скользящего среднего и 9 для смещения.

При рассмотрении входа по цене открытия график изменения капи тала постоянно и плавно снижался от начала к концу всего набора дан ных. Для входа по лимитному приказу график изменения капитала также снижался, хотя общее падение капитала для этого вида приказа было по чти в два раза меньше. График изменения капитала для входа по стоп приказу снижался до мая 1987 г., затем до августа 1993 г. капитал практи чески не изменялся. С августа 1993 г. по июнь 1995 г. капитал резко вы рос, а затем постепенно снижался до конца рассматриваемого периода.

Добавление инверсии оказало разрушительное влияние на эффективность модели. Очевидно, наблюдаемые сезонные явления редко сопровожда ются инверсиями.

200 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК Добавление инверсионных сигналов катастрофически ухудшило эф фективность системы по показателю средней прибыли в сделке при всех видах входов. Во всех сочетаниях выборки данных и вида входа наблюда лись убытки, за исключением очень маленькой прибыли при входе по стоп приказу вне пределов выборки. Ни на одном рынке не отмечалось устой чивых прибылей для различных входов, хотя отдельные прибыльные со четания все же были. Например, вход по стоп-приказу на рынках NYFE и 10-летних казначейских бумаг был очень прибыльным и в пределах, и вне пределов выборки. Тот же эффект наблюдался на рынках платины и се ребра. В пределах выборки с входом по стоп-приказу очень прибыльным был рынок сои, но вне пределов выборки прибыль этого рынка была ми нимальной. Во всех сочетаниях видов приказов и выборок данных на рын ках пшеницы прибыль была нулевой или наблюдались убытки.

Обзор результатов Результаты всех тестов объединены в одной таблице и представлены на двух графиках для обозрения. В табл. 8-3 приведены показатели эффек тивности, распределенные по выборке данных, виду входа и модели. Ре зультаты каждой модели приводятся в двух строках: в первой —доход ность в процентах годовых, во второй — средняя прибыль или убыток в сделке в долларах. Два правых столбца содержат усредненные значения для всех видов входа в пределах и вне пределов выборки. Последние стро ки содержат усредненные значения для всех моделей по видам приказов.

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

При сравнении моделей по различным видам входов очевидно, что в пределах выборки эффективность была максимальной для модели пере сечения с подтверждением и наихудшей для модели пересечения с под тверждением и инверсией. Вне пределов выборки наиболее эффектив ной была базовая модель, основанная на пересечении, наихудшей — опять-таки модель на пересечении с подтверждением и инверсией.

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

В предшествующих главах испытывались различные виды моделей входа, причем обычно наилучшим был вход по лимитному приказу. В слу чае сезонных моделей повышение эффективности при использовании входа по стоп-приказу носит драматический характер, несмотря на боль шие расходы на сделку. Ранее казалось, что принципы противотрендовой ГЛАВА 8 СЕЗОННОСТЬ Таблица 8—3. Эффективность входов, основанных на сезонных явлениях по моделям, видам приказов и выборкам данных Модель В пределах выборки Вне пределов выборки Среднее Среднее Открытие Лимитный Стоп- Открытие Лимитный Стоп- В Вне приказ приказ приказ приказ пределах пределов На основе -9.7 -4.1 -1.3 -5.8 -1.7 8.3 -5.0 0. пересечения -1127.0 -424.0 -179.0 -300.0 -56.0 576.0 -576.7 73. На основе -9.4 -7.4 3.3 -13.6 -13.7 -16.4 -4.5 -14. импульса -1069.0 -757.0 275.0 -952.0 -785.0 -1750.0 -517.0 -1162. Пересечение с -9.6 -7.2 5.8 -13.8 -21.1 19.6 -3.7 -5. подтверждением -1195.0 -832.0 846.0 -1512.0 -3408.0 1677.0 -393.7 -1081. Пересечение с -9.6 -8.9 -2.2 -20.4 -22.6 0.9 -6.9 -14. подтверждением и -1669.0 -1696.0 -229.0 -2545.0 -2642.0 95.0 -1198.0 -1697. инверсией В среднем -9.6 -6.9 1.4 -13.4 -14.8 3.1 -5.0 -8. -1265.0 -927.3 178.3 -1327.3 -1722.8 149.5 -671.3 -966. торговли могут действовать лучше в сочетании с какими-либо следующи ми за трендом или подтверждающими элементами, например с входом по стоп-приказу. В случае с сезонными моделями это подтверждение, полу чаемое в результате срабатывания стоп-приказов, является даже более важным, чем получаемое от показателей вроде Быстрого %К. Другими сло вами, если на основании сезонной модели следует ожидать повышения цен, подтверждение этого должно быть получено до заключения сделки.

В общем, создается впечатление, что сезонные явления действитель но оказывают воздействие на рынок, что доказано неуступающей или превосходящей другие модели эффективностью сезонной системы с вхо дом по стоп-приказу. Эта модель была одной из немногих прибыльных.

Влияние сезонных явлений на рынки, очевидно, является достаточно силь ным, что оправдывает проведение дальнейших исследований подобных моделей.

Было бы интересно исследовать сезонные модели, ограничившись рынками, где была показана их максимальная эффективность, или же рынками, где по фундаментальным причинам следует ожидать ярко вы раженных сезонных эффектов. Исходя из имеющихся данных, можно заключить с достаточным основанием, что некоторые рынки в высшей степени подвержены сезонным явлениям. В свое время, ограничив исполь зование моделей, основанных на пробое, только рынками валют, мы по лучили замечательные результаты — возможно, нечто подобное произой дет при ограничении сезонных моделей соответствующими рынками.

При рассмотрении всех тестов и подсчете количества достоверных зна чительных прибылей создается впечатление о тех рынках, которые при 204 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК будущих событий. Хотя сезонные явления недостаточны для оказания вли яния на целый портфель ценных бумаг и сырьевых фьючерсов, тем не менее на их основе удается окупить транзакционные расходы и получить некоторую прибыль. В то же время на отдельных рынках даже простей шие модели могут быть весьма прибыльными, иными словами, сезонные явления производят впечатление реальных и пригодных источников ин формации. В определенное время года на рынке наблюдаются приливы и отливы, которые могут эффективно использоваться моделями, подобны ми испытанным в данной главе.

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

ЧТО МЫ УЗНАЛИ?

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

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

Торговля на группе особо чувствительных рынков может быть чрезвычайно прибыльна.

Для получения наилучших результатов исходные сезонные данные желательно сочетать с той или иной формой подтвер ждения или обнаружения трендов. Использование дополни тельной информации может повысить эффективность простой сезонной модели.

ГЛАВА Лунные и солнечные ритмы В предыдущей главе сезонные явления были определены как повторяю щиеся феномены, связанные с календарной датой. Сезонные явления включают факторы положения Земли на орбите и наклона земной оси относительно Солнца, сочетание которых повторяется раз в год. Другие связанные с календарем ритмы образованы движением Луны, с ее повто ряющимися фазами, а также активностью солнечных пятен. В этой главе снова будут подвергаться анализу рыночные циклы, на которые оказыва ют влияние внешние силы, на это раз — взаимоотношения поведения рынка и солнечных/лунных ритмов.

БЕЗУМИЕ ИЛИ ЗАКОНОМЕРНОСТЬ?

Обсуждение вопросов влияния планет наводит на мысли о том, что мно гие называют астрологической чепухой. Но было бы неоправданно апри орно отрицать возможное влияние солнечных, лунных и других эффек тов только потому, что астрология бессмысленна и в словаре определяет ся как «лженаука, претендующая на предсказание будущего путем изу чения предположительного влияния Солнца, Луны и звезд на человечес кое поведение». Подобные поверья часто основываются на отсутствии информации. Но что же реально известно о так называемой астрологии, особенно в форме влияния солнечных и планетных эффектов на земные события?

Ученые продемонстрировали наличие корреляции между положени ем планет и чертами личности. В одном исследовании (Mayo, White и Eysenck, 1978), опубликованном в Journal of Social Psychology, пытались доказать, что интровертные и экстравертные черты характера определя ются знаком зодиака, т.е. месяцем рождения. Тестирование использова ло данные 2324 лиц и показало, что лица, рожденные под знаками Овна, Близнецов, Льва, Весов, Стрельца и Водолея имели большую вероятность экстравертного поведения, а рожденные под знаком Тельца, Рака, Девы, Скорпиона, Козерога и Рыб — интровертного. Результаты стабильно под 206 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК тверждали гипотезу, так же как и в других подобных исследованиях (Gauquelin, Gauhquelin и Eysenck, 1979).

Также известно, что гравитационное поле Луны оказывает влияние на водные, литосферные и атмосферные приливы на Земле. Известно, что Луна управляет временем размножения коралловых полипов, закрытием раковин устриц, преимущественным совершением некоторых преступ лений и возбуждением лиц, страдающих «лунатизмом». Более того, изве стно, что во время полнолуния у женщин чаще происходит овуляция, а также чаще начинаются роды.

При наличии таких данных уже нетрудно представить влияние лун ных циклов на поведение рынка. Еще Ларри Вильяме (Larry Williams, 1979) обнаружил, что цены на серебро, пшеницу, кукурузу и соевое масло по вышаются в полнолуние и падают в новолуние!

Как известно каждому радиолюбителю, так называемые «солнечные пятна» оказывают сильное воздействие на дальнюю радиосвязь. На по верхности Солнца наблюдаются темные участки, по одной из теорий вы зываемые неравномерным гравитационным воздействием планет на при ливные ритмы Солнца. Другая теория объясняет их движением магнит ных полюсов Солнца, но в любом случае период высокой активности сол нечных пятен влияет на распространение радиоволн — коротковолновые радиосигналы, которые обычно распространяются только в пределах пря мой видимости, отражаются от ионосферы и могут распространяться на тысячи миль. Многие могли заметить это явление по телевидению: поверх сигнала местной телестанции накладывается сигнал далекого передатчи ка. С другой стороны, в периоды низкой солнечной активности дальнее распространение коротких волн становится маловероятным, и для даль ней радиосвязи требуются волны гораздо большей длины.

Активность солнечных пятен и солнечные вспышки также коррели руют с магнитными бурями на Земле, способными нарушать работу чув ствительной электроники и даже выводить из строя энергосети. Магнит ная буря, вызванная солнечными выбросами в марте 1989 г., привела к остановке работы гидроэлектростанции, питавшей часть Монреаля и Кве бека, на девять часов (Space Science Institute, 1996).

Некоторые ученые считают, что изменения солнечной активности мо гут быть причиной крупных изменений земного климата, например Мало го Ледникового Периода в 1600-х годах, начавшегося после 100 лет снижен ной солнечной активности (Center for Solar and Space Research, 1997).

Что же касается торговли, то Эдвард Р. Дьюи (Edward R. Dewey), осно вавший Фонд Изучения Циклов в 1940 г., полагал, что существует связь меж ду солнечными пятнами и промышленным производством, возможно, выз ванная влиянием на климат. В связи с этим он пытался исследовать корре ляцию солнечной активности и цен на сельскохозяйственные продукты.

Наш собственный интерес к солнечным пятнам достиг пика тогда, ког да мы обнаружили, что в 1987 г. только в течение трех дней количество ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ пятен (показатель солнечной активности) превышало 100— и это были дни «черного понедельника» — 15 и 16 октября! Путем простых вычисле ний можно убедиться в том, что вероятность случайного совпадения в дан ном случае не превышает 1%.

Ниже мы рассмотрим влияние на торговлю лунных циклов в разделе «Лунные циклы» и солнечных пятен в разделе «Солнечные пятна и актив ность рынка».

ЛУННЫЕ ЦИКЛЫ И ТОРГОВЛЯ В предыдущем исследовании (Katz, McCormick, июнь 1997) мы обнару жили, что при помощи лунных циклов можно прибыльно вести торговлю на рынке NYFE. С 1990 г. по 1997 г. простая система на основе лунных циклов принесла $75 550 прибыли. Из 170 сделок 60% были прибыльны ми. Средняя прибыль в сделке составила $444,41, а общая прибыль — 365% (не в годовом исчислении). Длинные позиции были прибыльнее, чем ко роткие (520% по сравнению с —37%). Сигналы зачастую предсказывали точки разворота с точностью до дня. Также прибыльно работала система и на рынке серебра. Сигналы точно соответствовали максимальным и ми нимальным значениям. И длинные, и короткие позиции были прибыль ными. Всего за этот период времени на рынке серебра было получено 190% прибыли. Даже на рынке пшеницы длинные и короткие сделки были при быльными и принесли 242% прибыли. Несомненно, для системы, исполь зующей только один параметр (количество дней с новолуния или полно луния) и совершающей много сделок, такие результаты впечатляют и, скорее всего, достаточно устойчивы.

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

СИГНАЛЫ ВХОДА НА ОСНОВЕ ЛУННОГО ЦИКЛА Получать сигналы входа на основе лунного ритма можно различными спо собами. В тестах использованы два метода — метод ценового импульса и метод пересечения. Для расчета импульса рассчитывается временной ряд изменений цены и проводится центрированное сглаживание (не вызыва ющее задержек или фазовых сдвигов). Для нормализации каждое изме 208 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК нение цены в сглаженном ряду делится на средний истинный интервал последних 50 дней. Для каждого дня определяется фаза луны. Затем ищет ся максимально возможное число прошлых точек данных с такой же фа зой луны и рассчитывается импульс цен для этих дней. Среднее значение этих импульсов становится значением в ряду лунных импульсов, т.е. пос ледовательности, отражающей ожидаемую скорость изменения цены (им пульс) на данный момент на основании предыдущих дней с той же фазой луны. Каждое число в ряду лунных импульсов основывается на событиях не менее чем 27-дневной давности, поэтому центрированное сглажива ние и другие методы прогнозирования относительно данного дня могут быть обоснованно использованы. Вход в рынок производится, когда зна чение импульса превышает положительный порог (подается сигнал на покупку) или опускается ниже отрицательного порога (подается сигнал на продажу). Покупка или продажа могут осуществляться, как и ранее, по цене открытия, по лимитному приказу или по стоп-приказу. Расчет им пульса и генерация входов организованы подобно сезонной модели, но вместо соответствующей даты в прошлые годы рассматривают дни с той же фазой луны в предыдущие месяцы.

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

Затем к этой последовательности применяется модель, основанная на пе ресечении скользящих средних. Поскольку значение каждой точки в та ком ряду определяется только данными, датированными не менее чем днями назад, то запаздывание скользящего среднего может быть ском пенсировано смещением на несколько дней вперед.

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

Также испытывалось несколько правил для использования подтверж дений и инверсий в попытках улучшить эффективность базовой модели.

Пример подтверждения состоит в следующем: если подается сигнал на покупку, то уровень цен на рынке должен быть близок к минимуму;

если же в этот момент цены близки к максимуму, то сигнал является подозри тельным, т.е. указывает на поведение рынка, не соответствующее иссле дуемой лунной или сезонной модели. Система с использованием пересе чения с подтверждением применяет такое дополнительное правило, ко торое должно выполняться как условие подачи приказа на основе сигна ла. Если система дает сигнал на покупку, то показатель Медленного %К ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ при этом должен быть ниже 25%, т.е. рынок должен находиться в состоя нии, близком к минимуму за последнее время. Соответственно, если сис тема дает сигнал на продажу, то Медленный %К должен быть выше 75%, чтобы считать поведение рынка соответствующим лунной модели. Мо дель с подтверждением и инверсией также вводит правило инверсии при каза: если подается сигнал на покупку в то время как рынок близок к мак симуму (Медленный %К выше 75%), то считается, что произошла инвер сия лунной модели, и отдается сигнал на продажу. Если сигнал на прода жу подается в момент, когда рынок близок к минимуму, то система отдает приказ на покупку.

Характеристики входов, используемых в моделях на лунном цикле, подобны входам сезонных моделей: входы в рынок делаются на основе прогнозирования и, следовательно, пригодны для торговли против трен да. Как и любые прогностические входы, они могут не совпадать с пове дением рынка. Как и в случае с сезонными явлениями, могут происхо дить инверсии ритма или цикла.

МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ ЛУННЫХ МОДЕЛЕЙ Все тесты проводились с использованием входов по сигналам лунной мо дели для торговли портфелем различных финансовых инструментов.

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

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

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);

210 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК 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 >= ndate || 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) { // Подсчитываем лунное (в зависимости от даты и фазы) скользящее среднее // для каждого дня, основанное на предыдущих днях и (в некоторых случаях) // на последующих днях с эквивалентной лунной фазой.

// Работаем на всех имеющихся данных.

//а - вывод: значения [1..n] лунного среднего //v - ввод: исходный ценовой ряд данных [1..n] // dt - ввод: соответствующие [1..n] данные // mode - ввод: метод анализа:

// 1 = «складной нож» IS, все прошлые циклы // 2 - фиксированный период в лунных циклах //m - ввод: дата (для режима - 1) или период анализа (для режима = 2) // n - ввод: количество дней во всех рядах static int i, j, cnt;

static unsigned long k;

static float sum, sdate, tiny=l.OE-20;

if(mode == 1) { // режим «складного ножа» ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ for(i = 1;

i <= n;

i++} { // для каждого текущего дня sum = 0.0;

cnt = 0;

for(j = 2;

j < 1000;

j++) { // двигаемся назад sdate - LunarEquivDate {dt[i], -j ) ;

//к исходной дате if(sdate < dt[3]) break;

// переход к началу hunt(dt, n, sdate, &k) ;

// находим индекс if (sdate > dt[k]) k++;

cnt++;

sum += v[k] ;

// накапливаем среднюю } for(j = 2;

j < 1000;

j ++) { // двигаемся вперед sdate = LunarEquivDate {dt[i], j);

//к исходной дате if(sdate > m) break;

// избегаем данных oos hunt(dt, n, sdate, &k);

// находим индекс if(sdate > dt[k]) k++;

cnt++;

sum +- v[k];

// накапливаем среднюю } a[i] = sum / (cnt + tiny);

// заканчиваем среднюю ) // следующий день } else if(mode == 2) { // режим фиксированного периода анализа for(i = 1;

i <= n;

i ++) { // для каждого текущего дня sum =0.0;

cnt = 0;

for(j =2;

j<1000;

j++) { // двигаемся назад if(cnt >= m) break;

// выполняем достаточные условия sdate = LunarEquivDate(dt[i], -j);

// исходная дата if (sdate < dt[3]) break;

// идем к началу hunt(dt, n, sdate, &k);

// находим индекс if{sdate > dt[k]} k++;

cnt++;

sum +- v[k];

// накапливаем среднюю } for(j = 2;

-j < 1000;

j++) { // двигаемся вперед if (cnt >= m) break;

// выполняем достаточные условия sdate = LunarEquivDate(dt[i], j ) // исходная дата hunt(dt, n, sdate, &k) ;

// находим индекс if (sdate > dt[k]} k++;

cnt++;

sum += v[k];

// накапливаем среднюю } a[i] = sum / (cnt + tiny) // заканчиваем среднюю } // следующий день } } 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 = xl3modOl.c // parms — набор [1..MAXPRM] параметров // dt — набор [l..nb] дат в формате ГГММДД // орn — набор [1..nb] цен открытия // hi - набор [l..nb] максимальных цен // 1о — набор [1..nb] минимальных цен // cls — набор [l..nb] цен закрытия // vol - набор [l..nb] значений объема // oi — набор [1..nb] значений открытого интереса // dlrv — набор [1..nb] средних долларовых волатильностей / / nb — количество дней в наборе данных // ts — ссылка на класс торгового симулятора // eqcls — набор [1..nb] уровней капитала по ценам закрытия // объявляем локальные переменные static int rc, cb, ncontracts, maxhold, ordertype, signal;

static int avglen, disp, k, modeltype, matype, mktindx;

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

static float exitatr[MAXBAR+1], savg[MAXBAR+1] ;

212 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК static float mal[MAXBAR+1], ma2[MAXBAR+1], stoch[MAXBAR+1];

static float *exitatrtab[MAXMKT+1], *savgtab[MAXMKT+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;

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

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

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

// Таким образом, значительно снижается время выполнения программы.

mktindx = ts.modelf) ;

// индекс рынка if (exitatrtab[mktindx] == NOLL) { // размещен?

exitatrtab[mktindx] = vector(1, nb);

// таблица exitatr savgtab[mktindx] = vector{1, nb);

// таблица savg AvgTrueRangeS(exitatrtab[mktindx], hi, lo, cls, 50, nb);

//50-дневный средний истинный // диапазон float *pchg = vector(1, nb);

// вспомогательный вектор pchg[l] = 0.0;

for(cb =2;

cb < = nb;

cb++) { tmp = cls [cb] - els [cb-1];

// изменение цены tmp /= exitatrtab[mktindx] [cb];

// нормирование pchg [cb] = clip(tmp, -2.0, 2.0);

// обрезание } LunarAvg(savgtab[mktindx], pchg, dt, 2, 60, nb);

// лунная сезонность free_vector(pchg, 1, nb);

printf {"Mkt: %d\n", mktindx};

// показывать прогресс } // выполняем вычисления для всех данных memcpy(exitatr, exitatrtab[mktindx], sizeof (float)*nb);

memcpy(savg, savgtab[mktindx], sizeof(float)*nb);

switch(modeltype) { case 1: // данные для импульсной модели MovAvg{savg,savg,matype,avglen,nb) ;

// сглаживающее среднее for(cb = 1;

cb <= nb;

cb++) ma2 [cb] = fabs(savg[cb]} ;

MovAvg (mal, ma2, 1, 100, nb) ;

// среднее отклонение break;

case 2: case 3: case 4: // данные для моделей пересечения for(cb = 2;

cb <= nb;

cb++) savg[cb] += savg [cb-1];

// интеграция MovAvg(mal,savg,matype,avglen,nb);

// сглаж. средн.

MovAvg(ma2,mal,matype,avglen,nb};

// пересеч. средн.

if (modeltype == 3 | | modeltype == 4) // стохастический осц.

ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ StochOsc(stoch,hi,lo,cls,1,9,nb);

// 9-дневный Быстрый %К break;

default: nrerror("TRAPSMOD: invalid modeltype");

} // проходим через дни, чтобы смоделировать реальную торговлю for(cb = I;

cb <= nb;

cb++) { // не открываем позиций до периода выборки //... то же самое, что установка MaxBarsBack в TradeStation if(dt[cb] < IS_DATE) { egcls[cb] = 0.0;

continue;

} // выполняем ожидающие приказы и считаем кумулятивный капитал rc = ts.update(opn[cb], hi[cb], lo [cb], cls[cb], cb) ;

if (rc = 0) nrerror("Trade buffer overflow");

eqcls[cb] = ts.currentequity{EQ_CLOSETOTAL);

/ / не проводим сделок в последние 3 0 дней выборки.

// для того, чтобы оставить место в массивах для будущих сезонностей if(cb > nb-30) continue;

// считаем количество контрактов для позиции //... мы хотим торговать эквивалентом долларовой волатильности //... 2 новых контрактов на S&P-500 от 12/31/ neontracts = RoundToInteger(5673.О / dlrv[cb]};

if(ncontracts < 1) ncontracts = 1;

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

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

switch(modeltype) { case 1: // основная модель входа на основе импульса с порогом k = cb + disp;

tmp = thresh * mal[k] ;

if(savg[k] > tmp && savg[k-l] <= tmp) signal = 1;

else if(savg[k] < -tmp && savg[k-l] >= -tmp) signal = -1;

break;

case 2 : // основная модель пересечения k = cb + disp;

if (CrossesAbove (mal, ma2, k) } signal = 1 ;

else if (CrossesBelow{mal, ma2, k)} signal = -1;

break;

case 3: // пересечение с подтверждением k = cb + disp;

if(CrossesAbove{mal, ma2, k)) { if(stoch[cb] < 25.0) signal = 1;

} else if {CrossesBelow(mal, ma2, k)) { if(stoch[cb] > 75.0} signal = -1;

} break;

case 4 : // пересечение с подтверждением и инверсией k = cb + disp;

if{CrossesAbove(mal, ma2, k)) { if (stoch[cb] < 25.0) signal = 1;

else if{stoch[cb] > 75.0} signal = -1;

} else if (CrossesBelow (rnal, ma2, k) } { if (stoch[cb] > 75.0) signal = -1;

else if (stoch[cb] < 25.0} signal = 1;

} break;

214 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК ) limprice = 0.5 * (hi [cb] + lo [cb] ) ;

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

// входим в сделку, используя определенный тип приказа if (ts.position{) <= 0 && signal == 1) { switch(ordertype) { // select desired order type 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);

} // обрабатываем следующий день } Собственно коду предшествует ряд функций, необходимых для рас чета лунных циклов на любом рынке с адаптивным подходом. Функция Model следует стандартным принципам: после объявления параметры копируются в местные переменные для простоты обращения. Коммен тарии указывают, что контролируют параметры. В следующем блоке рас считывается средний истинный интервал за 50 дней (exitatrtab), исполь зуемый в выходах и при нормализации, а также лунные сезонные пос ледовательности (savgtab) — прогнозируемые изменения цены для каж дого дня. Эти ряды рассчитываются один раз для каждого рынка и зано сятся в таблицы;

это допустимо, поскольку при повторных вызовах Model в последующих тестах никакие важные параметры не изменяются. Вто рой блок рассчитывает специфические для моделей временные после довательности, необходимые для получения сигналов входа. Если modeltype = 1, используется простая импульсная модель;

если modeltype = 2, то модель на основе пересечения;

если modeltype = 3, то модель на основе пересечения с подтверждением, и если modeltype = 4, то модель на основе пересечения с подтверждением и инверсией. Среди возмож ных серий есть такие варианты, как сглаженная последовательность лун ных импульсов, интегрированные импульсы (ценоподобный ряд), сколь зящие средние для моделей на пересечении и Медленный %К для под тверждений и инверсий. В зависимости от modeltype могут приобретать значение некоторые другие параметры. Один из них, avglen, управляет периодом всех скользящих средних: в модели на основе импульса он ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ управляет длиной центрированного треугольного скользящего средне го, а в моделях на пересечении — длиной необходимых там средних.

Другой параметр, disp, выставляет смещение, т.е. степень сдвига вперед для компенсации запаздывания скользящих средних. Параметр thresh означает величину порога, используемого в импульсной модели для длин ных и коротких позиций (короткие используют отрицательное значе ние thresh). Переменная matype управляет видом скользящего среднего:

1 — простое, 2 — экспоненциальное, 6 — центрированное экспоненци альное, 7 — центрированное треугольное;

существуют и другие виды средних, не использованные в анализе. После расчета всех рядов дан ных запускается цикл, который перебирает рыночные цены день за днем для моделирования торговли. Этот цикл содержит код для обновления симулятора, определения количества контрактов, избежания дней с ог раниченной торговлей и т.п. В следующем блоке, расположенном внут ри блока перебора текущих дней, происходит генерация сигналов вхо да. Правила определяются параметром modeltype. Последний блок уп равляет отдачей соответствующих приказов согласно параметру ordertype: 1 — вход по цене открытия, 2 — по лимитному приказу, 3 — по стоп-приказу.

Результаты тестирования лунных моделей Проводилось тестирование четырех моделей: на основе пересечения, импульса, пересечения с подтверждением и пересечения с подтвержде Таблица 9—1. Эффективность лунных моделей, распределенная по модели, виду приказа и выборке Модель В пределах выборки Вне пределов выборки Среднее Среднее Открытие Лимитный Стоп- Открытие Лимитный Стоп- В Вне приказ приказ приказ приказ пределах пределов Лунное -9,3 -6,0 -5,6 -14,3 -10,2 -10,4 -7.0 -11, пересечение -1287 -406 -686 -894 -643 -702 -793 - Лунный -10,1 -9,9 -8,1 -14,8 -19,7 -8,3 -9,4 -14, импульс -2410 -1560 -1288 -1316 -1942 -372 -1753 - Пересечение -8,1 -6,6 1,8 -20,5 -21,3 -18,6 -4,3 -20, с подтвержд. -1251 -655 234 -3465 -3896 -2449 -557 - Пересечение с -9,4 -10,0 -7,8 -20,6 -20,9 -20,1 -9,1 -20. подтвержд. и -1546 -1078 -998 -2937 -3203 -2995 -1207 - инверсией Среднее -9,3 -8,1 -4,9 -17,6 -18,0 -14,4 -7,4 -16, -1624 -925 -685 -2153 -2421 -1630 -1078 - 218 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК дель была прибыльна. В табл. 9-2 и 9-3 степень прибыльности и убыточно сти рынков для каждой модели указана следующим образом: один минус (—) означает убыток в $2000 — 4000, два минуса ( ) — убыток более $4000;

один плюс ( + ) означает прибыль от $1000 до $2000, два плюса (+ +) — прибыль более $2000;

пустая ячейка означает прибыль до $ или убыток до $1999 со сделки.

Тестирование базовой модели, основанной на пересечении Скользящее среднее mat рассчитывалось на основе интегрированной ценоподобной лунной серии. На его основе рассчитывалось второе сколь зящее среднее та2. Для тестирования использовались следующие прави ла: сигнал на покупку генерируется, когда mat поднимается выше та2.

Сигнал на продажу генерируется, когда та! опускается ниже та2. Эта модель практически совпадает с моделью пересечения скользящих сред них, описанной в предыдущих главах. Их единственное отличие состоит в том, что в данном случае используются «лунные» ряды данных, а не не посредственно цены. Входы производились по цене открытия (тест 1), по лимитному приказу (тест 2) и по стоп-приказу (тест 3).

Оптимизация состояла в прогонке периода скользящих средних avglen от 5 до 15 с шагом 5 и смещения disp от 0 до 15 с шагом 1. Для входа по цене открытия наилучшая эффективность по показателю риска/прибыли в пределах выборки была достигнута при периоде скользящих средних и смещении 8;

для входа по лимитному приказу — при периоде 15 и сме щении 6;

для входа по стоп-приказу— при периоде 15 и смещении 12.

Ни один из тестов ни в одной из выборок не принес прибылей. Наи лучшая эффективность (т.е. наименьшие убытки) были обнаружены при входе по лимитному приказу, средние результаты были показаны при вхо де по стоп-приказу, а максимальные убытки — при входе по цене откры тия. При использовании входа по лимитному приказу 43% из 1759 сделок были прибыльными. Вне выборки вход по лимитному приказу дал мини мальный средний убыток со сделки, а вход по стоп-приказу — максималь ный убыток.-В общем, система на целом портфеле работала плохо, отно сительная эффективность длинных и коротких сделок носила неустойчи вый характер. В пределах выборки длинные позиции часто были более убыточны, чем короткие, в отличие от исследовавшихся ранее моделей.

Капитал постоянно снижался на протяжении всего ряда данных при использовании входа по цене открытия. При входе по лимитному прика зу капитал поднимался до сентября 1989 г. Затем наблюдались снижение до июля 1992 г., слабый подъем до февраля 1994 г. и новое падение до июля 1998 г., после чего наметился подъем. При использовании же входа по стоп приказу отмечалось медленное снижение капитала на протяжении всего периода тестирования.

ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ В пределах выборки количество рынков, прибыльных при использова нии входа по открытию, лимитному и стоп-приказу, составило 15, 8 и 7 со ответственно. Вне пределов выборки больше всего рынков (17) принесли прибыль при использовании входа по лимитному приказу, 16 — при входе по цене открытия и 14 — при использовании стоп-приказа. Вне пределов выборки было больше прибыльных комбинаций рынков и видов входов, т.е.

можно предположить, что в последнее время большее количество рынков испытывает воздействие лунных циклов. В пределах выборки только рын ки немецкой марки и сырой нефти были прибыльными при использовании всех трех видов приказов. Вне пределов выборки рынок немецкой марки был высокоприбыльным при использовании всех трех видов приказов;

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

Тестирование базовой импульсной модели Для сглаживания неинтегрированного лунного ряда ценовых изменений использовалось центрированное скользящее среднее. При этом не возни кало запаздывания, поскольку центрированное скользящее среднее для данного дня учитывает одинаковое количество предшествующих и после дующих точек данных. Такое сглаживание применимо, поскольку оценка лунных циклов основывается на данных минимум двухмесячной давнос ти. Для сглаженного ряда изменений цены строился ряд средних абсолют ных отклонений и вычислялось простое скользящее среднее с периодом 100 дней для получения желаемого результата. Приказ на покупку отда вался, когда импульс на данный день с добавлением смещения disp превы шал произведение порогового множителя thresh на среднее абсолютное отклонение лунного импульса. Приказ на продажу отдавался, когда значе ние импульса с добавлением смещения disp было меньше той же самой величины, взятой со знаком минус. Входы осуществлялись по цене откры тия (тест 4), по лимитному приказу (тест 5) и по стоп-приказу (тест 6).

Оптимизация состояла в прогонке периода скользящих средних от до 15 с шагом 5, смещения от 1 до 10с шагом 1 и порогового значения от 1,5 до 2,5 с шагом 0,5. Наилучшие результаты были достигнуты при значе ниях периода, смещения и порога 10, 10 и 2 для входа по цене открытия и 15, 9 и 1,5 для входа по лимитному и стоп-приказу.

В общем, результаты были хуже, чем для модели, основанной на пе ресечении. В обеих выборках данных для всех видов входов отмечены 220 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК значительные убытки, подобно картине, обнаруженной при исследова нии импульсных моделей сезонных явлений. Длинные позиции показали большую эффективность, чем короткие.

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

В пределах выборки некоторую прибыль удалось получить на рынках S&P 500, NYFE, немецкой марки и швейцарского франка. Вне пределов выборки S&P 500 и NYFE не принесли ни прибылей, ни убытков, в то вре мя как рынок немецкой марки был очень прибылен при входе по цене открытия, а швейцарского франка — при входе по лимитному приказу и по стоп-приказу. Как и в случае с моделью на основе пересечения, име лись и другие прибыльные сочетания рынков и приказов.

Тестирование модели на основе пересечения с подтверждением Эта модель идентична базовой модели на основе пересечения, но в ней вхо ды производятся после подтверждения сигнала стохастическим осцилля тором — Быстрым %К. Если лунный цикл давал сигнал к покупке, то при каз отдавался только в том случае, когда Быстрый %К был менее 25%. Это означает, что перед покупкой рынок должен был находиться в состоянии минимума или близком к нему. Подобным же образом сигнал на продажу принимался к исполнению только в тех случаях, когда Быстрый %К был выше 75%, т.е. рынок был близок к максимуму. Входы осуществлялись по цене открытия, по лимитному приказу и по стоп-приказу (тесты с 7 по 9 со ответственно).

Оптимизация состояла в прогонке периода скользящих средних avglen от 3 до 15с шагом 3, а смещения disp — от 0 до 15с шагом 1. Наилучшие результаты были достигнуты при значениях периода и смещения 15 и соответственно (вход по цене открытия и по лимитному приказу), а так же при значении периода 12 и смещения 5 для входа по стоп-приказу.

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

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

вне преде ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ лов выборки на этих рынках были только убытки или в лучшем случае неприбыльная торговля. При торговле на рынке канзасской пшеницы при входе по цене открытия и по лимитному приказу были получены устой чивые прибыли, а при использования стоп-приказа — убытки. При ис пользовании стоп-приказа прибыльными были рынки британского фун та, швейцарского франка, канадского доллара, евродоллара и свиной гру динки. Поскольку во всем портфеле количество сделок на большинстве рынков было очень маленьким, полученные результаты вряд ли заслу живают доверия.

Тестирование модели на основе пересечения с подтверждением и инверсией Эта модель подобна предыдущей модели с подтверждением. Их разница состоит в том, что в моменты возможного разворота рынка проводятся дополнительные сделки. Если пересечение скользящих средних генери ровало сигнал на покупку, но показатель Быстрого %К был более 75% (т.е.

рынок был близок к максимуму), отдавался приказ на продажу, а не на покупку. Подобным же образом, если пересечение давало сигнал к про даже, но рынок был близок к минимуму, генерировался приказ к покуп ке. Эти сигналы подавались в дополнение к стандартным сигналам, пода ваемым основанной на пересечении базовой моделью. Входы осуществ лялись по цене открытия (тест 10), по лимитному приказу (тест И) и по стоп-приказу (тест 12).

Оптимизация состояла в прогонке периода скользящих средних avglen от 3 до 15 с шагом 3, смещения disp от 0 до 15 с шагом 1. Наилучшие ре зультаты были достигнуты при значениях периода и смещения 15 и соответственно для входа по цене открытия, для входа по лимитному при казу — при периоде 15 и смещении 8, а для входа по стоп-приказу — при периоде 12 и смещении 15.

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

В пределах выборки рынок NYFE был прибыльным при всех входах, но рынок S&P 500 давал убытки для двух видов входов и нулевую прибыль для третьего. Рынок швейцарского франка также был прибыльным в пре делах выборки для всех трех входов;

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

222 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК ОБЗОР РЕЗУЛЬТАТОВ При сравнении всех моделей становится очевидно, что вход по стоп-при казу был наиболее эффективен и в пределах, и вне пределов выборки.

Наихудшие результаты были показаны при использовании входа по цене открытия (в пределах выборки) и входа по лимитному приказу (вне пре делов выборки). Вне пределов выборки лучше всего работала базовая модель на основе пересечения и хуже всего — модель с пересечением и подтверждением.

Отмечено много сильных взаимосвязей между выборкой, моделью и видом входа. Некоторые из результатов вызваны ограниченным количе ством сделок. Оптимальные сочетания моделей и приказов для сезонных систем, в общем, давали лучшие и более устойчивые результаты, чем лун ные модели.

ЗАКЛЮЧЕНИЕ В отношении целых портфелей модели, основанные на лунных ритмах, показывают менее убедительные результаты, чем сезонные модели. Низ кая эффективность лунных моделей противоречит нашим прошлым дан ным (Katz, McCormick, июнь 1997). Различия могут быть объяснены дву мя факторами: моделями входа и выхода. В данных тестах модели были оптимизированы на целом портфеле, что может быть неуместно в отно шении лунного ритма (использовавшаяся ранее модель входила на рынок через определенное число дней после полнолуния). Методы, использован ные в этой главе, были изменены по сравнению с более ранними подхода ми, поскольку пришлось проводить оптимизацию, используя одинаковые параметры для различных рынков. При использовании старой модели пришлось бы входить в рынок в фиксированный день после полнолуния или новолуния вне зависимости от рынка. Это было бы неправильно, так как, согласно нашему первому исследованию, лунные циклы по-разному влияют на различные рынки. Таким образом, пришлось придать модели самоадаптивность, т.е. способность выбирать время для входа на основе анализа предыдущих лунных циклов.

Другая возможная причина противоречивых результатов может со стоять во взаимодействии между видами входов и выходов. Лунные и, возможно, сезонные модели имеют свойство находить пригодные для тор говли максимумы и минимумы, но лишь в определенном проценте случа ев. Такие системы хорошо работают с близко расставленными защитны ми остановками, которые быстро останавливают убытки, если предска зание не оправдывается, но позволяют прибыли накапливаться, если ры нок движется в предсказанном направлении.

В общем, лунные модели работали плохо, но на некоторых рынках обнаруживались многообещающие и устойчивые результаты, тем более ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ впечатляющие, что модель не подвергалась специальной адаптации к от дельным рынкам. Это позволяет предположить, что при использовании специализированных выходов можно получить замечательные результа ты. Так, в нашем первом исследовании лунная модель хорошо работала на рынке серебра, но сейчас рынок серебра был малочувствителен к цик лам. При торговле портфелем лунные модели были убыточны, но на каж дой сделке они теряли гораздо меньше, чем, например, большинство ос цилляторных моделей и моделей на основе скользящих средних.

СОЛНЕЧНАЯ АКТИВНОСТЬ И ТОРГОВЛЯ Предыдущее исследование (Katz, McCormick, сентябрь 1997) было посвя щено влиянию солнечных пятен на рынки S&P 500 и пшеницы. В преде лах выборки простая модель на основе солнечной активности заработала $64 000 на рынке S&P 500 с 1984 г. по 1992 г. Было совершено 67 сделок, 31% из них были прибыльными. Средняя прибыльная сделка принесла $5304,76 — гораздо больше, чем было потеряно в средней убыточной сдел ке ( — $1030,43). Средняя прибыль в сделке составила $955,22. Это соот ветствует общей доходности 561% (не в годовом исчислении). Прибыль принесли и длинные, и короткие позиции, но прибыль, полученная в ко ротких позициях, была значительно больше. Это указывает на связь нео бычной солнечной активности с обвалами на рынке. Высокая эффектив ность коротких позиций особенно важна, поскольку рынок в рассматри ваемый период находился в состоянии повышательного тренда. Эффек тивность системы не снизилась и вне пределов выборки. С 1993 г. по 1996 г.

модель заработала 265%, проведя всего 23 сделки, причем прибыльными были 30% сделок. Средняя прибыль в сделке составила $891,30. Результа ты на рынке пшеницы также были хороши в обеих выборках данных — в пределах выборки 57% из 84 сделок были прибыльны, средняя прибыль в сделке составила $203,27, а общая прибыль — 859%. Вне пределов выбор ки было проведено 29 сделок, причем 55% из них принесли прибыль. Сред няя прибыль в сделке составила $260,78, а общая прибыль — 406%.

Наши первоначальные исследования говорят о том, что данная тема является весьма перспективной. В приведенных ниже тестах исследуется влияние солнечной активности на стандартный портфель. Для генерации входов использованы ежедневные данные о количестве солнечных пятен с 1985 г. по 1999 г., полученные в Бельгийской Королевской Обсерватории.

ВХОДЫ, ОСНОВАННЫЕ НА СОЛНЕЧНОЙ АКТИВНОСТИ Существует много способов получать сигналы входа на основе солнеч ной активности. Ниже описан метод пробоя, где в качестве исходных дан 224 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК ных использованы не цены, а количество солнечных пятен. Правила та ковы: если текущее количество солнечных пятен выше, чем текущий мак симальный порог, и количество пятен за несколько (1b2) прошлых дней было ниже соответствующих порогов, то подается сигнал на продажу или покупку в зависимости от предыдущей реакции рынка на пробой порога.

Если текущее количество пятен ниже текущего нижнего порога, а за не сколько (1b2) предыдущих дней оно было выше соответствующего поро га, то опять-таки подается сигнал на продажу или покупку в зависимости от предыдущей реакции рынка на пробой предела. Сигналы исполняют ся не мгновенно, а только спустя некоторое количество дней (disp). Поро ги определяются следующим образом: верхний порог для данного дня — это максимальное количество пятен за некоторое количество предшеству ющих дней (1b1), а низший порог — минимальное количество пятен за та кое же количество дней. «Предыдущее поведение рынка» означает поло жение рынка вблизи максимума или минимума ценового диапазона, ко торый наблюдался в течение некоторого времени после пробоя. Если дан ное направление солнечных пробоев исторически ассоциируется с ми нимумами рынка, то подается сигнал на покупку, в обратном случае — на продажу.

Как и лунные циклы, или сезонные явления, входы на основе солнеч ной активности основываются на предположении, что поведение рынка находится под влиянием неких внешних факторов и что независимая внешняя переменная имеет предсказательную ценность. Система, пост роенная на таком принципе, предсказывает поведение рынка, а не реаги рует на него. Как и в случае любого предсказания, его точность может быть различной. Сделки, заключенные на основе неверных предсказаний, могут быть разрушительными, даже если многие сделки, основанные на удачных предсказаниях, принесли прибыль. Данные системы прогностич ны по своей природе, и это их свойство позволяет вести торговлю против тренда, что обеспечивает лучшее выполнение приказов, меньшее про скальзывание и лучший контроль над риском, если использовать опти мальные защитные остановки (здесь это не использовано ввиду необхо димости придерживаться стандартных выходов).

Код для системы солнечных тестов подобен коду лунных тестов и здесь не приводится.

РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ СОЛНЕЧНЫХ МОДЕЛЕЙ Проводилось исследование эффективности модели, основанной на солнеч ных циклах с использованием входов по цене открытия (тест 1), по лимит ному приказу (тест 2) и по стоп-приказу (тест 3). Параметр 1b1 прогонялся от 25 до 40 с шагом 5, параметр 1b2 — от 10 до 15с шагом 5 и смещение (disp) — от 0 до 2 с шагом 1. При входе по цене открытия наилучшая эф ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ фективность была достигнута при 1b1 = 35, 1b2 = 15 и смещении 2. При входе по лимитному приказу наилучшая эффективность была достигнута при 1b1 = 40,1b2 = 15 и смещении 0. При входе по стоп-приказу наилучшая эффективность была достигнута при 1b1 = 35,1b2 = 15 и смещении 2.

В табл. 9-4 изображена эффективность системы на различных рын ках в пределах и вне пределов выборки. В столбцах и строках данные рас положены таким же образом, как и в табл. 9-2 и 9-3.

Солнечная модель работала примерно так же, как и лунная. В преде лах выборки лучше всего работал вход по стоп-приказу;

наихудшим был вход по цене открытия (— $1631 со сделки), несколько лучше был вход по лимитному приказу ( — $1519), особенно в случае ограничения только длин ными позициями. Лучшим был вход по стоп-приказу, приносивший убы ток всего в $52 со сделки;

если бы не транзакционные расходы, этот вход в пределах выборки был бы прибыльным.

Модель включала параметр смещения. Наилучшим значением смеще ния для входа по лимитному приказу был 0, что резонно для входа, требу ющего быстрого реагирования на «солнечный» сигнал, чтобы войти до того, как рынок развернется. При использовании входа по стоп-сигналу оптимальным было смещение 2: чтобы сработал стоп-сигнал, запускаю щий вход, необходимо некоторое движение рынка. Когда смещение от клонялось всего на один-два дня от оптимума, средние убытки в сделке возрастали с $52 до $2000. Это указывает на связь между временем ры ночных событий и солнечной активности — в противном случае столь небольшие изменения смещения не приводили бы к таким значительным изменениям эффективности торговой системы.

При использовании входа по стоп-приказу в пределах выборки был до стигнут высокий процент выгодных сделок, и длинные позиции принесли прибыль. Вне пределов выборки вход по стоп-приказу опять-таки был наи лучшим, но средняя сделка приносила значительный убыток — $1329.

График изменения капитала был построен только для входа по стоп приказу, поскольку другие входы работали слишком плохо для рассмот рения. Капитал очень быстро возрастал до июня 1988 г., затем практичес ки не менялся до октября 1990 г., после чего резко падал до июня 1994 г., а затем колебался с тенденцией к понижению.

Интересно, что подтвердились некоторые наши предыдущие данные (Katz, McCormick, сентябрь 1997). При использовании входа по стоп-при казу (наилучшего при торговле целым портфелем) рынок S&P 500 был очень прибыльным и в пределах, и вне пределов выборки. Средняя сдел ка приносила прибыль $4991 в пределах выборки, с годовой прибылью 20,4%;

t-критерий показывает, что вероятность подлинности этого эффекта и потенциальной устойчивости прибыли превышает 80%. Прибыльными были и короткие, и длинные позиции. В пределах выборки было проведе но 37 сделок (40% прибыльных). Вне пределов выборки и длинные, и ко роткие позиции были прибыльны;

удивительно, что прибыльными были ГЛАВА 9 ЛУННЫЕ и СОЛНЕЧНЫЕ РИТМЫ короткие позиции, так как в течение большей части этого периода време ни рынок находился в состоянии повышательного тренда. Вне пределов выборки годовая прибыль составляла 39,5% (вероятность подлинности данного результата равна 80%);

было проведено 11 сделок (45% прибыль ных) со средней прибылью $5640. Подобные результаты нельзя не счи тать выдающимися.

Подтвердилось наблюдение, что после солнечных вспышек могут происходить резкие снижения цен. При использовании входа по стоп приказу прибыль в пределах и вне пределов выборки также была полу чена на рынках миннесотской пшеницы, соевых бобов и хлопка. На рын ке миннесотской пшеницы в пределах выборки годовая прибыль соста вила 13,5%, опять-таки с вероятностью подлинности результатов, пре вышающей 80%. Вне пределов выборки данные показатели составили 30,5 и 85% соответственно. Интересно, что рынки мазута и сырой нефти в пределах выборки были высокоприбыльны, но вне пределов выборки принесли умеренные убытки. Несколько других рынков были выгодны ми, но без устойчивых связей между рынком, частью выборки и исполь зовавшимся входом.

ЗАКЛЮЧЕНИЕ Подобно сезонным явлениям и фазам луны, солнечная активность, ви димо, оказывает реальное влияние на ряд рынков, особенно на S&P и миннесотскую пшеницу. Как и в случае с лунными циклами, это влия ние недостаточно сильно или постоянно, чтобы служить основным эле ментом в системе портфельной торговли, но как компонент системы, включающей другие факторы, солнечная активность заслуживает вни мания. Мы подозреваем, что солнечные явления не влияют на рынок на прямую, но запускают события, которые ждут своего часа или же син хронизируют уже существующие циклы рыночной активности, имею щие близкую периодичность. Например, если цены на рынке сильно за вышены и нестабильны, как это было с S&P 500 в октябре 1987 г., для запуска неизбежного обвала вполне достаточно могло быть и солнеч ной вспышки.

ЧТО МЫ УЗНАЛИ?

Лунные и солнечные явления могут иметь реальное влияние на фьючерсные рынки. В случае с солнечными явлениями та кое влияние на рынок S&P 500 подтверждено. В отношении лунных явлений влияние явно ощутимо, хотя и не столь по стоянно.

228 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК Астрономические явления, вероятно, стоит включать в состав сложных торговых систем, например использовать как одни из входов в нейронной сети.

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

Как другие противотрендовые модели, астрономические мо дели нуждаются в стратегии выходов с близко расположен ными защитными остановками. Если остановка расположена верно, то в благоприятной ситуации она не срабатывает, по зволяя позиции накапливать прибыль, а когда прогноз оказы вается неверным, остановка быстро закрывает сделку, сни жая убытки. Использование близких защитных остановок также может объяснить более высокую эффективность тор говли в нашем первом исследовании (Katz, McCormick, июнь, сентябрь 1997).

• Учитывая высокую вероятность влияния солнечных и лунных циклов на ряд рынков, стоит обратить внимание на некоторые планетарные ритмы, в том числе на конфигурации и явления, рассматривающиеся сейчас только астрологией.

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

ГЛАВА Входы на основе циклов Цикл— это ритмическое колебание, имеющее определимую частоту (0,1 цикла в день, например) или же, по-другому, периодичность (10 дней на цикл, например). В предыдущих двух главах рассматривались цикли ческие по природе явления. Эти процессы имели внешнюю по отноше нию к рынку природу и известную, если не фиксированную периодич ность. Сезонные явления, например, вызваны сменой времен года, и, сле довательно, привязаны к внешней действующей силе. Таким образом, все сезонные явления цикличны, но не все цикличные явления сезонны.

В этой главе будут рассматриваться циклы, существующие исключи тельно в ценовых данных и не обязательно имеющие какие-либо внешние причины. Некоторые из таких циклов могут объясняться еще неизвест ными влияниями, другие могут происходить из резонансных колебаний рынков. Какова бы ни была причина, при рассмотрении практически любого графика можно обнаружить циклические явления. В старину трей деры использовали для поиска регулярных максимумов и минимумов ин струмент в форме гребня, который прикладывали к графику. Сейчас при меняются компьютерные программы, позволяющие легко наблюдать и анализировать циклы. В отношении механического обнаружения и ана лиза циклов наиболее используемой техникой является спектральный анализ на основе метода максимальной энтропии (MESA).

ОБНАРУЖЕНИЕ ЦИКЛОВ С ИСПОЛЬЗОВАНИЕМ MESA В настоящее время предлагается не меньше трех крупных программных пакетов для трейдеров с возможностью применения метода максималь ной энтропии для анализа рыночных циклов. Это Cycle Trader от Bresset, MESA от Ehlers (800-633-6372) и TradeCycles (Scientific Consultant Services, 516-696-3333 и Ruggiero Associates, 800-211-9785). Такой анализ использу ется многими специалистами, например Ружжиеро (Ruggiero, октябрь 1996) сообщает, что адаптивные системы на основе пробоя работают луч ше при использовании метода максимальной энтропии (MEM) при ана лизе циклов, чем без него.

230 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК Максимальная энтропия — изящный и эффективный метод опреде ления циклической активности в ряду данных. Особая сила этого метода лежит в его способности определять выраженные спектральные черты в ограниченном объеме данных, что полезно при анализе рыночных цик лов. Метод хорошо изучен, и его приложения доведены до высокой сте пени совершенства в отношении адекватной подготовки и обработки дан ных, требуемой при использовании подобных алгоритмов.

Однако существует ряд проблем, связанных с методом максимальной энтропии, как, впрочем, и с другими математическими методами опреде ления циклов. Например, метод MEM капризен;

он может быть чувстви телен к небольшим колебаниям данных или к таким параметрам, как пе риод обзора. Кроме того, для применения метода максимальной энтро пии требуется не только компенсировать влияние трендов или дифферен цировать ценовые данные, но и пропускать их через фильтр низких час тот для сглаживания. На необработанных, зашумленных данных алгоритм работает плохо. После пропускания данных через фильтр возникает ряд проблем, в частности запаздывание и фазовые сдвиги по сравнению с исходными данными. Следовательно, экстраполяция обнаруженных цик лов может быть неверной в отношении времени и фазы, если не исполь зовать дополнительные методы анализа.

ОБНАРУЖЕНИЕ ЦИКЛОВ ПРИ ПОМОЩИ ГРУПП ФИЛЬТРОВ Мы потратили много времени на поиск другого метода обнаружения и извлечения полезной информации о циклах. Помимо избежания проблем, связанных с методом максимальной энтропии, мы также хотели исполь зовать принципиально новый метод: при работе на рынке новые методы порой имеют преимущество просто потому, что отличаются от методов других трейдеров. Одним из таких подходов является использование групп специально разработанных полосовых фильтров. Этот метод известен из электроники, где группы фильтров часто применяются для спектрально го анализа. Использование группы фильтров позволяет подбирать шири ну пропускания и другие характеристики фильтра, а также накладывать друг на друга различные фильтры в составе группы. Этот метод позволя ет получить быстрый и адаптивный ответ на рыночную ситуацию.

В проведенном нами исследовании рыночных циклов при помощи групп фильтров (Katz, McCormick, май 1997) с 3 января 1990 г. по 1 ноября 1996 г. разработанная нами модель (на принципе покупки на минимумах и продажи на максимумах) вела торговлю на рынке S&P 500 и принесла $114 950 прибыли. Было проведено 204 сделки, из них 50% прибыльных.

Общая прибыль составила 651%. И длинные, и короткие позиции имели примерно равную доходность и процент выгодных сделок. Различные па раметры модели подверглись оптимизации, но почти все значения пара ГЛАВА 10 Входы НА ОСНОВЕ циклов метров вели к прибыльным результатам. Использованные на рынке S&P500 параметры были без изменений применены для торговли на рын ке казначейских облигаций и принесли 254% прибыли. Учитывая относи тельную простоту использованных фильтров, эти результаты весьма об надеживают.

В этом исследовании ставилась цель разработать систему фильтров с нулевым запаздыванием. Фильтры были аналогичны резонаторам или настроенным цепям, которые позволяют проходить сигналам определен ной частоты, при этом останавливая сигналы с другими частотами. Чтобы понять идею использования фильтров, представьте себе поток ценовых данных рынка как аналог колебаний напряжения, возникающих в радио антенне. Этот поток содержит шум, а также модулированные сигналы от радиостанций. Когда приемник настраивают на диапазон, меняют часто ту резонанса или центральную частоту полосы пропускания фильтра. На многих частотах слышен только шум. Это означает, что в отсутствие сиг нала в приемной системе не возникает резонанса. На других частотах встречается слабый сигнал, а когда находят частоту, соответствующую ре зонансной, то передача становится четко слышна;

это связано с тем, что резонансная частота или центральная частота фильтра соответствует ча стоте сигналов, передаваемых мощной радиостанцией. Что будет слыш но в любой из точек диапазона, зависит от наличия резонанса. Если резо нанса между улавливаемыми антенной волнами и внутренней частотой колебаний радиоприемника нет, слышен только случайный шум. Если приемник настроен на данную частоту и поступает сильный сигнал, то происходит согласованное возбуждение электрических цепей. Таким об разом, приемник является резонансным фильтром, который вращением ручки настройки настраивается на различные частоты. Когда приемник получает сигнал с частотой, более или менее соответствующей частоте пропускания, он издает звук (после демодуляции сигнала). В рыночных данных трейдеры также пытаются искать сильные сигналы— сигналы выраженного рыночного цикла.

Рассматривая далее идею резонанса, давайте представим камертон с резонансной частотой 440 Гц (т.е. 440 циклов в секунду). Этот камертон стоит в одном помещении с генератором аудиосигналов, подключенным к громкоговорителю. Будем постепенно повышать частоту сигнала гене ратора, приближаясь к частоте резонанса камертона. Чем ближе частота сигнала, тем больше энергии камертон захватывает из колебаний, выз ванных громкоговорителем. Рано или поздно он начнет испускать соб ственный тон, резонируя с выходом генератора. Когда достигается точ ная частота колебаний камертона — 440 Гц, он звучит точно в унисон с громкоговорителем — корреляция абсолютна. Когда частота звука начи нает отдаляться от резонансной в ту или иную сторону, камертон все еще вибрирует, но уже не так синхронно, и возникает фазовый сдвиг. При удалении частоты сигнала от резонансной камертон отвечает все слабее 232 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК и слабее. Если подобных камертонов (резонаторов или фильтров) много и каждый настроен на свою частоту, то таким образом можно улавливать много резонансных частот или (в применении к рынку) циклов. Данный фильтр будет очень сильно резонировать на частоте «своего» цикла, а дру гие, не настроенные на эту частоту, будут молчать.

Циклы на рынке можно толковать таким же образом — как звуковые сигналы с изменяющейся частотой. Обнаружение рыночных циклов мож но попытаться осуществить при помощи такого набора фильтров, полосы пропускания которых перекрываются, но достаточно разнесены, чтобы обнаружить частоту циклической активности, доминирующую на рынке в любой момент. Некоторые из этих фильтров будут резонировать под действием текущей циклической активности. В фильтрах, настроенных на другие частоты/периоды активности рынка, резонанса не возникнет.

Когда на вход фильтра приходит сигнал, соответствующий его частоте, происходит резонанс, подобный резонансу камертона. При этом сигнал на выходе фильтра не имеет фазового сдвига и запаздывания по отноше нию к входному сигналу. Кроме того, сигнал на выходе будет близок к идеальной форме синусоиды и удобен для принятия торговых решений.

Использованная в наших прошлых исследованиях группа фильтров была основана на полосовых фильтрах Баттеруорта, код для которых весьма сложен, но, тем не менее, приведен целиком на языке Easy Language для TradeStation.

ФИЛЬТРЫ БАТТЕРУОРТА Фильтры Баттеруорта достаточно просты для понимания. Фильтр Бат теруорта для низких частот подобен скользящему среднему;

он сгла живает высокочастотный сигнал (или шум) и пропускает низкочастотные колебания (т.е. колебания с длинным периодом). Если у экспоненциаль ного скользящего среднего отсечка составляет 6 дБ на октаву (т.е. выход с частотой выше отсечки снижается вдвое при двойном снижении периода сигнала), то у четырехполюсного фильтра Баттеруорта (использованного в нашей работе от мая 1997 г.) снижение составляет 18 дБ на октаву (вы ход с частотой выше отсечки снижается в 8 раз при уменьшении периода сигнала вдвое). Такое резкое снижение ненужного высокочастотного сиг нала имеет свою цену: при этом возрастает запаздывание и возникают искажающие фазовые сдвиги.

Фильтр Баттеруорта для высоких частот подобен осциллятору, ос нованному на разности скользящих средних (например, X— МА(Х), где X — входящий сигнал, а МА(Х) — его скользящее среднее). Оба процесса обеспечивают ослабление низкочастотных сигналов (например, трендов), пропуская высокочастотный сигнал без изменений. Фильтр Баттеруорта обеспечивает более сильное сглаживание, чем осциллятор скользящего ГЛАВА 10 Входы НА ОСНОВЕ циклов среднего (18 дБ против б дБ на октаву). И осциллятор, и высокочастотный фильтр вызывают сдвиг вперед, а не запаздывание, но при этом возника ют искажающие высокочастотные шумы и фазовые сдвиги.

Если соединить высокочастотный и низкочастотный фильтры, подав выход первого на вход второго, получится полосовой фильтр, блокирую щий частоты выше и ниже желаемой. Сигнал с частотой (или периодом), соответствующим центру полосы пропускания, будет пропущен без ис кажений (с минимальным сглаживанием) и без запаздывания. Фазовые сдвиги высокочастотного компонента (смещение вперед) и низкочастот ного (запаздывание) компенсируют друг друга, как и в случае с вибриру ющим камертоном или с осциллятором MACD, который на самом деле является примитивным полосовым фильтром на основе скользящих сред них. Сглаживание, обеспечиваемое осциллятором MACD, как и в случае со скользящими средними, невелико по сравнению со сглаживанием фильтров Баттеруорта. Поскольку фильтр пропускает только небольшую часть спектра, выходной сигнал очень сглажен и близок к синусоиде. Бо лее того, поскольку запаздывание и смещение вперед компенсируют друг друга, сигнал не запаздывает. Можно ли назвать такой фильтр идеальным осциллятором? Можно, но с одним условием: использовать только фильтр с центральной частотой, соответствующей частоте рыночных цикличес ких процессов.

Выход должным образом настроенного фильтра должен быть син хронным с циклической активностью рынка в текущий момент. Такой вы ход будет очень сильно сглаженным;

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

Проблема с полосовыми фильтрами Баттеруорта состоит в том, что при смещении частоты сигнала от центральной частоты фильтра возни кают огромные фазовые сдвиги, которые могут полностью разрушить ге нерируемые таким фильтром торговые сигналы.

ВОЛНОВЫЕ ФИЛЬТРЫ Фильтры Баттеруорта нельзя назвать единственными оптимальными фильтрами для анализа рыночных циклов. Недостатки фильтров Батте руорта включают довольно низкую скорость принятия решений, не все гда достаточную для реальной торговли, а также проблемы с измерением мгновенной амплитуды данного цикла. Как было указано ранее, фильтры Баттеруорта могут вносить сильные фазовые искажения. Альтернативой им могут быть волновые фильтры.

234 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК Теория групп фильтров недавно стала гораздо сложнее с появлением теории малых волн. На практическом уровне эта теория позволяет конст руировать весьма изящные цифровые фильтры с большим числом полез ных свойств. Использованные в нижеприведенных тестах фильтры осно ваны с рядом допущений на волнах Мореле. В принципе волны Мореле ведут себя подобно локализованным преобразованиям Фурье. Они зах ватывают информацию о циклической активности в данный момент вре мени, причем влияние других точек данных на результат очень быстро убывает при удалении этих точек от текущей. В отличие от фильтров Бат теруорта волны Мореле имеют максимальную временную локализацию для данного уровня избирательности (степени сглаживания). Это очень важно для фильтров, настроенных на поиск потенциально выгодных цик лов на основе максимально свежих данных. Кроме того, использованные в тестах фильтры имеют преимущество очень высокой фазовой устойчи вости, что принципиально важно при работе с циклами различной длины для определения моментов рыночных событий. Такие высокоуровневые фильтры могут быть использованы в составе групп, согласно методике, подобной описанной в нашей работе от мая 1997 г.

Волновые фильтры, использованные в тестах, подобны квадратичным зеркальным фильтрам, которые имеют два выхода. Один выход по фазе в точности соответствует любому рыночному сигналу, имеющему частоту, равную центральной частоте полосы пропускания. Второй выход сдви нут по фазе ровно на 90°, т.е. его пики и провалы соответствуют нулевым значениям первого выхода, и наоборот. В математическом смысле эти выходы ортогональны. Используя их для вычисления мгновенной ампли туды циклической активности (на частоте настройки фильтра), достаточ но взять сумму квадратов двух выходов, а затем извлечь из нее квадрат ный корень. Для определения силы циклического процесса не требуется искать максимумы и минимумы в фильтрованном сигнале и измерять их амплитуды. Кроме того, нет необходимости использовать экзотические методы, вроде расчета корреляции между фильтрованным сигналом и ценами в пределах примерно одного цикла, как мы делали в 1997 г. Если один из фильтров в составе группы обнаружит сильный цикл, то пара выходов этого фильтра может подавать сигнал торговой системе в любой желаемой фазе этого цикла.

На рис. 10-1 изображен отклик фильтра на циклический процесс с постоянной амплитудой и возрастающим периодом. Центральная часто та фильтра соответствует периоду 12. Вторая линия сверху изображает выходной сигнал фильтра с совпадающей фазой. Очевидно, что когда пе риод входящего сигнала приближается к центру полосы пропускания, амплитуда выходного сигнала фильтра возрастает, достигая в центре по лосы максимального значения. Когда период сигнала начинает превышать значение полосы пропускания, амплитуда на выходе падает. Вблизи цен трального значения полосы пропускания выходной сигнал практически 236 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК полностью совпадает с входящим. Третья линия (выход с фазой, смещен ной на 90°) показывает такую же последовательность изменения ампли туды, за исключением фазового сдвига. Вблизи центрального значения полосы пропускания выходной сигнал смещен точно на 90°. Последняя, четвертая линия, изображает мгновенную мощность по данным двух пре дыдущих. Эта линия показывает амплитуду циклической активности на частоте, соответствующей середине полосы пропускания. На графике мак симум наблюдается при периоде 13, а не в центре полосы пропускания фильтра (12), причиной этому — небольшое искажение, возникающее из за быстрого изменения периода исходного сигнала. Поскольку фильтр использует данные нескольких циклов, возникает искаженный общий результат. Тем не менее, очевидно, что на основе такого фильтра можно организовать выгодную торговлю. Масштаб оси Y не имеет значения и выбран просто для представления сигналов на разных линиях в пределах одного графика.

На рис. 10-2 изображена частота (или же период) и фазовый ответ филь тра. В этом случае середина полосы пропускания фильтра установлена на периоде 20. Кривая относительной мощности изображает мощность выход ного сигнала при изменяющейся частоте входного сигнала, амплитуда ко торого постоянна. Фильтр пропускает сигнал максимально при частоте, соответствующей середине полосы пропускания, а при удалении от нее в обе стороны выходная мощность быстро и плавно снижается. В кривой нет вторичных пиков, и мощность выходного сигнала при значительной раз нице частот падает до нуля. Фильтр никак не реагирует на появление трен дов, что весьма полезно для трейдеров. Такой фильтр способен работать с данными, не очищенными от трендов и не подвергнутыми дополнительной переработке. Фазовый ответ фильтра также демонстрирует полезные ха рактеристики. На большей части спектра ответ находится в пределах ± 90°.

На центральной частоте фазового сдвига нет, т.е. выходной сигнал в точно сти синхронизован с входным, что может обеспечить идеальные входы в рынок. Как и в случае с мощностью, кривая фазового ответа плавная и глад кая — любой ученый или инженер высоко оценил бы эффективность та кого фильтра. При построении подобного графика для фильтров Баттеру орта в 1997 г. результаты были гораздо менее удовлетворительными, осо бенно в отношении фазового ответа и задержки. При незначительном из менении периода сигнала возникали большие сдвиги по фазе, что в реаль ном применении разрушило бы любые попытки использовать такой фильтр для осмысленных входов в рынок.

На рис. 10-3 изображен импульсный ответ обоих выходов волнового фильтра — совпадающего по фазе с входным сигналом и ортогонального.

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

ГЛАВА 10 Входы НА ОСНОВЕ циклов В дополнение к данным, представленным на графиках, были проведе ны другие тесты с использованием «плазмод». Плазмодой называют набор данных, подобранных так, чтобы содержать предполагаемые в реальных данных характеристики. Идея состоит в проверке того, насколько алго ритм или модель может обнаружить и проанализировать эти характерис тики. Хорошая торговая система на основе циклов должна проявлять вы сокую эффективность на синтетической серии данных, состоящей из боль шого количества шума и изредка встроенных циклов. Фильтры, описан ные в следующих тестах, работали в такой ситуации очень хорошо.

ПОЛУЧЕНИЕ ЦИКЛИЧЕСКИХ ТОРГОВЫХ СИГНАЛОВ ВХОДА С ИСПОЛЬЗОВАНИЕМ ГРУПП ФИЛЬТРОВ Одним из способов получения сигналов входа является использование серии фильтров, настроенных на различные частоты или периоды, кото рые целиком перекрывают весь диапазон анализируемых частот. Если в одном из этих фильтров возникает сильный резонанс при отсутствии ак тивности в других, можно предположить наличие на рынке сильного цик ла. На основе поведения выходов фильтров определяются ожидаемые моменты возникновения ценовых минимумов (сигнал к покупке) и мак симумов (сигнал к продаже). Поскольку наиболее сильно реагирующий фильтр не должен вызывать запаздывания и фазовых сдвигов, при его должной работе и реально существующих циклах на рынке можно полу чать чрезвычайно своевременные сигналы. Один из традиционных спо собов использования циклов на рынке — это попытка продавать по цик лическим максимумам и покупать по циклическим минимумам. Получае мая от групп фильтров или других источников информация может также дополнять другие системы или адаптировать индикаторы к текущему со стоянию рынка. Пример того, как метод обнаружения периода домини рующего цикла и соотношения сигнал/шум включается в другую торго вую систему, можно найти у Ружжиеро (Ruggiero, 1997).

ХАРАКТЕРИСТИКИ ЦИКЛИЧЕСКИХ ВХОДОВ Исследуемые ниже циклические входы (нацеленные на продажу по мак симуму и покупку по минимуму) имеют ряд важных характеристик: вы сокий процент прибыльных сделок, низкое проскальзывание, способность захватывать максимально возможную часть каждого движения рынка — одним словом, мечта трейдера. Это справедливо только при условии, что на рынке действительно существуют предсказуемые циклы, которые мож но обнаружить и, что еще важнее, экстраполировать имеющимися мето дами. Считается, что на рынках примерно 70% времени присутствует цик 240 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК лическая активность. Даже если четкие циклы, ведущие к выгодным сдел кам, возникают гораздо реже, использование близких защитных остано вок позволяет сводить к минимуму потери от неудачных сделок. Главный недостаток циклических входов состоит в том, что ввиду широкого рас пространения весьма мощных алгоритмов анализа циклов, например ме тода максимальной энтропии, рынки изменили свою природу и стали «ме нее уязвимыми» для подобных методов. Предсказуемые циклы обнару живаются и нивелируются настолько быстро, что их исследования зачас тую теряют смысл. Поскольку описываемые циклические входы по при роде своей направлены против циклов, то при отсутствии продолжения циклов (т.е. при продолжении тренда) трейдер понесет потери, если не будут применены эффективные методы управления капиталом (защит ные остановки). Пригодность к реальной работе сложных методик анали за циклов и будет рассмотрена в наших тестах.

МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ Во всех тестах циклических моделей входа используется стандартный портфель из 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 - ссылка на класс торгового стимулятора ГЛАВА 10 Входы НА ОСНОВЕ циклов // 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 // инициализируем группу равноотстоящих волновых фильтров // заново инициализируем, если параметр ширины полосы изменился if(width != oldwidth) { lper ==30.0;

// фильтр длинных периодов sper = 3.О ;

// фильтр коротких периодов fcount =20;

// число фильтров в группе ratio = exp (log (lper / sper) / (fcount - 1) ) ;

per = sper;

for(k = 1;

k <= fcount;

k++) ( filter[k-1].build_kernel(per, width);

per *= ratio;

} oldwidth = width;

} // рассчитываем выходы фильтров и откорректированный спектр мощности // если матрицы (таблицы) пустые, то присваиваем им значения if(inphase == NULL) inphase = matrix(l,fcount,1,MAXBAR);

if(inquad == NULL) inquad = matrix(1,fcount,l.MAXBAR);

if(power == NULL) power = matrix(1,fcount,1.MAXBAR);

for(k =1;

k <= fcount;

k++) { filter[k-1].apply (cls, inphase[k], inquad[k], nb);

for(cb = 1;

cb <= nb;

cb++) power [k] [cb] = (inphase [k] [cb] * inphase [k] [cb] + inquad [k] [cb] * inquad [k] [cb] ) / filter[k-1].period();

242 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК } // сохраняем спектральный анализ выборки в файл // эта процедура проводится для отладки // #define WRITESAMPLE #ifdef WRITESAMPLE FILE *fil = fopen("test.dat", "wt");

for(cb = nb-1200;

cb < nb;

cb++) { domperndx = 0 ;

peakpower = -1.0;

for(k = 1;

k <= fcount;

k++) ( if(power[k][cb] > peakpower) { peakpower = power[k] [cb] ;

domperndx = k;

} ) phase = (180.0 / PI) * atan2 (inquad [domperndx] [cb], inphase[domperndx] [cb]);

for(k = 1;

k <= fcount;

k++) ( if (power [k] [cb] > 0.90 * peakpower) fprintf(fil, " **");

else if (power[k][cb] > 0.75 * peakpower) fprintf(fil, " ++");

else if (power[k][cb] > 0.5 * peakpower) fprintf(fil, " + ");

else fprintf(fil, " ");

) fprintf(fil, "%4d %7d %7d %7d %8.1f\n", (int)filter[domperndx-1].period(), (int)(inphase[domperndx] [cb]), (int)(inquad[domperndx] [cb]), (int)phase, cls [cb]);

} fclose(fil);

exit(0);

#endif // используется для отладки сигналов // #define SIGNALDEBUG #ifdef SIGNALDEBUG FILE *fil = fopen("testsig.dat", "wt");

#endif // выполняем вычисления для всех данных AvgTrueRangeS(exitatr,hi,lo,cls,50,nb) ;

// средний истинный диапазон для // выхода switch (modeltype) [ case 1:

// Ничего не делайте! Место для будущего кода, break ;

default: nrerror ("Invalid model type");

) // проходим через дни, чтобы смоделировать реальную торговлю for(cb = 1;

cb <= nb;

cb++) { // не открываем позиций до начала периода выборки //... то же самое, что установка MaxBarsBack в TradeStation if(dt[cb] < IS_DATE) 1 egcls[cb] = 0.0;

continue;

) ГЛАВА 10 Входы НА ОСНОВЕ циклов // выполняем ожидающие приказы и сохраняем значение капитала rc = ts.update (opn [cb], hi [cb], lo [cb], cls [cb], cb) ;

if(rc != 0) nrerror{"Trade buffer overflow");

eqcls[cb] = ts.currentequity(EQ_CLOSETOTAL);

//не торгуем в последние 30 дней выборки // оставляем место в массивах для будущих данных if(cb > nb-30) continue;

// считаем количество контрактов для позиции //... мы хотим торговать эквивалентом долларовой волатильности //... 2 новых контрактов на S&P-500 от 12/31/ ncontracts = RoundToInteger(5673. О / dlrv[cb] ) ;

if (ncontracts < 1) ncontracts = 1;

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

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

switch (modeltype) { case 1:

// ищем хороший цикл для торговли domperndx = 0;

peakpower = -1.0;

for(k = 1;

k <= fcount;

k++) { if(power[k][cb] > peakpower) { peakpower = power[k][cb];

domperndx = k;

} } goodcycle = FALSE;

if(domperndx > 3 && domperndx < fcount-1) { peaknoise = 0.0;

for(k = 1;

k <= fcount;

k++) { if (abs(k - domperndx) > 2) { if (power[k] [cb] > peaknoise) peaknoise - power[k] [cb] ;

} } if(peakpower > 1.5 * peaknoise) goodcycle = TRUE;

} // генерируем торговые сигналы if (goodcycle) { domperiod = filter [domperndx-1].period() ;

phase = (180.0 / PI) * atan2(inquad[domperndx] [cb], inphase[domperndx] [cb]);

oldphase = (180.0 / PI) * atan2(inquad[domperndx] [cb-1], inphase[domperndx] [cb-1] );

phaseb - (phase<0.0) ? (360.0+phase) : phase;

oldphaseb = (oldphase<0.0) ? (360.0+oldphase) : oldphase;

sellphase = 0.0 - (disp + 180.0 / domperiod);

buyphase = 180.0 + sellphase;

if (phaseb > buyphase && oldphaseb <- buyphase) signal = 1;

// сигнал на покупку if (phase > sellphase && oldphase <= sellphase) signal = -1;

// сигнал на продажу } break;

244 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК } limprice = 0.5 * (hi [cb] + lo [cb] ) ;

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

// печатаем отладочную информацию #ifdef SIGNALDEBUG fprintf(fil, "%8d %8.1f %8d %8d %8d %8d\n", cb, cls[cb], signal, (int)filter[domperndx-1].period(), (int)peakpower, {int)peaknoise);

#endif // входим в сделку, используя определенный тип приказа if(ts.position() <= 0 && signal == 1) ( switch(ordertype) { // выбираем нужный вид приказа 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);

} // обрабатываем следующий день // закрываем, если в режиме отладки #ifdef SIGNALDEBUG fclose(fil);

exit(0);

#endif } Вышеприведенный код описывает тестируемую модель. Первый важ ный блок кода, принципиальный для циклической модели, инициализи рует индивидуальные фильтры, составляющие группу фильтров. Этот код работает только при первом проходе или при изменении параметра, вли яющего на инициализацию группы фильтров, например параметра width.

Если важные параметры остаются без изменений, не имеет смысла пере запускать фильтры при каждом вызове функции Model.

Следующий блок применяет к входящему сигналу каждый из фильт ров в составе группы. В этом блоке отведены два массива для хранения выходного сигнала группы фильтров. Первый массив хранит выход с со впадающей фазой inphase, а второй — ортогональный выход inquad. Вход ной сигнал представляет исходные цены закрытия. Поскольку фильтры математически оптимальны и рассчитаны на удаление трендов, предва ГЛАВА 10 Входы НА ОСНОВЕ циклов рительная обработка данных становится излишней в отличие от менее продвинутых методик анализа. Каждая строка в массиве представляет собой выход отдельного фильтра с данной частотой или периодом, каж дая колонка представляет собой торговый день. Центральные частоты или периоды фильтров расположены на равных расстояниях на логарифми ческой шкале, т.е. соотношение между центральной частотой данного и следующего фильтра постоянно. Селективность полосы пропускания (width) — единственный настраиваемый параметр в расчете группы филь тров, и это значение может подбираться путем оптимизации.

Затем запускается обычный цикл перебора точек данных, и генери руются собственно торговые сигналы. Сначала проверяется наличие чи стого, пригодного для торговли цикла. Для этого определяется мощность при периоде, имеющем максимальный резонанс с текущей активностью рынка (peakpower). Также оценивается период, на котором наблюдается максимальная мощность. Если период не попадает на одно из крайних зна чений рассматриваемого диапазона (диапазон составляет от 3 до 30 дней), то потенциально цикл может быть пригоден для торговли. Затем проверя ется максимальная мощность на расстоянии не менее 2 полос пропуска ния фильтра от периода пика (peaknoise). Если отношение peakpower/ peaknoise составляет 1,5 или более, то выполняется второе условие при годности цикла. На основе пары выходов определяется фазовый угол цик ла. Затем код проверяет фазовый угол на соответствие максимуму или минимуму цены. Кроме того, в эту оценку вводится небольшое значение смещения (disp). Оно работает подобно смещению в предыдущих моде лях, хотя здесь относится к фазовому углу, а не к количеству точек дан ных. Между фазовым углом и количеством точек данных существует пря мая зависимость: период цикла, умноженный на фазовый угол в градусах и разделенный затем на 360, дает количество точек данных, соответству ющее фазовому углу. Если фаза после смещения такова, что через неко торое количество градусов до или после текущего дня можно ожидать минимума, отдается приказ на покупку. Если фаза такова, что можно ожи дать максимума, отдается приказ на продажу. Затем, как обычно, рассчи тываются цены для лимитного и стоп-приказов. При поступлении сигна лов система исполняет требуемые приказы.

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

РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ Тестировалась только одна модель с входами по цене открытия (тест 1), по лимитному приказу (тест 2) и стоп-приказу (тест 3). Правила были про стыми: покупать на предсказанных минимумах и продавать на предска 246 ЧАСТЬ II ИССЛЕДОВАНИЕ входов в РЫНОК занных максимумах. Выходы производились при поступлении сигнала к открытию противоположной позиции или при срабатывании стандарт ного выхода. Эта простая торговая система сначала испытывалась на ис кусственных ценовых данных, созданных путем добавления шума к иде альной синусоиде с периодом от 4 до 20 дней. На этих данных были полу чены сигналы покупки и продажи, идеально совпадающие с максимума ми и минимумами. Такое совпадение показывает, что при наличии реаль ных циклов система способна обнаруживать их с высокой точностью и использовать в торговле.

В табл. 10-1 приведены лучшие показатели, полученные для данных, находящихся в пределах выборки, а также эффективность портфеля на данных в пределах и вне пределов выборки. В таблице: ВЫБ. — вид вы борки данных (В — в пределах, ВНЕ — вне пределов выборки);

ДОХ% — доходность в процентах годовых;

Р/ПРИБ — соотношение риска/прибы ли в годовом исчислении;

ВЕР — ассоциированная вероятность статисти ческой достоверности;

СДЕЛ — число сделок на всех рынках в составе портфеля;

ПРИБ% — процент прибыльных сделок;

$СДЕЛ — средняя при быль/убыток со сделки;

ДНИ — средняя длительность сделки в днях;

ПРИБДЛ — общая прибыль от длинных позиций в тысячах долларов;

ПРИБКР — общая прибыль от коротких позиций в тысячах долларов. Оп тимизировались два параметра. Первый (Р1) определяет ширину полосы пропускания для каждого фильтра в составе группы. Второй (Р2) отобра жает фазовое смещение в градусах. Во всех случаях параметры прогоня лись в пределах выборки для ширины полосы пропускания от 0,05 до 0,2 с шагом 0,05 и для фазового сдвига от —20 до +20° с шагом 10°. Показаны только оптимальные решения.

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.