Общие понятия Выбор брокера Анализ рынка Торговые стратегии Книги по Forex
Общие понятия
Биржа Форекс
Игра на бирже
Валютный трейдинг
Управление валютным портфелем
Как стать трейдером
Выбор брокера
Брокерское обслуживание
Как выбрать брокера Форекс
Лучшие дилинговые центры
Анализ рынка
Технический анализ
Японские свечи
Индикатор Ишимоку
Волны Вульфа
Полосы Боллинджера
Скользящие средние
Линия тренда
Фундаментальный анализ
Механические торговые системы
Оценка эффективности механических торговых систем
Торговые сигналы
Лучшие
дилинговые центры:
Дилинговый центр EXNESS
Дилинговый центр Forex4you
Дилинговый центр Alpari

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

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

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] максимальных цен
// lo - набор [1..nb] минимальных цен
// cls — набор [1..nb] цен закрытия
// vol - набор [1..nb] значений объема
// oi - набор [1..nb] значений открытого интереса
// dlrv — набор [1..nb] средних долларовой волатильности
// nb - количество дней в наборе данных
// ts — ссылка на класс торгового симулятора
// eqcls — набор [1..nb] уровней капитала по ценам закрытия
// объявляем локальные переменные
static int rc, cb, ncontracts, maxhold, signal, ranseed;
static float mmstp, 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] , rule1);
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+1]) continue;
// генерируем "стандартные" случайные сигналы входа
signal = 0;
rnum = ran2 (&iseed);
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+1];
entrybar = cb + 1;
}
else if(ts.position() >= 0 && signal == -1) {
ts.sellopen('2', ncontracts);
entryposted = -1;
entryprice = opn[cb+1] ;
entrybar = cb + 1;
}
// выходим из сделок, используя модифицированный стандартный выход вместе с нейросетевым выходом
exitsignal = rule1[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');
}
}
} // обрабатываем следующий день
}

Вышеприведенный код демонстрирует логику как входов, так и выходов. Параметр modeltype управляет выбором длинных или коротких позиций для тестирования. Параметры ptlim и mmstp задают соответственно целевую прибыль и защитную остановку; они фиксированы на тех же уровнях, что и в предыдущем тесте нейронной сети. Каждое из трех правил рассчитывается как серия значений ИСТИНА/ЛОЖЬ, и если все три принимают значение ИСТИНА, то подается сигнал на выход 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 дней для быстрого компонента и ЭСС с периодом 10 дней для медленного компонента. Таким образом, система выходит в тех случаях, когда после сглаживания рынок все еще производит впечатление падающего, но последняя цена закрытия пробивает вверх два скользящих средних, что может быть признаком начала нового повышающегося тренда.

Результаты выходов по описанным правилам для длинных и коротких позиций

В табл. 15-5 приведены результаты торговли с помощью 10 лучших решений (длинные и короткие позиции), использующих МССВ и генетически разработанные сигналы выхода. Входы в рынок были случайными. В таблице отдельно показаны результаты длинных и коротких позиций. Данные также разбиты по номеру теста и по виду выборки. Символы В и ВНЕ означают результаты тестов на данных в пределах выборки и вне пределов выборки соответственно. СТАНД означает тест с использованием только МССВ, ГЕН — тест МССВ в сочетании с генетически разработанными правилами.


В длинных позициях в пределах выборки добавление правил значительно снизило средний убыток в сделке — с $688 до $324. Процент прибыльных сделок повысился с 41 до 43%. Годовое соотношение риска/прибыли улучшилось с -0,35 до -0,17. Вне пределов выборки эффект генетически разработанных сигналов выхода сохранился, хотя и в меньшей степени. Средний убыток в сделке снизился с $1135 до $990. Процент прибыльных сделок повысился с 39 до 41 %. Соотношение риска/прибыли улучшилось с -0,61 до -0,60. В общем, добавление генетически разработанных правил к стандартной стратегии выходов себя оправдало. В отличие от нейронных сигналов выхода эффект сохранился вне пределов выборки, т. е. подгонка под исторические данные и избыточная оптимизация не имели решающего значения.

В коротких позициях как в пределах, так и вне пределов выборки отмечен подобный положительный эффект. В пределах выборки добавление генетически разработанного сигнала выхода снизило средний убыток в сделке с $2084 до $1645. Процент прибыльных сделок не изменился. Как ни странно, годовое соотношение риска/прибыли ухудшилось с -1,09 до -1,15. Вне пределов выборки средний убыток в сделке значительно уменьшился: с $1890 до $1058. Процент прибыльных сделок вырос с 38 до 40%, а годовое соотношение риска/прибыли улучшилось с -1,02 до -0,73. Как и ранее, добавление генетически найденного правила выхода к системе МССВ доказало свою эффективность и вне пределов выборки.

Эффективность длинных позиций на различных рынках

В табл. 15-6 приведена информация о работе системы МССВ совместно с генетически разработанными правилами выхода из длинных позиций на различных рынках. Как в пределах, так и вне пределов выборки были выгодны несколько рынков: NYFE, сырой нефти, неэтилированного бензина и живых свиней. Другие рынки были прибыльными в пределах выборки и убыточными вне пределов выборки, или наоборот. Взаимосвязь между результатами торговли в пределах и вне пределов выборки была низкой.


Эффективность коротких позиций на различных рынках

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


Далее

Вернуться к оглавлению

Торговые стратегии
Скальпинг
Стратегия "Середина"
Позиционная среднесрочная
Система ATCF
Стратегия по Moving Average, ADX и Фракталам
Стратегия разворотного периода
Стратегия "теней"
Стратегия "Серфинг"
Стратегия Trend Finder Daily
Стратегия на внутреннем баре
Скальпинг M1 GBPJPY
Стратегия "4 средних"
Торговая стратегия The Bat
Книги по Forex
А.Фарлей "Мастерство свинг-трейдинга"
B. Сафонов "Практическое использование волн Эллиотта в трейдинге"
Кац Дж.О., МакКормик Д.Л. "Энциклопедия торговых стратегий"
Лучшие
дилинговые центры:
Дилинговый центр EXNESS
Дилинговый центр Forex4you
Дилинговый центр Alpari
Торговые стратегии