<<
>>

МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ НЕЙРОННОГО КОМПОНЕНТА СТРАТЕГИИ ВЫХОДОВ

Мы используем наибольшую из двух лучших нейронных сетей, обученных прогнозированию обращенного во времени Медленного %К. Предварительная обработка и логика принятия решений идентичны использованным в гл.
11. Используется сеть 18-14-4-1 (18 нейронов в первом слое, 14 в первом промежуточном, 4 во втором промежуточном и 1 на выходе). Параллельно используется МССВ. В дополнение к условиям выходов МССВ вводится условие: если прогнозируемое значение обращенного во времени Медленного %К выше некоего порога, т.е. положение рынка относительно ценового диапазона ближайшего будущего высоко, то система выходит из длинной позиции. Подобным же образом, если прогноз показывает, что рыночная цена находится вблизи нижней границы диапазона цен ближайшего будущего, то система выходит из любой корот

ГЛАВА 15 СОЧЕТАНИЕ выходов с ИСКУССТВЕННЫМ ИНТЕЛЛЕКТОМ

363

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

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 - набор [l..nb] дат в формате ГГММДД // ОРП - набор [1..nb] цен открытия // hi - набор [1..nb] максимальных цен // 1о - набор [l..nb] минимальных цен // cls - набор [1..nb] цен закрытия // vol - набор [l..nb] значений объема // oi - набор [1..nb] значений открытого интереса // dlrv - набор [l..nb] средних долларовой волатильности // nb - количество дней в наборе данных // ts ссылка на класс торгового симулятора // eqcls - набор [1..nb] уровней капитала по ценам закрытия // объявляем локальные переменные

static int rc, cb, neontracts, maxhold, signal, ranseed; static float mmstp, ptlim, limprice, stpprice, entryprice; static int entryposted, entrybar;

static float exitatr[MAXBAR+1] , prd[KAXBAR+1] , rnum, thresh; static long iseed;

// копируем параметры в локальные переменные для удобного обращения thresh = parms[1]; // порог выходных значений нейронной сети

ranseed = parms[2]; // используется для инициализации случайной

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

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

// диапазона

mmstp = 1.5; // защитная остановка в единицах среднего истинного

// диапазона

// выполняем вычисления по всему объему данных

AvgTrueRangeS(exitatr,rii,lo,cls,5 0,nb); // средний истинный

// диапазон для выхода NeuralForecast(prd, cls, nb) ; // прогнозы

// запускаем генератор случайных чисел

// ...

используем различные случайные последовательности для каждого рынка // ... 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] = О.Э; continue; ]

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

364

ЧАСТЬ III ИССЛЕДОВАНИЕ выходов

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

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

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

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

/ / генерируем "стандартные" случайные сигналы входа

signal = 0;

rnum = ran2(siseed);

if (rnum < 0.025) signal = -1; // случайный короткий вход

else if (rnum > 0.975) signal = 1; // случайный длинный вход

// входим в сделки по цене открытия entryposted = 0;

if(ts.position() <= 0 && signal == 1) ts.buyopen('l', ncontracts); entryposted = -1; entryprice = opn[cb+l]; entrybar = cb + 1;

}

else

if (ts.position) ) >= 0 && signal ts.sellopen('2', ncontracts); entryposted = -1; entryprice = opn[cb+l]; entrybar = cb + 1;

-1)

// выходим из сделок, используя модифицированный стандартный выход // вместе с нейросетевым выходом if(entryposted > 0) (

// инициализация и выходы для длинных позиций в день входа

limprice = entryprice + ptlim * exitatr[cb];

stpprice = entryprice - iranstp * exitatr[cb] ;

ts.exitlonglimiM'A1 , limprice) ;

ts.exitlongstop('B', stpprice);

if(prd[cb] > thresh) 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(prd[cb] < 100.0-thresh) ts.exitshortclose('F') ;

}

else [

// выходы после дня входа

if(ts.position() > 0} { // длинные позиции ts.exitlonglimit('G' , limprice); ts.exitlongstop('H', stpprice); if(cb-entrybar >= maxhold ||

prd[cb] > thresh) ts.exitlongclose('I');

}

else if (ts.position() < 0) { // короткие позиции ts.exitshortlimit('J' , limprice); ts.exitshortstop('K' , stpprice); if (cb-entrybar >= maxhold ||

prd [cb] < 100.0-thresh) ts.exitshortclose('L') ;

}

ГЛАВА 15 СОЧЕТАНИЕ выходов с ИСКУССТВЕННЫМ ИНТЕЛЛЕКТОМ

365

}

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

)

Вышеприведенный фрагмент кода описывает логику стратегии выходов.

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

<< | >>
Источник: Джеффри Оуэн Кац, Донна Л. МакКормик . Энциклопедия торговых стратегий / Пер, с англ. — М.: Альпина Паблишер. — 400 с. . 2002

Еще по теме МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ НЕЙРОННОГО КОМПОНЕНТА СТРАТЕГИИ ВЫХОДОВ:

  1. МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ ГЕНЕТИЧЕСКОГО КОМПОНЕНТА ВЫХОДОВ
  2. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ НЕЙРОННОГО ВЫХОДА
  3. ТЕСТИРОВАНИЕ СТРАТЕГИЙ ВЫХОДА
  4. СТАНДАРТНЫЕ ВХОДЫ ДЛЯ ТЕСТИРОВАНИЯ ВЫХОДОВ
  5. МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ
  6. МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ
  7. МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ
  8. 10.4. Методология тестирования торговых систем для рынка FOREX
  9. МЕТОДОЛОГИЯ ТЕСТИРОВАНИЯ ЛУННЫХ МОДЕЛЕЙ
  10. ВИДЫ ВЫХОДОВ, ИСПОЛЬЗУЕМЫХ В СТРАТЕГИИ ВЫХОДА
  11. 5.5. Окно «Тестирование Стратегий»
  12. ВАЖНОСТЬ СТРАТЕГИИ ВЫХОДА
  13. ЦЕЛИ ХОРОШЕЙ СТРАТЕГИИ ВЫХОДА
  14. ЧТО ТАКОЕ СТАНДАРТНАЯ СТРАТЕГИЯ ВЫХОДА?
  15. ГЛАВА 13 Стандартная стратегия выхода
  16. СТРАТЕГИЯ БЫСТРОГО ВЫХОДА
  17. 2. СТРАТЕГИИ ВЫХОДА ПРЕДПРИЯТИЯ НА ВНЕШНИЙ РЫНОК
  18. Стратегии выхода на зарубежные рынки