<< Пред. стр.

стр. 44
(общее количество: 46)

ОГЛАВЛЕНИЕ

След. стр. >>



Вышеприведенный фрагмент кода описывает логику стратегии выхо-
дов. Параметры ptlim и mmstp имеют значения 4,5 и 1,5 соответственно,
поскольку эти значения давали лучшую эффективность при торговле порт-
фелем (см. табл. 14-1 в гл. 14). Параметр thresh, т.е. значение порога для
выходов на основе нейронного прогноза, подвергается оптимизации. Ло-
гика дополнительного выхода видна в блоке «if», где сравниваются порог
и прогноз, выданный сетью. Если условие выполняется, то по цене закры-
тия дня отдается приказ на выход из сделки. Параметр thresh прогоняется
от 50 до 80 с шагом 2.


РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ НЕЙРОННОГО ВЫХОДА

Результаты базовой системы
В табл. 15-1 приведены результаты работы МССВ. Порог был установлен
достаточно высоко, чтобы сеть не генерировала никаких выходов. Эта
таблица идентична табл. 14-1 при оптимальных значениях фиксирован-
ной защитной остановки и целевой прибыли. В таблице: ВЫБ — часть об-
разца данных (В — в пределах, ВНЕ — вне пределов выборки); ПРИБДЛ —
общая прибыль длинных сделок, в тысячах долларов; ПРИБКР — общая
прибыль коротких сделок, в тысячах долларов; Ф.ПРИБ — фактор при-
были; ДОХ % — прибыль в процентах годовых; Р/ПРИБ — годовое соот-
ношение риска/прибыли; ВЕР — ассоциированная вероятность статисти-
ческой достоверности; СДЕЛ — число сделок на всех рынках в составе
портфеля; ПРИБ% — процент прибыльных сделок; $СДЕЛ — средняя при-
быль/убыток со сделки; ДНИ — средняя длительность сделки в днях.
Между эффективностью системы в пределах и вне пределов выборки
существует очевидная взаимосвязь. Средняя сделка принесла убыток
$1581 в пределах и $1580 вне пределов выборки; процент прибыльных
сделок на обеих выборках составил 39%. Соотношения риск/прибыль со-
ставили —1,46 в пределах и —1,45 вне пределов выборки.


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



В пределах выборки было получено улучшение общих результатов за
счет применения дополнительного нейронного выхода. Средняя прибыль
в сделке достаточно медленно изменялась при изменениях значения по-
рога. Наилучшее значение порога составило 54, средняя сделка при этом
приносила убыток в $832. Процент прибыльных сделок составил 41%, го-
довое соотношение риска/прибыли —0,87. Таким образом, внедрение
нейронного выхода значительно повысило эффективность торговли по
сравнению с результатами, приведенными в табл. 15-1. Вне пределов вы-
борки, впрочем, улучшения не наблюдалось: эффективность не особо от-
личалась от работы базовой МССВ. Когда исследовалась работа нейрон-
ных сетей для генерации входов, эффективность при переходе на данные
вне пределов выборки падала весьма резко — видимо, нечто подобное
произошло и в этом тесте, где в качестве элемента стратегии выходов ис-
пользовалась та же нейронная сеть.


Результаты тестирования нейронных выходов
на различных рынках
В табл. 15-3 приводятся результаты торговли с использованием оптималь-
ной МССВ и дополнительного нейронного сигнала выхода на различных
рынках. Было использовано оптимальное значение порога (54) согласно
табл. 15-2.
Значительная прибыль как в пределах, так и вне пределов выборки
была получена только на рынке живых свиней. Ряд рынков (например,
немецкая марка и иена) показали значительную прибыль в пределах вы-
борки, но были убыточны вне ее пределов. В длинных позициях рынки
NYFE и неэтилированного бензина были прибыльны как в пределах, так
и вне пределов выборки — это можно объяснить и статистическим арте-
фактом, поскольку в пределах выборки в длинных позициях многие рын-
ки приносили прибыль.


Эффективность базовой МССВ, предназначенной для
Таблица 15—1.
использования в сочетании с нейронной сетью, прогнозирую-
щей сигналы выхода
СДЕЛ ПРИБ% $СДЕЛ
дох% ВЕР ДНИ
Р/ПРИБ
ВЫБ ПРИБДЛ Ф.ПРИБ
ПРИБКР
39 -1581
1.0000 3826
-1976 0.83 -10.3 -1.46 8
-4073
В
-21.6 -1.45 1649 39 -1580
-974 0.84 8
0.9985
-1632
ВНЕ
СОЧЕТАНИЕ выходов с ИСКУССТВЕННЫМ ИНТЕЛЛЕКТОМ
ГЛАВА 15 367



Эффективность торговли портфелем при сочетании МССВ
Таблица 15—2.
и нейронного сигнала выхода для различных значений пара-
метра порога




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

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 = x21mod01.c
// parms - набор [1..MAXPRM] параметров
// dt - набор [1..nb] дат в формате ГГММДД
// орn - набор [ 1..nb] цен открытия
// hi - набор [1..nb] максимальных цен
ЧАСТЬ III ИССЛЕДОВАНИЕ выходов
368



// lo - набор [l..nb] минимальных цен
cls
// — набор [l..nb] цен закрытия
// vol - набор [l..nb] значений объема
// oi - набор [l..nb] значений открытого интереса
// dlrv — набор [l..nb] средних долларовой волатильности
// nb - количество дней в наборе данных
// ts — ссылка на класс торгового симулятора
// eqcls — набор [l..nb] уровней капитала по ценам закрытия

// объявляем локальные переменные
static int rc, cb, ncontracts, maxhold, signal, ranseed;
static float iranstp, ptlim, limprice, stpprice, entryprice;
static int entryposted, entrybar, exitsignal, modeltype;
static int rulel[MAXBAR+1], rule2[MAXBAR+1], rule3[MAXBAR+1];
static float exitatr[MAXBAR+1], rnum, thresh;
static long iseed;

// копируем параметры в локальные переменные для удобного обращения
ranseed = parms[14]; // используется для инициализации случайной
// последовательности
modeltype = parms[15]; // 1=длинные позиции, 2=короткие позиции
maxhold = 10; // период максимального удержания позиции
ptlim =4.5; // целевая прибыль в единицах среднего истинного диапазона
mmstp = 1.5; // защитная остановка в единицах среднего истинного диапазона

// выполняем вычисления по всему объему данных, включая правила
AvgTrueRangeS{exitatr,hi,lo,cls,50,nb); // средний истинный диапазон для
/ / выхода
Rules{opn, hi, lo, cls, vol, oi, exitatr, nb,
parms [1] , parms[2], parms[3], parms [4] , rulel);
Rules (opn, hi, lo, cls, vol, oi, exitatr, nb,
parms[5], parms[6], parms[7], parms[8], rule2);
Rules (opn, hi, lo, cls, vol, oi, exitatr, nb,
parms[9], parms[10], parms[11], parms[12], rule3);

// запускаем генератор случайных чисел
// ... используем различные случайные последовательности для каждого рынка
// ... ts.model() возвращает индекс рынка (SP=1, YX=2, ...)
iseed = -(ranseed + 10 * ts.model());
rnum = ran2(&iseed);

// проходим через дни, чтобы смоделировать реальную торговлю
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.currenteguity(EQ_CLOSETOTAL);

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

// избегаем устанавливать приказы на дни с ограниченной торговлей
if(hi[cb+l] == lo[cb+l]) continue;
369
СОЧЕТАНИЕ выходов с ИСКУССТВЕННЫМ ИНТЕЛЛЕКТОМ
ГЛАВА 15




// генерируем "стандартные" случайные сигналы входа
signal = 0;
rnum = ran2 (Stiseed) ;
if (rnum < 0.025 &&
modeltype == 2) signal = -1; // случайный короткий вход
else if (rnum > 0.975 &&
modeltype == 1) signal = 1; // случайный длинный вход

// входим в сделки по цене открытия
entryposted = 0;
if(ts.position() <= 0 && signal == 1) (
ts.buyopen('1', ncontracts);
entryposted = 1;
entryprice = opn[cb+l];
entrybar = cb + 1;
}
else if(ts.position() >= 0 && signal == -1) {
ts.sellopen('2', ncontracts);
entryposted = -1;
entryprice = opn[cb+l] ;
entrybar = cb + 1;
}

// выходим из сделок, используя модифицированный стандартный выход
// вместе с нейросетевым выходом
exitsignal = rulel[cb] && rule2[cb] && rule3[cb];
if(entryposted > 0} {
// инициализация и выходы для длинных позиций в день входа
limprice = entryprice + ptlim * exitatr[cb];
stpprice = entryprice - mmstp * exitatr[cb];
ts.exitlonglimit{'A' , limprice);
ts.exitlongstop('B', stpprice);
if(exitsignal) ts.exitlongclose('C') ;
}
else if{entryposted < 0) {
// инициализация и выходы для коротких позиций в день входа
limprice = entryprice - ptlim * exitatr[cb];
stpprice = entryprice + mmstp * exitatr[cb) ,•
ts.exitshortlimit('D', limprice);
ts.exitshortstop('E' , stpprice);
if(exitsignal) ts.exitshortclose('F') ;
}
else (
// выходы после дня входа
if(ts.position()> 0) [ // длинные позиции
ts.exitlonglimit('G' , limprice) ;
ts.exitlongstop('H', stpprice);
if(cb-entrybar >= maxhold)||
exitsignal) ts.exitlongclose('I') ;
}
else if(ts.position() < 0) [ // короткие позиции
ts.exitshortlimit('J' , limprice);
ts.exitshortstop('K' , stpprice);
if(cb-entrybar >= maxhold ||
exitsignal) ts.exitshortclose('L');
}
)
} // обрабатываем следующий день
}
ИССЛЕДОВАНИЕ выходов
ЧАСТЬ III
370




Эффективность торговли МССВ в сочетании с нейронным
Таблица 15—3.
сигналом выхода в пределах и вне пределов выборки на
различных рынках




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




вил рассчитывается как серия значений ИСТИНА/ЛОЖЬ, и если все три
принимают значение ИСТИНА, то подается сигнал на выход exitsig. В текст
программы добавлен оператор if, который подает сигнал на выход по цене
закрытия, если (if) все три правила дают значение ИСТИНА (exitsig =
ИСТИНА). Эволюция правил для длинных и коротких позиций проводи-
лась аналогично эволюции правил для входов, описанной в гл. 12. Исполь-
зовались 12 хромосом с тремя генами-правилами каждая. Для получения
правил выхода из длинных и коротких позиций проводится эволюция 2500
поколений с использованием OptEvolve. Затем для тестирования в преде-
лах и вне пределов выборки отбирались по 10 лучших длинных и корот-
ких решений.


10 лучших решений
с базовой стратегией выхода

В табл. 15-4 приведены 10 лучших значений для длинных и коротких по-
зиций. Обозначения в таблице: НОМЕР— номер решения, ВЕР— веро-
ятность статистической достоверности (в этих числах пропущена, но пред-
полагается десятичная точка), $СДЕЛ — средняя прибыль/убыток со сдел-
ки, СДЕЛ — общее количество проведенных сделок, Ф.ПРИБ — фактор
прибыли, ДОХ% — доходность в процентах годовых.
Лучшее из решений для длинных позиций было обнаружено в 845 по-
колении эволюционного процесса, а для коротких — в 1253 поколении. В
отличие от теста моделей входа ни одно из генетически полученных ре-
шений не обеспечило прибыли, но, согласно табл. 15-5, сочетание генети-
ческих сигналов с базовой стратегией выходов привело к явному улучше-
нию результатов.
Правила, соответствующие хромосомам из табл. 15-4, звучат следую-
щим образом.
Правила для выхода из длинной позиции: если цена закрытия текуще-
го дня выше экспоненциального скользящего среднего (ЭСС) цен закры-
тия с периодом 12 дней, но ниже ЭСС с периодом 49 дней и текущий день
представляет собой новый шестидневный максимум, то из длинной пози-
ции следует выходить. Правила, таким образом, ищут ситуацию, где на
фоне долгосрочного падающего тренда наблюдается кратковременный
рост цен, достигший своего максимума и готовый завершиться, после чего
должно возобновиться падение — весьма подходящий момент для выхо-
да из длинной позиции.
Правила для короткой позиции гласят, что выходить следует в случае,
когда цена закрытия текущего дня выше 16-дневного ЭСС и 22-дневного
простого скользящего среднего цен закрытия, а индикатор конвергенции/
дивергенции скользящих средних (MACD) падает. Данный MACD исполь-
зует ЭСС с периодом 6 дней для быстрого компонента и ЭСС с периодом
372 ИССЛЕДОВАНИЕ выходов
ЧАСТЬ III




Лучшие 10 решений для длинных и коротких позиций,
Таблица 15—4.
полученные в процессе эволюции

Решения для длинных позиций
ВЕР
НОМЕР $СДЕЛ СДЕЛ Ф.ПРИБ ДОХ%
-324
706728
845 0.96
1972 -4.9
-350
712448
1752 1947 0.96 •4.4
1804 -354 0.96
737793 1994 -5.0
728199
1464 -379 1944 0.96 -5.0
729060
1755 -382 0.96
1934 -5.1
-384
761321
1591 1999 0.96 -4.5
733418
1584 -394 0.96
1925 -4.8
637 -397
750316 0.96
1974 -5.2
-399
739410
1810 1944 0.96 -5.0
742540
1850 -399 0.96
1938 -5.3

Решения для коротких позиций
Ф.ПРИБ ДОХ%
СДЕЛ
ВЕР
НОМЕР $СДЕЛ
999842
1253 -1645 1959 0.78 -10.2
-1646
999695
1758 1943 0.80 -10.1
1183 -1717
998990 1885 0.81 -10.1
999639
1379 -1755 1920 0.79 -9.9
-1756
999211
1129 1885 0.81 -10.1
-1757
999161
472 -10.2
1885 0.81
999161
1833 -1757 1885 0.81 -10.2
-1764
999834
1816 1932 0.79 -10.3
-1764
998851
1881 1869 0.82 -9.9
1427 -1767

<< Пред. стр.

стр. 44
(общее количество: 46)

ОГЛАВЛЕНИЕ

След. стр. >>