Д.Катс.Д.Маккормик.Энциклопедия торговых стратегий. Донна л. Маккормик
Скачать 5.96 Mb.
|
ГЛАВА 14 УЛУЧШЕНИЯ СТАНДАРТНОЙ СИСТЕМЫ ВЫХОДА 341 ts.exitshortlimit('С' , limprice); ts.exitshortstop('D' , stpprice); } else { // выходы после дня входа if (ts-position{) > 0) { // длинные позиции ts.exitlonglimit('F' , limprice); ts.exitlongstop('G', stpprice); if(cb-entrybar >= maxhold) ts.exitlongclose('E'); } else if(ts.position() < 0) ( // короткие позиции ts.exitshortlimit('I' , limprice); ts.exitshortstop('J' , stpprice); if(cb-entrybar >= maxhold) ts.exitshortclose('H') ; } } } // обрабатываем следующий день ) В коде использован стандартный случайный вход по цене открытия и модифицированный стандартный выход. Правила выхода следующие: лимитный приказ на выход размещается на уровне некоторого количе- ства средних истинных диапазонов выше (для длинных) или ниже (для коротких позиций) цены входа. Данное количество доверительных интер- валов определяется параметром ptlim. Кроме лимитного приказа целевой прибыли, размещается защитная остановка на уровне некоторого коли- чества средних доверительных интервалов ниже (для длинных) или выше (для коротких позиций) цены входа. Данное количество доверительных интервалов определяется параметром mmstp. Максимальное время удер- жания позиции определяется параметром maxhold. Если сделки не были закрыты ранее по достижении целевой прибыли или защитной останов- ки, то они закроются по истечении maxhold дней (в этом тесте, как и во всех предшествовавших, фиксированное значение maxhold равно 10). В табл. 14-1 приведены годовые соотношения риска/прибыли (Р/ПРИБ), процент прибыльных сделок (ПРИБ%) и средняя прибыль или убыток со сделки ($СДЕЛ) для каждой из комбинаций значений лимита и защитной остановки. В столбце справа приведены средние значения СРЕД для каждого из значений лимита целевой прибыли, в нижней строке — средние значения СРЕД для каждого из значений защитной остановки. Из полученных результатов можно сделать целый ряд выводов. Чем ближе целевая прибыль к цене входа, тем выше процент прибыльных сде- лок. Близко расположенная целевая прибыль с большей вероятностью достигается и закрывает позицию с некоторой прибылью. При этом по- вышенный процент прибыльных сделок недостаточен для преодоления отрицательного эффекта потери потенциальной прибыли. Более удален- ные целевые прибыли работали лучше, и в большинстве случаев оптималь- ное расположение целевой прибыли составило от 1 до 2 средних истин- ных диапазонов от цены входа. При удалении защитных остановок от цены входа процент прибыльных сделок возрастал, но другие показатели ухуд- 342 ЧАСТЬ III ИССЛЕДОВАНИЕ выходов шались, при приближении — процент прибыльных сделок падал вместе с другими показателями. Наилучшая общая эффективность по показателям годового соотно- шения риска/прибыли и средней прибыли сделки была достигнута при целевой прибыли 4,5 и защитной остановке 1,5. При удалении от опти- мальных значений возрастало отношение риск/прибыль, равно как и сред- ний убыток в сделке. Между размещением целевой прибыли и защитной установки не было особо выраженной связи. Значения, оптимальные для одного параметра, при изменении другого менялись незначительно. По- чти так же хорошо работало сочетание целевой прибыли 1,5 и защитной остановки 4 — была получена несколько большая средняя прибыль в сдел- ке и несколько худшее соотношение риска/прибыли. Интересно, что про- извольно заданные значения оказались весьма близкими к оптимальным (занимая соседние ячейки в табл. 14-1). Впрочем, оптимальные значения обеспечили на 6% больше прибыльных сделок, чем произвольно задан- ные целевая прибыль 4 и защитная остановка 1. Для оптимальных параметров процент прибыльных сделок составил 39%. При поиске максимального значения обнаружилось, что параметр целевой прибыли 0,5 обеспечивает 69% прибыльных сделок, но со значи- тельно худшими показателями риска/прибыли и средней прибыли со сдел- ки. Это однозначно показывает важность удержания потенциально при- быльных позиций. Ни одна из комбинаций не принесла прибыли — чего и следовало ожи- дать от минималистской стратегии выходов со случайными входами. Впро- чем, полученные результаты при различных сочетаниях параметров впол- не пригодны для сравнения. Заключение Потенциальной прибылью нельзя жертвовать даже во имя достижения большого процента выгодных сделок, поскольку в конечном счете это приведет к худшей результативности торговой системы. Кроме того, ви- димо, существует оптимальный уровень расположения защитной останов- ки — слишком удаленная остановка повышает процент прибыльных сде- лок, но одновременно повышает общие убытки. Слишком близкая оста- новка уменьшает убытки с каждой сделки, но сильно снижает количество прибыльных сделок в целом, опять-таки ухудшая общий результат. Опти- мальные значения обеспечивают умеренный процент прибыльных сде- лок и высокую эффективность. В данном случае оптимальное располо- жение защитной остановки было на уровне полутора средних истинных диапазонов от цены входа. С другими системами входа оптимальное рас- положение может быть гораздо более близким. ГЛАВА 14 УЛУЧШЕНИЯ СТАНДАРТНОЙ СИСТЕМЫ ВЫХОДА 343 Таблица 14—1. Эффективность портфеля в пределах выборки при использо- вании случайного входа с модифицированными стандартны- ми выходами в зависимости от параметров целевой прибыли (по горизонтали) и защитной остановки (по вертикали) 344 ЧАСТЬ III ИССЛЕДОВАНИЕ выходов ТЕСТИРОВАНИЕ ДИНАМИЧЕСКИХ ЗАЩИТНЫХ ОСТАНОВОК В этой группе тестов мы заменим фиксированную защитную остановку МССВ на динамическую, предположительно более эффективную. Целью является фиксация основной части потенциальной прибыли, избегая при этом превращения потенциально выгодных сделок в убыточные, как это может иметь место в случае слишком близко расположенной фиксиро- ванной остановки. Существует много способов перемещать защитную остановку так, чтобы ее уровень следовал за рынком, фиксируя часть возникающей в течение сделки прибыли. Один из популярных методов состоит в разме- щении остановки на уровне минимального минимума за несколько пре- дыдущих дней (для длинных позиций). Затем остановка может переме- щаться вверх (но не вниз). Для коротких позиций защитная остановка размещается на уровне максимального максимума за несколько преды- дущих дней и может двигаться только вниз, но не вверх. Этот простой метод испытывается в первом тесте. Второй тест динамической защитной остановки похож на методику подгонки фиксированной защитной остановки в МССВ. Уровень смеща- ется вверх (для длинных позиций) или вниз (для коротких позиций) от текущей цены на некоторое количество средних истинных диапазонов. В отличие от фиксированной защитной остановки, использованной в МССВ, в данном случае защитная остановка перемещается в зависимости от те- кущей рыночной цены. Смещение может происходить только в одну сто- рону — вверх для длинных позиций, вниз для коротких. Целью является поддержание одинакового статистического расстояния между наилучшей ценой, достигнутой во время удержания позиции, и защитной останов- кой. Защитная остановка для длинных позиций рассчитывается следую- щим образом: (1) Из цены входа вычитается параметр mmstp, умножен- ный на средний истинный диапазон. Результат будет уровнем защитной остановки для следующего дня. (2) На следующей день из текущей цены вычитается другой параметр stpa, умноженный на средний истинный ди- апазон. (3) Если цена защитной остановки, полученная на шаге 2, выше ценового уровня текущей защитной остановки, то текущее значение за- щитной остановки заменяется вычисленным. (4) Стадии 2 и 3 повторяют- ся для каждого последующего дня. При расчете защитной остановки для короткой позиции произведение среднего истинного диапазона на пара- метр (mmstp или stpa.} прибавляется к рыночной цене, и уровень защит- ной остановки опускается вниз. В третьем тесте использован более сложный подход. Для длинных по- зиций, как обычно, защитная остановка задается на уровне некоторого количества средних истинных диапазонов ниже цены входа в рынок. За- тем остановка смещается вверх на величину, зависящую от того, насколь- ко текущая цена выше текущего уровня защитной остановки. Для корот- ГЛАВА 14 УЛУЧШЕНИЯ СТАНДАРТНОЙ СИСТЕМЫ ВЫХОДА 345 ких позиций уровень остановки задается выше цены входа и опускается в зависимости от того, насколько текущая цена ниже его. В принципе этот метод основывается на варианте смещенного экспоненциального сколь- зящего среднего (ЭСС), за тем исключением, что величина скользящего среднего инициализируется отдельным условием при входе в сделку и может изменяться только в одном направлении (так как защитная оста- новка может двигаться только в направлении рыночной цены). Защитная остановка для длинных позиций рассчитывается нижеследующим обра- зом: (I) Начальное значение в день входа в рынок задается вычитанием из цены входа произведения параметра mmstp и среднего истинного диапа- зона. (2) На следующий день от максимальной цены отнимается произве- дение параметра stpa и среднего истинного диапазона; затем вычитается текущее значение защитной остановки и результат умножается на пара- метр stpb. (3) Если результат шага 2 больше нуля, добавляем его к текуще- му значению защитной остановки, если нет, то уровень не изменяется. (4) Повторяем шаги 2 и 3 для каждого последующего дня. При вычислении защитной остановки для коротких позиций произведения среднего истин- ного диапазона на параметры прибавляются к рыночной цене. К уровню защитной остановки прибавляются только отрицательные поправки. 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 = x20mod02.c // parms — набор [1..MAXPRM] параметров // dt - набор [l..nb] дат в формате ГГММДД // орn — набор [1..nb] цен открытия // hi — набор [1..nb] максимальных цен // 1о — набор [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 stpa, stpb, mmstp, ptlim, limprice, stpprice; static int entryposted, entrybar, model type; static float exitatr[MAXBAR+1] , rnum, entryprice, tmp, atr; static long iseed; // копируем параметры в локальные переменные для удобного обращения mmstp = parms[1]; // используется для начальный защитной остановки stpa - parms[2]; // дополнительный параметр защитной остановки stpb = parms[3]; // дополнительный параметр защитной остановки ptlim = parms[6]; // целевая прибыль в единицах среднего истинного // диапазона 346 ЧАСТЬ III ИССЛЕДОВАНИЕ выходов modeltype = parms[7]; // тип используемой динамической защитной // остановки maxhold = parms[8]; // период максимального удержания позиции ranseed = parms[9]; // используется для инициализации случайной // последовательности // выполняем вычисления по всему объему данных AvgTrueRangeS{exitatr,hi,lo,cls,50,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] = 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.О / dlrv[cb]); if (ncontracts < 1) ncontracts = 1; // избегаем устанавливать приказы на дни с ограниченной торговлей if (hi[cb+1] == lo[cb+1]} continue; // генерировать "стандартные" случайные сигналы входа signal = 0; rnum = ran2(&iseed); if(rnum < 0,025) signal = -1 // случайный короткий вход else if(rnum > 0.975) 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; } // выходим из сделок, используя стандартный выход с улучшенными // защитными остановками atr = exitatr[cb]; if (entryposted > 0) { ГЛАВА 14 УЛУЧШЕНИЯ СТАНДАРТНОЙ СИСТЕМЫ ВЫХОДА 347 // инициализация и выходы для длинных позиций в день входа switch(modeltype) { case 1: limprice = entryprice + ptlim * atr; stpprice = min (Lowest (lo, 2, cb), entryprice - mmstp * atr); break; case 2: case 3: limprice = entryprice + ptlim * atr; stpprice = entryprice - mmstp * atr; break; default: nrerror("Invalid modeltype"); } ts.exitlonglimit('A' , limprice} ; ts.exitlongstop('B' , stpprice) ; } else if (entryposted < 0) { // инициализация и выходы для коротких позиций в день входа switch(model type) { case 1: limprice = entryprice - ptlim * atr; stpprice = max (Highest(hi, 2, cb), entryprice + mmstp * atr); break; case 2: case 3 : limprice = entryprice - ptlim * atr; stpprice - entryprice + mmstp * atr; break; default: nrerror{"Invalid modeltype" ) ; } ts.exitshortlimit('C' , limprice) ; ts.exitshortstop('D' , stpprice); } else { // выходы после дня входа if(ts.position() > 0) { // длинные позиции switch{modeltype) { case 1: stpprice - max(stpprice, Lowest(lo,2,cb)); break; case 2: stpprice = max(stpprice, cls [cb]-stpa*atr); break; case 3: tmp = (hi [cb] - stpa * atr) - stpprice; if{tmp > 0.0) stpprice += stpb * tmp; break; } ts.exitlonglimit('F' , limprice); ts.exitlongstop('G' , stpprice); if (cb-entrybar >= maxhold) ts.exitlongclose('E' } ; } else if (ts.position(} < 0) { // короткие позиции switch(modeltype) { case 1: stpprice = min(stpprice, Highest(hi,2,cb}) ; break; case 2: stpprice = min (stpprice, cls [cb]+stpa*atr); break; 348 ЧАСТЬ III ИССЛЕДОВАНИЕ выходов сазеЗ: tmp = {lo[cb] + stpa * atr) - stpprice; if(tmp < 0.0) stpprice += stpb * tmp; break; } ts.exitshortlimit('I' , limprice) ; ts.exitshortstop('J' , stpprice); if(cb-entrybar >= maxhold) ts.exitshortclose('H') ; } } } // обрабатываем следующий день } Вышеприведенный код реализует МССВ с заменой фиксированной защитной остановки на одну из трех динамических методик. Вид защит- ной остановки выбирается параметром modeltype, и в зависимости от вида выбранной остановки программа оптимизирует значения еще трех допол- нительных параметров. Для остановки на основе максимального макси- мума/минимального минимума за два последних дня (ММ/ММ) параметр mmstp — это количество средних истинных диапазонов (не обязательно целое число), прибавляемых или отнимаемых от цены входа для получе- ния защитной остановки для входного дня. Защитная остановка входного дня устанавливается на уровне цены входа или минимального минимума за два последних дня плюс или минус указанное количество средних ис- тинных диапазонов (выбирается уровень, более удаленный от текущей рыночной цены). Для двух других остановок (на основе среднего истин- ного диапазона и ЭСС) уровень защитной остановки входного дня ини- циализируется стандартным образом, т.е. цена входа минус (для длинной позиции) или плюс (для короткой позиции) произведение mmstp на сред- ний истинный диапазон. Затем в каждом торговом дне производится коррекция уровня защит- ной остановки. Вид коррекции зависит от выбранного параметром modeltype типа. Для остановки на основе ММ/ММ рассчитывается мак- симальный максимум или минимальный минимум в зависимости от вида открытой позиции (короткая или длинная). Если результат ближе к ры- ночной цене, чем текущий уровень защитной остановки, то он использу- ется в качестве новой защитной остановки. В другой модели средний ис- тинный диапазон умножается на второй параметр stpa. Результат вычи- тается (для длинной позиции) или прибавляется (для короткой) к теку- щей цене закрытия. Если результат ближе к текущей цене, чем текущий уровень защитной остановки, то он заменяет уровень защитной останов- ки, приближая его, таким образом, к текущей рыночной цене. Для треть- его типа остановки (на основе ЭСС) средний истинный диапазон умно- жается на второй параметр stpa. Результат вычитается (для длинной по- зиции) или прибавляется (для короткой) к текущей цене закрытия для получения сдвига. Эта разность заносится в переменную tmp. Уровень ГЛАВА 14 УЛУЧШЕНИЯ СТАНДАРТНОЙ СИСТЕМЫ ВЫХОДА 349 защитной остановки обновляется в последующие дни путем прибавле- ния imp, умноженной на другой параметр (коэффициент коррекции stpb) к текущей защитной остановке. Это, впрочем, производится только в том случае, если коррекция сместит уровень защитной остановки ближе к текущей цене. Расчеты подобны методике получения экспоненциально- го скользящего среднего (ЭСС) — с той разницей, что при расчете соб- ственно ЭСС было бы возможно смещение уровня защитной остановки в обе стороны и не использовался бы предварительный сдвиг. В этой мо- дели stpb определяет эффективный период экспоненциального скользя- щего среднего, которое может изменяться только в одном направлении — к текущей рыночной цене. Тестирование защитной остановки на основе максимального максимума/минимального минимума В этом тесте (modeltype = I) параметр начальной защитной остановки (НАЧСТП) управляет максимальной близостью уровня остановки к цене в первый день. Он прогоняется от 0,5 до 3,5 с шагом 0,5. Каждая строка в табл. 14-2 представляет данные об эффективности каждого из значений НАЧСТП в пределах выборки. В последней строке указана эффективность лучшего из найденных значений вне пределов вы- борки. Таблица имеет те же обозначения, что и другие таблицы оптими- зации в этой книге (МПАД означает максимальное падение капитала в тысячах долларов). Судя по результатам, эта защитная остановка постоянно располага- лась слишком близко, на что указывает сниженный по сравнению с ос- новной стратегией МССВ процент прибыльных сделок. В предыдущем тесте наилучшее решение (при mmstp 1,5, ptlim 4,5) давало 39% прибыль- ных сделок, при соотношении риска/прибыли —1,46 и приносило сред- ний убыток в сделке $1581. В этом тесте лучшее решение давало только 28% прибыльных сделок в пределах и 29% вне пределов выборки. Мно- гие потенциально прибыльные сделки (в том числе сделки, которые были бы прибыльны с оптимальной фиксированной защитной остановкой МССВ) были превращены в малоубыточные. Близость расположения этой защитной остановки также подтверждается небольшой средней длительностью сделки (4 дня) по сравнению с обычными 6 — 8 днями. Среднее соотношение риска/прибыли ( — 2,52 в пределах и —2,38 вне выборки) и средний убыток в сделке ($1864 в пределах и $1818 вне пре- делов выборки) также были значительно хуже, чем при оптимальной фиксированной защитной остановке. Метод ММ/ММ с периодом 2 дня однозначно малоэффективен, и ему следует предпочесть фиксирован- ную остановку, найденную с помощью оптимизации, как это было сде- лано ранее (табл. 14-1). 350 ЧАСТЬ III ИССЛЕДОВАНИЕ выходов Таблица 14—2. Эффективность портфеля для динамической защитной остановки на ММ/ММ с периодом 2 дня при целевой прибыли согласно табл. 14-1 В пределах выборки НАЧСТП 0.50 1.00 1.50 2.00 2.60 3.00 3.50 ПРИБ -7057 -7710 -7792 -7857 -7776 -7745 -7754 ПРИБЛ -3534 -3333 -3353 -3343 -3297 -3257 -3262 ПРИБКР -4423 -4386 -4438 -4514 -4478 -4487 -4492 Ф.ПРИБ 0.67 0.70 0.70 0.70 0.70 0.70 0.70 дох% -10.3 -10.3 -10.3 -10.3 -10.3 -10.3 -10.3 Р/ПРИБ -2.71 -2.54 -2.53 -2.54 -2.62 -2.52 -2.52 ВЕР 1.00 1.00 1.00 1.00 1.00 1.00 1.00 МПАД 7951 7711 7778 7839 7766 7727 7736 СДЕЛ 4210 L 4187 4178 4172 4171 4171 4171 ПРИБ% 25 27 28 28 28 28 28 $СДЕЛ -1890 -1843 -1865 -1883 -1864 -1857 -1859 дни 3 4 4 4 4 4 4 Вне пределов выборки 2.50 -3259 1 -1511 -1748 0.71 -22.4 -2.38 1.000 3450 1793 29 -1818 4 Тестирование динамической защитной остановки на основе среднего истинного диапазона В этой модели два параметра, представленные в коде как mmstp и sfpa, служили множителями среднего истинного диапазона при размещении защитной остановки на входном и на последующих днях соответственно. В табл. 14-3 показана прогонка параметров для входного дня (ПЕРВЫЙ) и последующих дней (ПОСЛЕД) от 0,5 до 3,5 с шагом 0,5. Как и в предыдущих тестах защитных остановок, влияние парамет- ров на эффективность было постепенным и мало зависело друг от друга. По показателю соотношения риска/прибыли наилучшие результаты дос- тигаются при значении параметра первого дня, равного 2, и параметров последующих дней, равных 2 или 2,5. Наилучшим сочетанием значений является 2 для первого дня и 2,5 для последующих, когда соотношение риска/прибыли минимально и убыток со сделки также минимален. Мо- дель работала чуть лучше, чем оптимальная фиксированная защитная ос- тановка, соотношение риска/прибыли составило — 1,40 по сравнению с — 1,46. Процент прибыльных сделок был также выше (42% против 39%). Как и в табл. 14-1, жирным шрифтом выделено лучшее решение. Тестирование динамической защитной остановки на основе ЭСС В этой модели используются три параметра: исходная защитная оста- новка для первого бара, сдвиг среднего истинного диапазона (СИДС в табл. 14-4) и коэффициент степени адаптации (КОЭФФ), который опре- деляет относительную скорость движения уровня защитной остановки по направлению к рыночной цене или же период лежащего в основе модели модифицированного экспоненциального скользящего среднего. Все параметры подвергались оптимизации в ходе широкого поиска. |