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

Тесты исходной ССВ

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

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

Для проверки исходной ССВ используется метод случайного входа (описанный во введении к части III). В качестве выходов используются обычные стандартные выходы (только по цене закрытия). ССВ содержит следующие правила: Если на закрытии рынок находится ниже цены входа на величину, равную произведению некоторого множителя (параметр защитной остановки) на размер среднего истинного диапазона последних 50 дней, тогда срабатывает защитная остановка. Если цена закрытия больше цены входа на величину, равную произведению некоторого множителя (параметр целевой прибыли) на размер среднего истинного диапазона, тогда срабатывает лимитный приказ, фиксирующий целевую прибыль. Эти правила сформулированы для длинных позиций с выходом по цене закрытия. Для коротких позиций пороги размещаются наоборот, т. е. защитная остановка помещается выше цены входа, а лимитный приказ — ниже. Если после 10 дней не достигнута ни защитная остановка, ни целевая прибыль, то сделку останавливают рыночным приказом по цене закрытия. Приведенный ниже код выполняет данные правила выхода и случайные входы. Тестируются три типа входных приказов (по цене открытия, по лимитному и стоп-приказу). Используется стандартный портфель и стандартная тестовая программная платформа.

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 = x19mod01.c
// parms — набор [1..MAXPRM] параметров
// dt - набор [1..nb] дат в формате ГГММДД
// орn — набор [1. .nbl цен открытия
// hi — набор [1..nb] максимальных цен
// lо - набор [1. .nb] минимальных цен
// cls - набор [1..nb] цен закрытия
// vol — набор [1..nb] значений объема
// oi - набор [l..nb] значений открытого интереса
// dlrv — набор [1..nb] значений среднего долларовой волатильности
// nb — количество дней в наборе данных
// ts — ссылка на класс торгового симулятора
// eqcls — набор [1..nb] уровней капитала по ценам закрытия
//объявляем локальные переменные
static int rc, cb, neontracts, maxhold, ordertype, signal;
static float mmstp, ptlim, stpprice, limprice, tmp;
static float exitatr[MAXBAR+1], rnum;
static int ranseed;
static long iseed;
// копируем параметры в локальные переменные для более удобного обращения
ranseed = parms[8]; // инициируем генератор случайных чисел
ordertype = parms[9]; // вход: 1=по цене открытия, 2=по лимитному приказу, 3=по стоп - приказу
maxhold = 10; // максимальный период удержания позиции
ptlim = 4; // целевая прибыль в единицах волатильности
mmstp = 1; // защитная остановка в единицах волатильности
// делаем вычисления по всем данным
AvgTrueRangeS{exitatr,hi,lo,cls,50,nb); // средний истинный диапазон для выхода
// запускаем генератор случайных чисел
// ... отдельный запуск для каждого инструмента
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.currentequity(EQ_CLOSETOTAL);
// подсчитываем количество контрактов для сделки
// ... мы хотим торговать эквивалентом долларовой волатильности
// ... 2 новых контрактов на S&P-500 от 12/31/98
ncontracts = RoundToInteger(5673.0 / dlrv[cb]};
if(ncontracts < 1) ncontracts = 1;
// избегаем установки приказов на день с ограниченной торговлей
if(hi[cb+1] == lo [cb+1]) continue;
// генерировать входные сигналы, цены стоп- и лимитных приказов
signal = 0;
rnum = ran2(&iseed); // случайное число 0...1
if(rnum < 0.025) signal = -1; // случайный короткий вход
else if(rnum > 0.975) signal = 1; // случайный длинный вход
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, ncont}racts); 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) ;
} // обрабатывать следующий день
}

Код подобен представленному в предыдущих главах. Изменился лишь порядок генерации сигналов для входа. Входные сигналы теперь создаются с помощью генератора псевдослучайных чисел (ГПСЧ). Перед входом в цикл, который проходит через дни для моделирования процесса торговли, ГПСЧ инициализируется с уникальным начальным значением. Начальное значение инициализации определено номером рынка и параметром (ranseed). При изменении данного параметра генерируется абсолютно другая последовательность случайных входов. Точные значения инициализации не важны, так как для каждой инициализации создается уникальный ряд из-за чрезвычайно большого периода ГПСЧ. Используемый ГПСЧ описан как ran2 в вышеупомянутой работе «Numerical Recipes in С» (1992). Период для ГПСЧ больше, чем 2Х1018. Этот ГПСЧ намного лучше стандартных генераторов, включенных в языки программирования. Внутри цикла, там, где фактически имеет место торговля, сигналы генерируются, основываясь на случайных числах. Шаги очень просты. На каждом дне от ГПСЧ получается равномерно распределенное случайное число между 0 и 1. Если случайное число меньше 0,025, то генерируется сигнал для входа в короткую позицию. Вероятность получения короткого сигнала в любой день равна 0,025, т. е. короткий сигнал должен генерироваться в среднем каждые 40 дней. Если случайное число превышает 0,975, то подается сигнал для открытия длинной позиции; частота этих сигналов такая же — один сигнал каждые 40 дней. Другими словами, в среднем торговые сигналы генерируются каждые 20 дней. Цены лимитного приказа и стоп-приказа рассчитываются обычным способом. Обычным способом размещаются приказы и определяются выходы.

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

Результаты тестов

В табл. 13-1, 13-2 и 13-3 представлены результаты торговли портфелем при использовании стратегии случайных входов и стандартного выхода. В колонке СЛУЧ приведены числа, которые передаются на вход генератора случайных чисел и инициируют случайные последовательности. ПРИБ — совокупная чистая прибыль в тысячах долларов. ПРИБДЛ — общая прибыль от длинных позиций в тысячах долларов; ПРИБКР — общая прибыль от коротких позиций в тысячах долларов, Ф.ПРИБ — фактор прибыли. ДОХ% — доходность, в процентах годовых; Р/ПРИБ — соотношение риска/прибыли в годовом исчислении; ВЕР — ассоциированная вероятность статистической достоверности, МПАД — максимальное падение капитала, в тысячах долларов; СДЕЛ — число сделок; ПРИБ% — процент прибыльных сделок; $СДЕЛ — средняя прибыль/убыток со сделки; ДНИ — среднее количество дней в сделке, округленное до ближайшего целого числа; ВНЕ — результат случайной последовательности, обеспечивший лучшую эффективность внутри выборки, которая затем была продолжена и протестирована на данных вне пределов выборки; СРЕД — среднее значение результатов, приведенных в строках 1 — 10; СТОТКЛ — стандартное отклонение результатов, приведенных в строках 1 — 10.




Тест 1. ССВ со случайными входами по цене открытия. Эта система работала не очень хорошо внутри выборки. Средняя сделка для всех 10 случайных последовательностей принесла убыток в размере $2243, причем стандартное отклонение составило $304. Данная система показала такую же среднюю прибыль в сделке, как и наименее привлекательные системы, тестировавшиеся при изучении входов. Фактически, некоторые из них показали результаты гораздо худшие, чем случайные. Процент прибыльных сделок был очень стабилен — со средним значением 36,91% и стандартным отклонением 0,7%. Общее количество сделок для каждого рынка за более чем 10-летний период внутри выборки составило 3703; именно такое количество сделок должно было получиться при случайных входах на данных в пределах выборки.

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

Тест 2. ССВ со случайными входами по лимитному приказу. Табл. 13-2 идентична табл. 13-1 за исключением того, что она отражает поведение портфеля со стандартной стратегией выходов и входами по лимитному приказу. В пределах выборки средняя сделка приносила убыток в $1930, что несколько ниже, чем в предыдущем тесте, видимо, ввиду уменьшения транзакционных расходов при входе по лимитному приказу. Стандартное отклонение составило $477, что несколько выше предыдущего значения. Процент прибыльных сделок (38,73%) улучшился менее чем на 2% благодаря более выгодным ценам входа при использовании лимитного приказа. Как и ожидалось, помимо подобных мелких изменений, ничего в табл. 13-2 не представляет особенного интереса.

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

Тест 3. ССВ со случайными входами по стоп-приказу. В табл. 13-3 приведены результаты торговли портфелем финансовых инструментов при использовании случайных входов, основанных на срабатывании стоп-приказа. По показателю средней прибыли в сделке эффективность в пределах выборки была лучше, чем в двух предыдущих тестах; средний убыток составил $2039, а стандартное отклонение — $391. Процент прибыльных сделок был ниже (36,36% при стандартном отклонении 1,12%). Более низкий процент прибыльных сделок, видимо, отражает неоптимальные цены входа в рынок, полученные при входе по стоп-приказу.

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

Приведенные в табл. 13-1 — 13-3 результаты могут служить основой для проведения сравнительной оценки методов выхода, описанных в части II этой книги. Для этой цели наиболее показательны параметры $СДЕЛ и ПРИБ%, поскольку они не зависят от количества проведенных системой сделок.

Эффективность системы со случайными входами по цене открытия и ССВ на различных рынках. В табл. 13-4 приведены показатели работы системы со случайными входами по цене открытия и ССВ. Использовались случайные последовательности, обеспечивающие максимальную доходность в пределах выборки (по показателю годового соотношения риска/прибыли) согласно тесту I. В первом столбце (РЫН) указан рынок, прочие столбцы содержат данные о различных аспектах работы системы в пределах и вне выборки.


В пределах выборки прибыльными были только рынки британского фунта, иены, откормленного скота, живых свиней и леса. Высокая прибыль (25,9% в год) была получена только на рынке немецкой марки. Вне пределов выборки прибыльными были рынки NYFE, иены, сырой нефти, золота, палладия, живых свиней, соевых бобов, соевой муки, кофе и апельсинового сока. Только рынки иены и живых свиней были прибыльны как в пределах, так и вне пределов выборки. Система со случайным входом была одной из наименее устойчивых, рассматривавшихся при изучении входов.

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

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

Далее

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

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