Тестирование торговых систем
28.12.2008
Мой конспект серии статей Патрика Янга в журнале ADR magazine (ныне не издающемся), примерно 2001 год.
Данные и обратное тестирование
В системных торгах существует школа взглядов, которая утверждает, что необходимо, по крайней мере, 30 торгов на данном наборе данных, что бы сделать систему работоспособной. По-моему, это не соответствует истине. Особенно в отношении кратковременных торговых систем и дневных рынков (которые мы рассмотрим позже в этой серии). Более 100 торгов – необходимое количество для одного набора тестируемых данных, которое, я уверен, гораздо более соответствует потенциально сильной системе.
Важный момент в создании современных торговых систем – это возможность использовать персональный компьютер для проверки результатов. Одна из самых больших проблем торговцев, впервые приступающих к системным торгам – это сформулировать идею, затем проверить ее на данных, отладить несколько раз систему стопов и, наконец, оптимизировать идею, чтобы получить наилучшую из возможных систему. Но, к сожалению, наилучшая система это, фактически, нечто большее, чем система идеально отлаженная на прошедших данных.
Откажитесь от этого немедленно и начните снова, иначе вам будет казаться, что история повторяется до самого последнего шага!
Когда дело касается тестирования, часто имеет смысл вначале проверить саморегулирующуюся систему без начального стопа. Затем вы можете проверить надежность входящих сигналов в деталях и лишь потом все остальное.
Тем не менее, имея дело с не саморегулирующейся системой, важно начать тестирование с методики остановки и входа в самом начале, иначе слишком высок риск провала такой системы.
Набор данных, используемых для тестирования, конечно же, в значительной степени повлияет на результаты. Например, набор схожих данных, связанных с системой с “узкими” стопами повлечет за собой большое количество потерь. И еще, вспомните предупреждение в ранних статьях этой серии об использовании дневных данных для наиболее точных результатов тестирования, когда торгуете с “узкими” стопами, которые меньше недавнего торгового диапазона. С другой стороны, “широкий” стоп предупредит частые мелкие потери (которые накапливаются, помните об этом).
Конечно, большие потери – неприятная вещь по своему определению, но возможно они представляют собой наилучший путь. Даже самые небольшие поправки к “узким” стопам способны значительно повлиять на доходность системы. Модулирование бОльших стопов, даже с изменением в несколько сотен долларов за один раз – неспособно сильно изменить общую доходность. Начиная с “узкого” стопа и расширяя его постепенно, вы увидите, как быстро изменяется результаты системы (возможно с увеличением доходов!). Постепенно изменения станут не такими быстрыми, по мере того, как величина стопа будет становиться шире. Таким образом, когда вы преодолеете некоторый предел изменчивости, увеличение в размере начального стопа будет иметь не большое значение для эффективности всей системы.
Теперь взгляните на наши данные. В нашем случае, чем их больше, тем лучше. Многие торговцы склонны считать, что 10 лет – это хороший минимум, но 12 лет – предпочтительней. Тем не менее, будет проблемой найти производные рынки, серьезно торгующие 10 лет.
В то время, как количество контрактов с такой базой данных увеличивается, я могу добавить, что модернизаторы системы обычно избегают рынков в первые 2 года действия. Это происходит потому, что рынки развиваются и растут в течение первых 2-х лет, до того момента, когда их можно будет считать достаточно зрелыми, чтобы их учитывали системные торговцы. Мы обсудили возможность синтезировать данные из реального мира цен, чтобы позволить проводить практически неограниченное тестирование на более поздней стадии в этой серии.
Тем не менее, тот, кто просто тестирует свою систему на всех доступных данных, вынужден подгонять отклонения для достижения совершенства. Наилучший способ – это разбивка данных. Системные торговцы имеют различные подходы к этому. Многие разбивают данные на две части. Набор развития и набор тестирования. Это позволяет вам использовать один набор данных для реального создания системы и другой – для тестирования системы без каких-либо модификаций или оптимизаций.
Я предпочитаю другую систему деления данных – на три равных секции:
-
Набор “Развитие”.
-
Набор “Обратное тестирование”.
-
Набор “Прохождение”.
С первым набором данных мы развиваем свою систему, моделируя о оптимизируя параметры, будучи осторожными с этими вездесущими опасностями подгонки искривлений.
Затем, развив систему, мы применяем к ней обратное тестирование, таким образом, снова просматривая результаты. Если результаты не слишком впечатляющие, тогда возвращаемся к графикам. Если за эти два периода обнаружен возможный значительный доход, мы переходим к финальному тесту “Прохождение” на третей порции доступных данных.
Преимущество этого в том, что мы можем наблюдать торги в развитии, один за другим и видеть, как в действительности двигается рынок в пользу нашей системы и против нее.
Тесты “Прохождения” являются важной предпосылкой развития систем, т.к. они:
-
Могут дать нам лучшее “ощущение” того, как работает наша система, обеспечивая нам уверенность в ее возможностях.
-
Позволяют нам определять, удовлетворяют ли действия системы нашему стилю торгов.
Последний пункт – наиболее важный, и мы будем возвращаться к нему в этой серии. Как уже упоминалось в начальных разделах, вопрос о применении системы, работающей краткосрочно в ситуациях с высокой степенью изменчивости, не стоит, если вы торговец, не склонный к переменам. Система должна отражать ваши сильные стороны в торгах, а не ваши слабости. Таким образом, если вам не нравится удерживать позиции, которые играют против вас в течении недель, такая система не для вас.
Кроме того, чем выше уверенность в том, как работает ваша система, тем больше вероятность того, что вы будете продолжать пользоваться ею в течении ее первого периода получения просадки счета
Закон Мерфи для торговых систем гарантирует вам, что первая значительная просадка счета начнется вскоре после подключения торгов к реальному времени. Это может произойти до того, как система принесет вам значительный доход, и даже съесть часть вашего начального капитала. Чем более вы уверены в своей системе, тем больше вероятность того, что вы преодолеете подобные трудные времена.
Говоря о разбивке данных, если использовать данные 12 лет, 1986-1997г.г., грубая система будет выглядеть так:
“Развитие” 1986-1989г.г.
“Обратное тестирование” 1990-1993г.г.
“Прохождение” 1994-1997г.г.
Конечно, если имеется набор тестов, мы можем проверить результаты, чтобы видеть, где работала тестируемая система. Очевидно, если мы имеем начально созданную систему на наборе данных в сложных условиях, то не удивительно, что она будет работать плохо на других рынках с другими условиями.
Таким образом, вам необходимо использовать свой интеллект, выбирая набор “Развитие”. Лучше всего взять период в 4 года, который показывает понемногу все формы рыночной активности – подъемы, падения и боковое движение, т.к. оптимизируя систему, которая создана с использованием набора данных, относящихся к определенному направлению (условиям), вы не сможете создать хорошую дееспособную систему. Кроме того, система, созданная на наборе данных, которые отражают очень низкую волатильность покажет ужасные результаты, если рынок “выпадет” из зоны ограничения.
Результаты тестирования системы
Итак, если вы хотите пойти далее, не глядя на этот раздел, и немедленно торговать по вашей системной методологии, тогда, пожалуйста, не стесняйтесь – всегда есть вероятность того, что она будет работать. Однако, вполне вероятно, что вы просто будете отдавать свои деньги другим трейдерам – как поначалу автор этой статьи… Прислушайтесь ко мне! Если вы хотите пожертвовать немного наличности в пользу некоторой части трейдеров в мире – так сделайте это, как говорит известный рекламный лозунг. С другой стороны, вы можете пожертвовать исключительно ADT. Пошлите нам чек на 30% от своего капитала и вы предохраните себя от напряжений и стрессов неизбежно сопровождающих все эти потери.
Между тем, те, кто все еще верен процессу создания системы, приглашаются к чтению…
В своей книге “Кибернетические торговые системы” Murray Ruggiero отметил, что:
“Тестирование и оценка торговой системы включает три главных момента:
-
Насколько хороши ожидания от работы системы, и каковы риски?
-
Насколько вероятно, что система продолжит работать в будущем?
-
Можем ли мы предугадать, когда и если работа системы или временно ухудшится или полностью прекратится?”
Мы будем обращаться ко всем этим аспектам в этой и в будущих статьях этой серии. Однако, завершив подбор переменных для нашей системы, давайте начнем с простейшего теста. Конечным результатом будет изобилие торговой информации, в которой количество прибыли является лишь только одним важным фактором. Действительно, очень хорошей отправной точкой при описании является взгляд на график дохода. Линия дохода дает графическое представление того, как система прогрессирует в течение ее торговой жизни. Идеальная система будет иметь плавную линию, равномерно поднимающуюся от левого нижнего до правого верхнего угла диаграммы. Система со многими очень резкими выбросами – не работоспособная система, поскольку они предполагают систему, которая не только не является постоянно приносящей доход, но еще и является относительно противоречивой в своих общих результатах.
Большинство хороших современных программ по системной торговле включают множество статистики по тестированию/результатам торговли. Например, простейшие вопросы, с которыми приходится сталкиваться в реальности, это такие как комиссия брокера, проскальзывание, условия маржи. В отношении последнего имейте ввиду, что на неустойчивых рынках маржа может изменяться в течении дня, также как со дня на день, из недели в неделю. Величина маржи, используемая при тестировании системы, должна, следовательно, отражать то, что маржа, вероятно, может быть временами не постоянной. Иначе – в реальном мире – вы обнаружите, что не можете использовать вашу систему для торговли из-за чрезвычайно высоких условий маржи. Подобным образом, чтобы подстраховаться при оценке брокерского вознаграждения, во время тестирования используйте самую высокую ставку.
Другие статистические данные системы будут включать следующие, по существу очевидные, результаты:
-
Число периодов в испытании.
-
Общая чистая прибыль, валовая прибыль и убытки брутто.
-
Общее количество трейдов, процентный доход, количество выигрышей и проигрышей.
-
Наибольшие выигрышный и проигрышный трейды.
-
Средний выигрышный, средний проигрышный трейды.
-
Наибольшее число последовательных выигрышей, последовательных проигрышей.
-
Среднее число баров в выигрышах и проигрышах.
-
Максимальная дневная просадка.
-
Фактор прибыли – отношение результатов выигрышных трейдов к результатам проигрышных трейдов, иногда выражаемому в виде индекса изменяющегося от -100 (очень плохо) до +100 (очень хорошо).
-
История последовательно по трейдам.
Итак, после нашего первого теста, давайте обратим внимание на некоторый простой анализ степени управления риском. Существуют три фактора которые совместно определяют результаты торговли:
-
Риск.
-
Маржа.
-
Прибыль.
При определении методов анализа управления риском, нам проще всего взглянуть на максимальную просадку. Если она больше, чем ваш капитал, который вы инвестировали для работы по системе, то эта система для вас бесполезна – по крайней мере, в ее нынешнем виде уж точно. Ох, никогда не поддавайтесь соблазну торговать по системе с капиталом меньшим, чем ее максимальная просадка. Позвольте гарантировать, что конечный результат непременно будет включать ваши слезы.
Одним очень простым измерением характеристики управления риском, является расчет отношения чистая прибыль/максимальная просадка. Пионеры разработки систем для оценки использовали результат этого расчета равный 10 и более, для того чтобы убедиться, что они видят потенциально хорошую систему. В настоящее время, наиболее популярным измерением при анализе управления риском, чаще всего используемый CPO и CTA, является Отношение Шарпа.
Отношение Шарпа определяется как:
(Средний доход – Процентная ставка)/Среднеквадратичное отклонение дохода
Чем выше отношение Шарпа, тем лучше система, поскольку ее доходы более стабильны. Когда две различные системы предполагают одинаковые денежные доходы, одна из них, с большим Отношением Шарпа, имеет меньший риск.
Другим аспектом, который необходимо рассмотреть, прежде чем переходить к вопросам оптимизации, это как много тестов мы хотим применить к системе. Сейчас, когда уже не является неразумным стремление к множеству тестов (возможно тысячам), с потенциальной возможностью получить сотни доказательств прибыльности – и таким образом подчеркнуть работоспособность системы – нельзя игнорировать практическую сторону этого дела. Посмотрите на следующую таблицу, которая показывает, как нагромождение теста на тест будет значительно увеличивать количество компьютерного времени требуемого для выполнения заданного числа тестов:
|
Кол-во значений индикатора
|
Количество индикаторов | ||||
| 1 | 2 | 3 | 4 | 5 | |
| 5 | 5 | 25 | 125 | 625 | 3,125 |
| 10 | 10 | 100 | 1,000 | 10,000 | 100,000 |
| 15 | 15 | 225 | 3,375 | 50,625 | 759,375 |
| 20 | 20 | 400 | 8,000 | 160,000 | 3,200,000 |
| 25 | 26 | 625 | 15,625 | 390,625 | 9,765,625 |
Другими словами, когда проверяются тысячи значений переменных в надежде получить сотни прибыльных результатов системы, может показаться заманчивым, проверить по 25 значений в каждом из 5 индикаторов, однако это уже явный перебор. Даже если ваш персональный компьютер имеет большие резервы памяти и мощности процессора …
В качестве отправной точки, лучше всего начать с нескольких тестов. Затем, как вы начнете находить торговую систему которая смотрится достаточно перспективной, можете постепенно увеличивать количество переменных в вашем тесте. Просто ввод множества значений параметров по любой прихоти будет только занимать слишком много машинного времени (не говоря о вашем собственном времени ожидания), чтобы быть достаточно продуктивным.
И не забывайте, однажды вы закончите оптимизацию, затем вы переведете систему в разряд Прошедших Тестирование (и в конечном итоге в разряд Используемых), и в системе не должно быть более изменений, чтобы, черт возьми, подгонка кривой не испортила ваших исследований.
В заключение, теперь давайте взглянем на пару параметров являющихся решающими в определении прибыльности торговой системы. Ларри Вильямс предпочитает чтобы средняя прибыль за трейд была более 250 долларов после учета разумного количества проскальзывания и комиссионных. Это довольно приемлемая база для его относительно краткосрочной торговли. Однако Вильямс также предпочитает, чтобы его система выигрывала более чем в 70% случаев, что является, скорее, не необходимостью, а стечением обстоятельств. (Все же, он, по крайней мере, достаточно честен, чтобы допустить свою персональную потребность побеждать так часто.) Однако, действительно потрясающие системы – как и многие действительно потрясающие трейдеры – могут делать деньги только в 40% трейдов.
О чем в действительности нам сообщает тестирование
“Результаты тестирования не являются тем, чем они кажутся. Вы должны иметь в виду, что торговые системы разработаны с учетом прибыли на исторических данных. Это важно, потому, что Вы знаете априори, что рынок совершил в прошлом. Любая торговая система, которая вами разработана или оптимизирована, отражает ваш принципиальный взгляд на прошлые действия рынка. Вы можете зафиксировать Ваше понимание в общем виде, что позволяет избежать опасностей подстерегающих при вычерчивании графика. Однако, и это стоит иметь в виду, что влияния исторических данных избежать трудно.” – Chande
Итак, Вы получили систему и несколько результатов, которые говорят Вам, что она прибыльна. И Вы готовы к рок-н-роллу, да? Ошибка!
На этой стадии Вы имеете грубую систему и очень грубый набор результатов. Для начала давайте посмотрим на несколько больший ряд данных, которые выдает тестирование системы, чтобы пройтись по методологии их получения. Для начала имеется коэффициент компенсации (Payoff Ratio). Он дает соотношение среднего выйгрышного трейда к среднему пройгрышному. Это полезный маркер для системных анализов, поскольку дает некие индикаторы в долларовом выражении того, насколько в среднем система устойчива. Это удобное средство определения доверия и, поскольку Вы тестируете различные системы, вполне применимый индикатор того, как они выступают друг относительно друга в течение какого-то времени. Некоторые аналогии с легендой о зайце и черепахе…
По существу, мы демонстрируем то, что хотя имеющиеся данные Резюме Тестирования (Performance Summary) весьма полезны, они говорят далеко не полную историю о какой либо системе. Например, есть один показатель, который весьма полезно подсчитывать – Фактор Покрытия (Recovery Factor). Это абсолютное значение отношения чистой прибыли к максимальной дневной просадке. Это также, следовательно, является мерой того, насколько успешно система восстанавливается от глубины просадки. Фактор покрытия должен быть больше 2, чтобы указывать на работоспособную систему. Очевидно, чем выше его значение, тем лучше.
Когда приходит время анализа Вашей прибыли, может возникнуть серьезная ошибка там, где рынок произвел значительное ее увеличение из-за одной частной ситуации (т.е. например, наличия короткой позиции во время краха на фондовом рынке в 1987 году). Поэтому, чтобы гарантировать, что разумная часть подсознательной подгонки графика не является показывающей в слишком розовом свете Вашу прибыль, удалите Ваш наибольший выйгрыш из общей прибыли. Это дает значение, называемое многими разработчиками систем как “откорректированная валовая прибыль” (adjusted gross profit). Заметьте, что Вы не удаляете наибольший пройгрышный трейд.
Испытание системы на исторических данных копирует, но обычно не воспроизводит прошлые рыночные действия благодаря ряду недостатков, которые мы ранее обсуждали в этой серии – таких как спрэд, одновременное нажатие клавиш, проскальзывание и т.д. Другими словами, мы допускаем, что тестирование на исторических данных производит реалистичное впечатление от потерь, однако озабочены тем, что имеется по-детски сверх оптимистичная оценка прибыли. После получения откорректированной валовой прибыли, пересчитайте фактор прибыльности и посмотрите все ли еще он больше чем единица. (Фактор прибыльности подсчитывается теперь, следовательно, как откорректированная валовая прибыль деленная на убыток брутто.)
Подобным образом заметим, что когда система имеет один трейд, который сделал 30% или более от общей прибыли, то очень маловероятно, что система является работоспособной. Скорее это система, которой повезло захватить главное движение при испытании на исторических данных. В равной степени, ищите существенные единичные трейды приносящие большое количество прибыли при испытании на широком диапазоне данных. Даже единичный трейд делающий 20% прибыли системы должен, для безопасности, рассматриваться с некоторым подозрением.
Как только Вы получили откорректированную валовую прибыль, Вы можете приступать теперь к расчету “реальных результатов” (Real Returns). Многие разработчики систем просто берут валовую прибыль и делят ее пополам. Я, однако, предпочитаю идти на один шаг дальше, и делить откорректированную валовую прибыль на 2. Это дает намного более реалистичную картину того, какие результаты, вероятно, будут на практике.
Конечно, найдутся такие, которые могут спросить: “Если разработка и проектирование систем такая великая вещь, почему мы должны протаскивать наши результаты через игольное ушко, разделяя на части результаты смоделированные испытанием?” Я должен ответить, что склонен согласиться, но только в том, насколько в действительности тестирование системы является довольно сырым, если не совершенно непригодным, методом для совершенствования торговли в долгосрочном плане. Более конкретные комментарии относительно недостатков системной торговли будут, однако, представлены в эпилоге к этой серии…
Другим фактором, который весьма полезно подсчитывать это просадка умноженная на 2. Затем, когда Вы фактически передаете капитал в управление системой, этим будет значительно уменьшена возможность внезапного обнаружения себя связанным с программой, которая не может быть выполнена из за нехватки капитала. Точно также, какой бы средний уровень маржи ни был бы в течение тестируемого периода, в целях безопасности умножьте его на 3 для получения более применимого значения. О, и если Вы считаете, что это не реалистично, только взгляните, что делают клиринговые палаты по время обвалов… (И впоследствии Вы сможете поблагодарить нас за то, что предохранили от опасностей на скользком месте, или, по крайней мере, за то, что Вы все еще в игре.)
Также полезно описывать систему графически. В дополнение к графику активов описанному ранее, также является хорошей идеей начертить график доходности системы. С работоспособной системой он должен принимать форму нормального распределения. И помните этот самородок полезной информации из Tushar Chande:
“Вообще Вы должны рассматривать любые результаты торговой системы с максимальным подозрением.”





