Бэктестинг/оптимизация - страница 7

 
lomme:
Это верно.

Но для бэктестинга самая мелкая детализация - 1 мин.

Я могу представить, что тиковые данные не изменят результаты бэктестинга на 1мин.

Кто-нибудь уже тестировал эти данные? Я также согласен, что 1-М данные не будут иметь существенного значения, если только эксперт не использует чрезмерный скальпинг, тогда даже секунды могут иметь значение.

 

Обратное тестирование и оптимизация

Прежде всего, следует отметить, что оптимизация должна использоваться только для проверки существующей идеи, основанной на поведении или факте рынка, а не для открытия отличной торговой идеи. Торговая идея должна быть на первом месте. Опасность при оптимизации рынка заключается в чрезмерной подгонке кривой: то, что сработало на исторических данных, может не сработать в будущем, но вы нашли отличную комбинацию для прошлых данных. Однако это может быть использовано на нескольких рынках, чтобы найти набор параметров, которые не следует использовать, скорее чувствительность торговой системы. Еще одно применение симуляции/бэктестинга - понять слабые и сильные стороны вашей системы. Когда она работает хорошо, когда отстает, а когда просто терпит неудачу, чтобы вы могли разработать новые идеи для решения этих проблем.

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

Затем вы должны решить, сколько тестов необходимо провести, чтобы достичь уровня доверия к результатам. Это означает проведение обратного теста на 15-30 наборах данных, которые являются достаточно репрезентативными, и определение доверительного интервала. Это предполагает, что данные распределены нормально, а финансовые данные таковыми не являются, они перекошены влево с толстым хвостом справа. Поэтому один из вариантов - использовать центральный предел, чтобы улучшить ваш эксперимент и сделать его более надежным.

Бэктестер Tradestation, вероятно, более надежен, чем metatrader, потому что он может совершать тиковые сделки, а не ждать цены закрытия, но это же относится и к советникам в metatrader. Я не считаю, что бэктестер metatrader ужасен, просто его нужно правильно использовать, а использование его без понимания процесса моделирования всегда приведет к завышенным результатам и нереалистичным ожиданиям. Это приведет к потере капитала. На самом деле, смысл всего этого, в том, чтобы понять, что бэктестирование, оптимизация, моделирование - это инструменты, используемые для улучшения системы и сравнения улучшений между системами, а не для замены аналитика, разрабатывающего систему. Мое предложение для большинства, если вы используете бэктестинг, понять методологию моделирования, чтобы избавить себя от головной боли и потери капитала.

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

 

Учебник и советы по обратному тестированию

Я видел много разговоров о бэктестинге, и, похоже, существует большая путаница, поэтому, вместо того чтобы писать в каждой теме, касающейся этого, я решил разместить здесь информацию, которая может оказаться длинной, но, надеюсь, прояснит, что такое бэктестинг и как его ПРАВИЛЬНО использовать.

Бэктестинг - это форма моделирования, которая использует исторические данные для оценки улучшений торговой системы.

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

Моделирование состоит из нескольких частей. Это методология, система и данные. Я подробно расскажу о каждой из них в этой статье. Надеюсь, вы найдете эту информацию полезной.

 

Методология моделирования

Решив усовершенствовать свою торговую систему, важно быть систематичным, чтобы добиться успешного результата. К счастью, был разработан проверенный метод моделирования. Первые 6 шагов должны занимать около 40% вашего времени, как и последние 5 шагов. Этап экспериментов должен занимать только 20 % вашего времени. Шаги следующие.

1. Определите проблему - Это самый важный шаг процесса моделирования. Вы должны четко сформулировать, чего именно вы хотите добиться с помощью моделирования (бэктеста). Лучше сказать, где ваша система сейчас работает плохо. Она недостаточно быстро входит, недостаточно быстро выходит, слишком часто или недостаточно часто торгует? Вы хотите сравнить две системы и решить, какая из них более ценная и надежная. Это обоснованные проблемы.

2. Планирование проекта - этот шаг призван помочь вам убедиться, что у вас есть инструменты и дорожная карта для успешного проведения эксперимента. У большинства из нас есть все необходимое в metatrader или других программах, включая excel, но, возможно, вы не знаете достаточно программирования, чтобы сделать некоторые вещи самостоятельно, поэтому вам может понадобиться помощь. Временная шкала поможет определить, достаточно ли быстро вы справляетесь с поставленной задачей.

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

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

5. Предварительный экспериментальный дизайн - до этого этапа я надеюсь, что все вы сможете быстро проработать эти идеи в своей голове, но все же важно записать их, чтобы вы могли просмотреть и сравнить результаты, когда закончите. На этом этапе необходимо решить, как вы будете проводить эксперимент. Я сделаю отдельный пост с подробным описанием дизайна эксперимента.

6. Подготовка исходных данных - Хорошие данные жизненно важны для любого моделирования, особенно для финансового моделирования. Плохие данные могут завысить или занизить ваши результаты. Недостаточное количество данных не является репрезентативным для рынка. Я сделаю отдельный пост, посвященный рыночным данным. На этом этапе вы соберете и упорядочите данные в формате, удобном для использования программой. Я думаю, что metatrader предпочитает колонки даты, времени, открытия, максимума, минимума, закрытия, объема. Затем вы разделите их на различные наборы данных, используемые в эксперименте.

7. Перевод модели - На этом этапе вы фактически программируете свою систему, на данном этапе вы должны были иметь хорошее представление о том, как она была организована и разбита на различные функции, чтобы процесс шел гладко. Обычно существует два типа систем: интегрированные и вертикальные. Интегрированная система работает вместе одним определенным способом, в то время как в вертикальной системе можно добавлять и удалять части.

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

9. Окончательный экспериментальный дизайн - После проверки идеи внесите любые изменения в систему, которые, как вы поняли, необходимы в процессе прохождения методики. Это может означать, что вы заметили новую идею при изучении данных, или что для получения результатов потребовалась новая мера отчетности.

10. Экспериментирование - На этом этапе вы просто проводите итерации эксперимента и собираете выходные данные для анализа. Вероятно, это также будет включать запись данных.

11. Анализ и интерпретация - После проведения эксперимента и сбора выходных данных необходимо проанализировать данные и интерпретировать их. Именно здесь вы решите, является ли усовершенствование системы действительным вкладом или нет.

12. Внедрение и документирование - окончательно внедрите усовершенствования и задокументируйте результаты, чтобы вернуться к ним и улучшить жизнь симуляции.

 

Расширенная схема эксперимента

Обратите внимание, что многие этапы методики вам, возможно, придется проходить несколько раз, если вы что-то забыли в процессе выполнения моделирования. Но один очень важный аспект - это экспериментальный дизайн.

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

Цель нашего эксперимента - определить, где наша система работает вне заявленных требований (неприемлемое отклонение), и попытаться улучшить ее. Поэтому первым шагом является определение наших метрик (измеряемых значений). Meta Trader делает многие из важных показателей за нас: просадка, коэффициент прибыли, процент удачных сделок. Нас могут интересовать другие функции системы, кроме этих, например, разница между сигналами входа и тем местом, где он должен был войти. Эти более сложные метрики, возможно, придется программировать вручную.

После определения показателей, которые важно получить в результате симуляции/бэктеста, необходимо решить, как вы будете проводить эксперимент. Поскольку рыночные данные являются стохастическими, одного прогона (однократного тестирования системы на одном наборе рыночных данных) недостаточно, чтобы дать нам уверенность в эффективности системы. Статистика рекомендует провести несколько тысяч прогонов, но, к сожалению, у нас нет столько данных и времени. Количество прогонов зависит от дисперсии, обнаруженной в данных. Имеется в виду не дисперсия в рыночных данных, а дисперсия в работе вашей торговой системы. Все в трейдинге заключается в понимании дисперсии и ее контроле. В этом случае лучше всего провести независимые прогоны (разные наборы данных/рынки), возможно, 15-30 прогонов, в течение достаточно длительных периодов времени, чтобы представить все виды рынков, а именно бычий, медвежий и нетрендовый. Нетрендовые рынки могут быть наиболее важными для Форекс, чтобы увидеть, как трендовая торговая система справится с рынком, торгующим в диапазоне, но это зависит от вашей системы.

На основе этой информации вы можете разработать доверительный интервал для своих результатов. Доверительный интервал - это диапазон показателей, в который с определенной степенью уверенности попадает ваша метрика. Так, на основе тестирования 30 наборов данных вы можете сказать, что вы на 90% уверены, что заработаете от 100 000 до 200 000 долларов. Это зависит от того, насколько репрезентативными были рыночные данные, которые вы использовали в моделировании, для различных рыночных условий, предпочтительно, чтобы они были представлены как можно чаще. Если новый случай не возникнет ни разу, то нет никаких причин, что ваши результаты будут похожи на доверительный интервал. Вычислить доверительный интервал просто: используйте x(среднее)+-(значение t студента для альфа/2)*(s/sqrt(n)). Где значение t студента можно найти в таблице, n - размер выборки, s - стандартное отклонение, а alpha - уровень доверия, вероятно, .9 для 90%. Среднее значение - это среднее значение ваших результатов для рассматриваемой метрики, вероятно, прибыли.

Если вы сравниваете две разные системы, почитайте о проверке гипотез, возможно, вы используете тест ANOVA.

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

 

Расширение данныхбэктестинга

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

Я устал, поэтому, если что-то не понятно, извините, HA.

Данные очень важны и должны обладать несколькими характеристиками, чтобы быть оцененными должным образом. Данные должны быть достаточно длинными, представлять условия, в которых вы будете работать, точными и достоверными.

В расширенном виде это означает, что данные должны представлять различные рыночные условия несколько раз, если это возможно. Быки, медведи, высокая волатильность, низкая волатильность, серьезные ценовые шоки, диапазонные рынки, нетрендовые рынки, все остальное, что вы можете придумать, потому что вы, скорее всего, столкнетесь с этим в какой-то момент, и вы хотите, чтобы ваша система была способна справиться с этим. Одна из ошибок многих людей при бэктестинге заключается в том, что они делают один прогон, запускают оптимизатор и думают, что нашли святой Грааль торговых систем. ВСЕГДА ПОМНИТЕ, что если ваши результаты действительно хороши или действительно плохи, как вопросы, то, вероятно, что-то не так с вашими данными, программированием, или вы слишком подогнали кривую. Переподгонка - это процесс оптимизации вашей системы для работы с предыдущими данными очень хорошо. К сожалению, вы можете никогда больше не увидеть таких рыночных условий, и ваша система настолько оптимизирована, что очень чувствительна к новым рыночным условиям и быстро разрушится. Для того чтобы система была репрезентативной, она должна работать несколько лет, а если есть возможность - несколько десятилетий, и не должна включаться, если на рынке произошли серьезные изменения, например, рынки объединились. Я не согласен с некоторыми и считаю, что рыночные данные - это рыночные данные, если они хороши для обратного тестирования, если они представляют какое-то состояние, так что используйте свое собственное суждение.

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

В конечном итоге данные должны быть независимыми, что может быть проблемой на рынке Форекс, где все долларовые пары сильно коррелируют, то есть движутся одинаково. Это часто нарушается даже в пределах одного рынка с помощью автокорреляции, то есть следующий фрагмент данных коррелирует или зависит от предыдущего. Вторые наблюдения должны быть одинаково распределены в течение всего процесса. Опять же, распределения финансовых рынков постоянно меняются, но основная форма, вероятно, достаточно близка для работы. В конечном итоге они должны быть нормально распределены. Это ВСЕГДА нарушается, поскольку цены имеют тенденцию оставаться на более низких уровнях, а распределения цен и распределения движения цен перекошены влево и имеют более толстый хвост справа, что вполне ожидаемо. Хотя это и позволяет нам делать деньги, это нарушает основное предположение моделирования. Существуют методы исправления этого в анализе, например, преобразование логарифмов, но с центральной предельной теоремой обычно проще экспериментировать. Это означает, что если вы проведете 15 прогонов, где значение каждого прогона будет средним значением 15 других прогонов, это будет иметь более нормальное распределение и будет более реалистичным доверительным интервалом. Если это не имело смысла, просто проигнорируйте это, но помните, что нет никакой корреляции между результатами бэктестинга и физической системой, с которой вы торгуете, это просто инструмент, и инструмент хороший, но его нужно понимать и использовать правильно.

Многие другие темы должны быть рассмотрены и могут быть рассмотрены позже, такие как,

процедура бэктестинга

оптимизация

статистика

вероятность

преобразование

практические соображения

распределения и их понимание

случайные потоки и синтетические данные

проверка гипотез

оптимизация монте-карло/быстрее, чем метатрейдеры

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

 

Отличное объяснение.

Спасибо Cro2314

 

Небольшой вопрос о различных системах бэктестинга...

Является ли программное обеспечение Tradestations лучшим для бэктестинга, чем программное обеспечение Metatrader?

Есть ли у кого-нибудь опыт работы с ними?

Пока я пришел к выводу, что бэктесты Tradestations кажутся более продвинутыми, чем Metatrader, но с другой стороны, Metatrader бесплатен, а Tradestation стоит $$$...

Любые отзывы о различиях между ними были бы хороши.

 

Я знаю только несколько

edit***May 27. Важно отметить, что бэктестинг - это практика моделирования, а не симулятор. Один симулятор, который, кажется, хорошо работает, указан на этом сайте как Forex tester. Его можно использовать как бэктестер, но пока не с советниками. Симуляция/бэктестинг на самом деле предназначены для получения статистических данных о работе вашей торговой системы, чтобы вы могли проанализировать слабые места. В конечном счете, вы пытаетесь уменьшить дисперсию в наклоне кривой вашего капитала с течением времени. Интересно, не поэтому ли людям не нравится бэктестер метатрейдера? Может быть, они ищут симулятор. Но если вам нужна визуальная производительность, просто откройте график после запуска тестера стратегий, и вы увидите, как именно торгует советник. Очень полезно для проверки системы.***

На самом деле у меня мало опыта работы с бэктестером Tradestations. Тем не менее, я признаю пару преимуществ. Tradestation может совершать внутридневные (тиковые) покупки, а не использовать цену закрытия в тестере стратегий (это произошло в новой версии), в то время как metatrader использует цену закрытия. В зависимости от вашей стратегии это может иметь значительные последствия в вашей системе, если вы торгуете очень быстро и пытаетесь поймать двух- или трехбарные движения, которые появляются время от времени. Но это противоречит и многим фундаментальным стратегиям, в которых принято ждать цены закрытия. Другое различие, конечно, заключается в языке, который вы можете использовать для программирования, и некоторые общие задачи, такие как суммирование переменных, кажутся более простыми в Tradestation. Finnaly Я слышал, что в metatrader есть некоторые ограничения памяти, которые не ограничены в tradestation, но я с этим не сталкивался. Я не знаю, какие ограничения есть на системные переменные, например, те, которые не позволяют советнику загружать свои индикаторы на экран, как в metatrader. Кроме того, похоже, что предварительно написанная статистика, которую вы получаете от tradestation, более надежна в результатах бэктестов. TradeStation, конечно, имеет некоторые преимущества, но помните, что бэктестер должен реагировать так же, как и программное обеспечение, если вы просто запускаете полностью автоматизированную систему. В этом случае я рекомендую проводить бэктесты на том же программном обеспечении, которое вы используете для автоматической торговли, иначе вы можете быть удивлены.

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

Кстати, спасибо вам, Феликс, за ваш комплимент, он был очень ценен.

 

Мой бэктестер работает очень медленно... помогите

Иногда он работает быстро, а иногда слишком медленно. Я не знаю почему. Я нашел файл размером 1,5 ГБ в журналах и удалил его, но он все равно работает медленно. Есть ли лучший способ бэктестирования программ? Я использую Metatrader и часто качество моделирования составляет всего 20%.