Бэктестинг и форвард-тестирование — методы, доказательства и ловушки
Тестирование стратегии — проверка поведения её правил на данных и зависимости результата от допущений. Бэктест использует историю; перспективный форвард-тест записывает решения по мере появления новых данных. Обоим нужны ясная спецификация, реалистичный учёт издержек и честное описание выборки. Урок даёт карточку теста из двенадцати полей, примеры хронологической проверки, исполнимые расчётные инструменты и процедуру сопоставления исторических симуляций с последующими наблюдениями. Цель — отличать подтверждённое данными от неопределённого, а не превращать удачный график в обещание будущей доходности.

Исходная иллюстрация сохранена. Демо использует имитацию исполнения; фактическое реальное исполнение оценивается на микросчёте. Письменная методика ниже объясняет допущения и ограничения показанной последовательности.
- Исторические и перспективные тесты могут вносить вклад в доказательства. Ни один автоматически не доказывает устойчивого преимущества, а исполнение на демо не является реальным.
- До просмотра оценочного результата зафиксируйте вопрос, версию, разделение данных, модель исполнения и критерии оценки. Ведите журнал всех исследовательских испытаний.
- Доступность сигнала и время исполнения различаются. Стороны bid/ask, неоднозначные пути внутри бара, частичное исполнение, гэпы и сборы могут изменить вывод.
- Число наблюдений само по себе — не проходной балл. Сообщайте разброс результатов, зависимость, охват и неопределённость; интервалы доли выигрышей не оценивают ожидание.
- Бутстрэп создаёт альтернативные выборки при допущениях, а не новые рыночные наблюдения. Процентиль симулированной просадки — не гарантия максимального убытка.
- «Не запускать» и «неопределённо» — допустимые исходы. Список проверок или календарная длительность никогда не требуют перехода к реальной торговле.
Записывайте гипотезу, правила, выборку и результаты в Набор инструментов N: протокол тестирования стратегии. Форма дополняет методику главы локальным сохранением, экспортом и печатью.
1. Бэктестинг и форвард-тестирование — разные вопросы, разные ответы
Хороший бэктест не означает готовности стратегии к торговле. Историческое тестирование изучает прошлое при заданной модели. Перспективное наблюдает решения по мере поступления новых данных. Этапы дают разную информацию: бэктест может предоставить более длинную выборку результатов, а форвард-наблюдение — выявить проблемы времени, реализации и соблюдения правил. Только должным образом контролируемый реальный этап измеряет фактические исполнения и сборы; демо остаётся симуляцией. Подмена одного этапа другим отбрасывает информацию, которую должен был дать пропущенный этап.
Бэктест: исторический вопрос
Бэктест спрашивает: «Как вели бы себя эти правила, например, за предыдущие три–десять лет?» Полезность ответа определяется качеством данных, модели исполнения и издержек и обоснованностью исследовательского дизайна. Он ретроспективен:
- Он может быть быстрым. Пять лет данных в простом тесте могут занять минуты, хотя подробное тиковое моделирование и большой поиск параметров требуют гораздо больше времени.
- Он может давать сотни или тысячи наблюдений в зависимости от частоты сигналов и исторического периода.
- Он позволяет сравнивать варианты параметров. Эта гибкость — также важный источник смещения отбора и переобучения.
- Он чувствителен к ошибочным тикам, пропускам свечей, неверным временным меткам и нереалистичным издержкам. Большая выборка не исправляет систематическую ошибку данных или модели.
Бэктест не доказывает, что стратегия работает сейчас. Режим, представленный в 2018–2022, не обязан сохраняться в 2024–2026. Так же результаты конкретного исторического тренда иены нельзя просто переносить в иную среду денежной политики или интервенций. Эти примеры иллюстрируют изменение условий, а не утверждают обязательный успех или провал названной стратегии в конкретный период. Документируйте охват режимов вместо признания диапазона дат достаточным доказательством.
Форвард-тест: перспективный вопрос
Перспективный тест спрашивает: «Как ведут себя зафиксированные правила по мере поступления новых наблюдений и соответствует ли реализация задуманному процессу?» Он идёт вперёд в реальном времени:
- Он требует времени. При пяти сделках в неделю 100 сделок занимают около 20 недель, примерно пять месяцев, ещё до учёта праздников и пропущенных возможностей.
- Выборка может оставаться малой. Пилот из 30–80 сделок — пример ограниченных доказательств, а не проверенное описание практики каждого розничного трейдера.
- Будущие наблюдения недоступны в момент настоящего решения в реальном времени. Это устраняет один путь заглядывания вперёд, но позднее переименование, пересмотренные данные или ретроспективные правки всё ещё способны загрязнить записанную оценку.
- Он может выявить изменения спреда, задержку, отклонённые запросы и проскальзывание. Доказательства зависят от режима: реальные записи измеряют реальное исполнение, а демо и бумажная торговля не воспроизводят его полностью.
- Он выявляет человеческие ошибки реализации: неверные объёмы, запоздалые решения, пропущенные сигналы и дискреционное вмешательство в открытую позицию.
Короткий форвард-тест не разрешает утверждение о долгосрочном преимуществе. Он особенно полезен для выявления разрыва между историческими допущениями и текущей реализацией. Долгосрочный вывод всё равно зависит от размера выборки, зависимости, охвата режимов и неопределённости, а не от названия «форвард».
Три режима тестирования: ручной просмотр, воспроизведение и автоматизация
«Бэктестинг» может означать три разных вида деятельности. Разделите их перед сравнением доказательств:
- Ручной просмотр графиков. Вы прокручиваете историю и записываете решения. Это помогает находить неясные правила и граничные случаи. Обычный просмотр с видимыми последующими свечами уязвим для знания задним числом, выборочного темпа и памяти о результате; его нельзя выдавать за несмещённую выборку результативности. Тщательно разработанный слепой ручной протокол — другое и более требовательное упражнение.
- Побарное воспроизведение. Инструмент последовательно открывает историю, скрывая поздние наблюдения. Примеры — воспроизведение графика, визуальные режимы тестера и специальные приложения с учётом их фактических данных и временного поведения. При контролируемом темпе воспроизведение может проверять согласованность дискреционной классификации и время реакции. Оно всё равно не устанавливает реальные издержки исполнения. Перемотка после просмотра результата с заменой исходного решения загрязняет прогон; исследовательское воспроизведение записывайте отдельно.
- Автоматизированное историческое тестирование. Код применяет правила к набору данных. Это эффективный путь к большим воспроизводимым выборкам, но он вводит все опасности раздела 2: утечку информации, допущения исполнения, издержки и повторный отбор. Ошибочное правило автоматизация тоже воспроизводит очень последовательно.
Последовательность важна. Воспроизведение до программирования может выявить инструкции, которые два человека толкуют по-разному. Тестер не восполнит определение: он реализует выбранную программистом трактовку. Зафиксируйте спецификацию и версию стратегии до её оценки, как описано в статье 15.3, а не после просмотра результата.
Что каждый этап может и не может выявить
| Проблема | Исторический тест | Перспективный тест |
|---|---|---|
| Заглядывание вперёд: использование будущей информации в решении | Отчёт о прибыли не диагностирует собственную утечку. Её могут выявить просмотр кода, проверки временных меток и контролируемое воспроизведение. | Записи реального времени могут выявить расхождение с поздней исторической реконструкцией. Сохраняйте исходные значения и решения. |
| Подгонка кривой параметров | Его могут исследовать нетронутая оценка, walk-forward и полный реестр испытаний; ни одно не является автоматическим лекарством. | Может выявить ухудшение после достаточного числа наблюдений или смены режима. Короткий удачный пилот всё ещё может оказаться везением. |
| Недостаточно смоделированные издержки исполнения | Лишь в той мере, в какой их представляют входные данные и модель исполнения. | Фактические реальные издержки можно измерить прямо. Демо и бумажные издержки остаются неполными заменителями. |
| Смена режима после исторического периода | Не может наблюдать будущие условия, отсутствующие в данных. | Наблюдает текущую среду, но её обнаружение не устанавливает автоматически продолжительность. |
| Трейдер не способен следовать правилам | Механический тест обычно предполагает соблюдение запрограммированных инструкций; ручные протоколы могут выявить некоторые проблемы удобства применения. | Решения с временными метками выявляют пропуски сигналов, отклонения и вмешательство фактического оператора. |
| Точность оценки преимущества стратегии | Более длинная выборка может сузить неопределённость при правильном учёте качества, зависимости и отбора. | Короткого форвард-пилота часто недостаточно: 5 сделок в неделю дают около 130 наблюдений за полгода (26 × 5), с широким интервалом при таком размере выборки. Точность зависит и от распределения результатов. |
| Долгосрочная просадка (3+ года, несколько циклов) | Несколько лет могут охватить больше исторических условий, но 5 лет не гарантируют нескольких независимых рыночных циклов или наихудшего возможного пути убытков. | Короткий форвард-пилот обычно охватывает лишь 1 рыночный цикл или фактически наблюдавшиеся условия; более длинная перспективная история со временем может добавить более широкие доказательства. |
Историческая работа даёт контекст и глубину выборки; перспективная проверяет, выдерживает ли процесс новые данные и задуманную рабочую среду. Быстрый бэктест и 90-дневное наблюдение создают очень разные издержки ожидания, но время не оправдывает пропуск последнего. Ни десятиминутный расчёт, ни трёхмесячный пилот не гарантируют сбора необходимых доказательств.
Сверка исторических и перспективных сигналов
Особенно полезна диагностика сравнением сигнал за сигналом за одни и те же даты. Экспортируйте оба источника в общую схему, например:
timestamp_utc, broker_server_time, pair, setup_id, direction, entry_rule_hash,
entry_price, sl_price, tp_price, trigger_bar_close, source
Сохраните достаточно дополнительных полей для различения времени сигнала, фактической доступности информации, запросов ордеров и исполнения. После первых 30–60 дней наблюдения запустите зафиксированную историческую реализацию на архиве данных тех же дней. Сравните два перечня. Иллюстративный порог расхождения 5–10% может запустить расследование, но и меньшие различия важны, если систематически благоприятствуют бэктесту. До отчёта о проценте определите знаменатель и предмет сопоставления: сигналы, запросы или исполнения.
Возможные причины — утечка будущей информации, перерисовка, разные потоки, ошибки часовых поясов, несогласованный код и неудачные реальные запросы. Пятьдесят исторических сигналов против двенадцати перспективных за те же даты — существенное неразрешённое расхождение; не продолжайте до объяснения. Чтение Close[0] внутри бара не автоматически ошибка: ошибка — считать его позднейшее окончательное значение известным в более ранний момент решения.
timestamp_utc и broker_server_time вместе с правилом смещения сервера для конкретной даты. Некоторые поставщики MT4/MT5 используют часы сервера UTC+2 или UTC+3, связанные с закрытием Нью-Йорка, но это не универсально. Сравнение ненормализованных записей может создать видимость заглядывания вперёд, хотя системы использовали разные бары. Правильно преобразуйте метки, затем сравнивайте. Считайте также пропущенные бары и повторные временные метки, отличая нормальные закрытия рынка от пробелов потока. Одинаковые метки тиков могут представлять разные обновления котировок, поэтому не удаляйте каждый одновременный тик без проверки его идентичности и последовательности.Карточка теста: двенадцать полей до толкования результата
Без карточки результат может оказаться невоспроизводимым через шесть месяцев. Нужно знать породившие его данные, реализацию, модель издержек и историю отбора. Заполните первые девять полей до запуска оценки. Остальная статья объясняет, почему каждое поле способно изменить вывод.
| Поле | Что записывать | Иллюстративная запись: синтетические данные |
|---|---|---|
| 1. Вопрос | Одно предложение о предмете исследования теста. | «Есть ли у пробоя диапазона EUR/USD до Лондона положительное ожидание после издержек?» |
| 2. Версия стратегии и кода | Идентификатор версии и хеш зафиксированных спецификации и реализации. | lonbreak v1.3, иллюстративный префикс хеша a91f…, зафиксировано до первого прогона OOS. |
| 3. Данные и период | Поставщик, инструмент, разрешение, bid/ask/mid, часовой пояс, охват и очистка. | Тики bid/ask EUR/USD Dukascopy, UTC, 2018-01 → 2024-12; подтверждённые дубликаты удалены, отдельные обновления с общей временной меткой сохранены; документированы 4 пропущенных дня и 11 пробелов длиннее 30 минут. |
| 4. Разделение | Хронологические границы IS, валидации и OOS; укажите, означает ли «форвард» историческую отложенную выборку или поступающие данные. | IS 2018-01 → 2021-12; валидация 2022-01 → 2023-06; нетронутая OOS 2023-07 → 2024-12. Перспективное наблюдение начинается 2026-05-04. |
| 5. Модель исполнения | Доступность сигнала, исполнение, задержка, частичные исполнения, гэпы и обработка неоднозначных баров. | Сигнал по закрытию M15; длинное исполнение по ask после моделируемой задержки 300 мс, короткое по bid; неразрешимый бар стопа/цели считается со стопом первым; при гэпе берётся следующая доступная исполнимая цена. Этот пример карточки теста отделён от кандидата предыдущей статьи. |
| 6. Издержки | Спред, проскальзывание, комиссия и финансирование с явной проверкой двойного учёта. | Спред из тиков bid/ask; иллюстративное неблагоприятное проскальзывание 0,1 × M5 ATR(14) на входе и выходе; комиссия за полный оборот, эквивалентная 0,6 пипса; финансирование по соответствующему расписанию поставщика. Спред, включённый в исполнение, повторно не вычитается. |
| 7. Варианты и испытания | Все испытанные сочетания параметров и версии правил, включая отброшенные. | 96 сочетаний параметров плюс 4 дополнительных самостоятельных эксперимента выхода = 100 испытаний. Полное произведение 96 × 4 означало бы 384 испытания. Записывайте каждое в 02_IS/trial_log.csv. |
| 8. Метрики | Определения, знаменатели и соглашения выборки. | Ожидание в R с R₀, фиксированным как плановый денежный риск до входа; профит-фактор; просадка от текущего пика капитала; число сделок и оценки неопределённости. |
| 9. Заранее заданные критерии решения | Положительные, отрицательные и неопределённые исходы, записанные до теста. | Продолжайте исследование, если нижняя 95% граница ожидания OOS выше нуля; вернитесь к проектированию, если верхняя граница ниже нуля; иначе признайте результат неопределённым. «Продолжать» не означает автоматического разрешения на реальную торговлю. |
| 10. Результаты | Оценки с интервалами, а не только точечные значения. | OOS n = 214, ожидание +0,12R, иллюстративный 95% интервал (−0,07R, +0,31R): он включает ноль. |
| 11. Ограничения | Чего тест не измеряет и что может его загрязнить. | Один поставщик и пара; нет глубины стакана; не наблюдался кризис ликвидности; 100 поисковых испытаний без заданной поправки на множественное тестирование. Укажите влияние отбора и целостности отложенной выборки на выводы. |
| 12. Файлы воспроизведения | Пути и полные хеши необходимых входов, кода и выходов. | 01_data/eurusd_2018_2024.csv (sha256), lonbreak_v1_3.mq5, costs.json, trial_log.csv и блокнот бутстрэпа. Сокращённый хеш выше — лишь пример отображения. |
Поле 9 легко пропустить. Критерий, записанный после результата, — ретроспективное описание, а не заранее заданное правило решения. Поле 7 не менее важно: без общего числа испытаний видимый победитель может быть просто максимумом многих поисков. В поле 11 должны быть явны нерешённые ограничения. Если существенный вход в раннем поле неизвестен, не выдумывайте его: отметьте как нерешённый и отложите тест либо соответственно ограничьте толкование.
2. Ловушки тестирования — заглядывание вперёд, ошибка выжившего, подгонка и переобучение
Это методологические опасности, а не просто признаки небрежности исследователя. Платформа или собственный скрипт могут выдавать убедительный отчёт при серьёзной ошибке конфигурации или реализации. Когнитивные проблемы, такие как предвзятость подтверждения и знание задним числом, рассматриваются в разделе психологии торговли. Здесь внимание уделяется техническому дизайну теста и проверкам для выявления слабостей.
Ловушка 1: заглядывание вперёд
Заглядывание вперёд возникает, когда решение использует информацию, доступную лишь позднее. Типичные пути:
- Внутрибараное решение по будущему окончательному закрытию. Стратегия рассчитывает SMA(20) с текущей свечой M5 и заявляет вход при её закрытии выше средней. На секунде 240 пятиминутной свечи окончательное закрытие ещё неизвестно. Чтение текущего
Close[0]само по себе не является утечкой будущего; утечка — трактовка позднейшего окончательного закрытия как значения, доступного на секунде 240. Проверяйте фактические ответы режима тестера и кода при каждом обратном вызове, а не предполагайте, что режим «Только цены открытия» поддерживает нужное внутрибараное правило. - Историческая метка, подтверждённая позднее. ZigZag, инструменты точек разворота, фракталы, вручную выбранные опоры вил и некоторые собственные каналы могут помечать ранний бар по информации, поступившей позже. Свинговый максимум, нарисованный сегодня десять баров назад, мог не быть подтверждён на том баре. Точное поведение устанавливают реализация и время подтверждения, а не название индикатора.
- Макроданные, привязанные к отчётному периоду вместо времени публикации. Значение с меткой «CPI за март» могут опубликовать только в апреле. Использующая его до фактической публикации стратегия берёт недоступную информацию. Проверяйте календарь выпускающей организации, соглашение меток поставщика и доступную тогда версию данных. Поздние пересмотры — ещё один источник утечки.
Выявление: наблюдайте зафиксированную стратегию на новых данных, затем сверяйте исходные сигналы с исторической реконструкцией тех же дат. Расхождение — проблема для диагностики, а не самостоятельное доказательство заглядывания вперёд. Другие объяснения: иной поток, перерисовка, неверный пересчёт времени и неудачные реальные запросы. Сначала согласуйте время и данные; отделите сигналы от запросов и исполнения; затем изучайте поток информации стратегии. Переписывание правильного индикатора до проверки входных баров может создать новую проблему, не объяснив старую.
Реализации, требующие явной проверки времени доступности информации:
- ZigZag, фракталы и построения вил. Определите момент, когда разворот или опора становятся известны, и может ли ранняя отображённая точка двигаться. Корректно задержанный подтверждённый сигнал отличается от притворства, что разворот был известен в своём начале.
- Heikin-Ashi, SuperTrend, скользящие средние Hull и собственные каналы. Ни один не является мошенническим по своей природе. Проверяйте конкретную реализацию на изменения сигналов завершённых баров. Синтетические цены свечей Heikin-Ashi тоже требуют отдельного учёта: они не автоматически исполнимые рыночные цены.
- Индикаторы маркетплейса с закрытым кодом. Их внутреннюю логику нельзя просмотреть. При политике проверки на уровне исходников отклоните их для этого исследовательского процесса. Временные тесты чёрного ящика способны выявлять дефекты, но не устанавливают все внутренние зависимости.
iCustom()Чтение буферов. Определите буфер, сдвиг бара, обработку недоступных значений и пересчитываются ли исторические значения буфера.- Внутрибараные
Close[0]решения в MT4. Текущее значение — меняющаяся цена текущего бара, а не окончательное закрытие. Тест должен воспроизводить ту же последовательность информации, что и реальное правило. - Данные старшего таймфрейма на младшем графике. Значение H4, используемое решением M15 до закрытия этого H4, предварительное. В Pine поведение
request.security()зависит от смещений выражения, настроек lookahead и исторического либо реального вычисления. Используйте документированный шаблон подтверждённого старшего таймфрейма, если это задумано правилом; не считайте, что добавление[1]в любом месте решает все временные проблемы. Проверьте также соответствующую реализацию MQL. - Макроряды, датированные отчётным периодом. Соединяйте по фактической доступности информации и версии данных, а не первому дню описываемого месяца.
Практическая проверка на перерисовку: на реальном потоке запишите значение индикатора для определённого завершённого бара, сейчас на десять баров назад. После пяти новых баров проверьте ту же метку времени, теперь на пятнадцать баров назад. Пять новых M1 занимают около пяти минут, пять H1 — около пяти часов без учёта межсессионных перерывов. Если значение меняется, исторический вид не обязательно воспроизводит исходный сигнал. Запишите момент доступности каждого подтверждения.
Отсутствие изменения на одном баре не удостоверяет отсутствие перерисовки. Повторяйте на многих барах, граничных случаях и режимах волатильности; где нужно, включайте изменения после переподключения или обновления истории. Это протокол наблюдения, а не утверждение о проверке любой реализации за минуты. Сохраняйте записи для воспроизводимости сравнения.
Close[0] как с доступным внутри бара. Проблема в коде и времени, а не самой концепции Heikin-Ashi. Сверка выявляет различия выше 50% по правилу сопоставления примера и блокирует дальнейшее продвижение. Двенадцати сделок мало для точной оценки преимущества, но прямо воспроизводимое несоответствие правил можно выявить на немногих случаях. Малая или зависимая выборка: ограничивайте вывод о результативности, а не расследование продемонстрированного дефекта реализации.Ловушка 2: ошибка выжившего
Допустим, исследователь тестирует ранний период по сегодняшнему списку валютных пар. Отбор может исключить инструменты, торговавшиеся тогда, но позднее исчезнувшие или недоступные. Важна и обратная проблема реализации: привлекательные исторические результаты могут сильно зависеть от инструмента, которого нужный поставщик больше не предлагает на сопоставимых условиях. USD/RUB во время изменений после 2022 показывает необходимость проверки доступности, санкционных ограничений, ликвидности и исполнения для конкретных даты и поставщика, а не универсальное утверждение о доступе сегодня.
Отбор маркетплейса создаёт сходную проблему. Видимый сегодня EA с пятью звёздами и 200 положительными отзывами выбран из всё ещё размещённых и замеченных продуктов. Провальные, снятые или непопулярные могут отсутствовать в сравнении. Рейтинги сами по себе не определяют полную стартовую когорту и не устанавливают ни вероятность выживания, ни изначально одинаковые шансы каждого EA на успех.
Выявление: Восстановите множество инструментов на историческую дату решения. Тест 2018–2020 должен установить предложения соответствующего поставщика в 2018, включая позднее выведенные инструменты. Ограничение истории сегодняшними выжившими использует будущее на уровне выбора множества. Текущая осуществимость — отдельное ограничение: запишите оставшиеся доступными у нужного юридического лица инструменты и долю исторического результата от уже непригодных. Для продуктов маркетплейса сохраняйте даты публикации, историю версий и сведения о сравниваемой когорте вместо толкования нынешнего рейтинга как неотобранной выборки.
Ловушка 3: подгонка кривой
Рассмотрим периоды SMA 20, 22, 25 и 30; RSI 11, 14 и 17; порог ATR от 0,8 до 1,5 с шагом 0,1. Это 4 × 3 × 8 = 96 сочетаний. Поиск множества альтернатив повышает шанс найти привлекательный результат даже без устойчивого преимущества. Выдающийся вариант не гарантирован, но выбранный максимум — не обычное единичное заранее заданное наблюдение.
В синтетическом примере лучшее сочетание — SMA-22, RSI-14 и ATR 1,1 с +180% за три исторических года. Следующие 60 дней дают −8%. Контраст может соответствовать подгонке исторического шума, но пара доходностей сама не доказывает диагноз: надо проверить издержки, реализацию, режим и выборку. Несомненно, исторический победитель выбран из 96 испытаний, и отчёт должен раскрывать процесс.
Выявление: изучите тепловую карту параметров. Отдельная благоприятная ячейка среди плохих результатов указывает на чувствительность, требующую исследования. Широкое плато говорит лишь о независимости результата от одной настройки. Плато не доказывает положительного ожидания. Оно всё ещё может быть артефактом тех же чрезмерно использованных данных либо отражать параметры, малые изменения которых не меняют набор сделок.
Независимая оценка всё ещё нужна: действительно нетронутый период OOS, заранее заданная процедура walk-forward и сравнение с базовой моделью раздела 3. Сообщайте число сделок, неопределённость и всю историю отбора, а не только гладкую карту или выгодное среднее. OOS, к которой многократно обращались при изменении метода, уже не нетронутая.
Ловушка 4: переобучение правил
Подгонка параметров — одна форма переобучения. Другая — добавление правил для исключения конкретных исторических убытков. «Нет входов после 13:00 Europe/London по вторникам» могли ввести лишь из-за двух убыточных сделок в этом интервале; это соответствует польскому примеру с границей 14:00 при обычной разнице времени Великобритании и Польши. Исключение сделок улучшает выборку по построению, а не обязательно саму стратегию.
Не представляйте фильтр пятницы проверенным лишь из-за трёх прошлых пятничных убытков. Фильтр, предложенный после просмотра убытков, — новая исследовательская гипотеза. Её можно изучать на данных разработки, но до названия «улучшение» нужны основание, запись испытания и независимая оценка. Зафиксируйте её до оценки в поддержку утверждения.
В статье предлагается консервативное рабочее предупреждение для более четырёх оптимизированных параметров на менее 200 сделках и обсуждается грубая эвристика оптимизированные параметры × 30 ≤ число сделок: четыре параметра означают 120 сделок, восемь — 240. Это иллюстративные эвристики аудита, не статистические теоремы или рыночные стандарты. Модель ниже линии предупреждения всё равно может быть переобучена, а выше неё не опровергается одним отношением.
Исследуйте чувствительность, число вариантов, зависимость и независимую результативность. При общих наблюдениях оценивайте различия подходящим парным методом или ресэмплингом вместо предположения, что перекрывающиеся отдельные интервалы решают сравнение. Хорошая OOS или устойчивая карта — доказательства для оценки, а не универсальное подтверждение устранения переобучения.
Ловушка 5: недостаточное моделирование издержек
Тест MT4 с фиксированным спредом 1 пипс применяет упрощённую стоимость независимо от исторической ликвидности. Проверьте настройки и возможности установленного тестера, не предполагая одинаковых значений по умолчанию у каждой платформы или сборки. Реальные спреды могут сильно различаться на ликвидных пересечениях сессий, ролловере и важных публикациях. Доли пипса, несколько пипсов и краткие двузначные спреды — масштабы сценариев для проверки на нужном потоке, а не текущие котировки поставщика или гарантированные границы. Стратегия в ночном окне низкой ликвидности может выглядеть прибыльной при фиксированном спреде и провалиться при подходящем переменном.
Второй компонент — проскальзывание. Точное историческое исполнение — допущение, а не обещание реального. Пример показывает 0,2–0,5 пипса в обычных условиях, 1–3 на пробоях и 5–15 после публикаций. Эти диапазоны нельзя считать измеренным распределением вашего счёта. Валовая оценка +0,3R может упасть до +0,1R при дополнительных издержках реализации 0,2R; фактическое снижение зависит от исходного расстояния риска, типа ордера и измеренных исполнений.
Третий компонент — финансирование. Свинг-стратегия с удержанием три–восемь дней может получать списания или начисления ролловера в зависимости от инструмента, направления и поставщика. Не предполагайте постоянный знак для длинного EUR/USD. В иллюстративном расчёте ночной сбор 3 пипса при исходном расстоянии стопа 20 пипсов равен 0,15R за день начисления. Пять однодневных сборов дают 0,75R, превышая оценку +0,4R до финансирования. При стопе 60 пипсов тот же сбор равен 0,05R в день. Используйте реальные дневные множители с нужными поправками выходных и праздников, а не приравнивайте пять календарных ночей к пяти одинаковым сборам. Пересчёт: издержки финансирования в R = финансирование в пипсовом эквиваленте / исходное расстояние стопа в пипсах, с согласованным учётом размера позиции и валютного пересчёта.
Четвёртый компонент — комиссия. Некоторые счета с сырым спредом взимают отдельную плату по объёму; метка «ECN» не определяет обязательный тип счёта или тариф. При иллюстративных USD 6 за полный оборот стандартного лота 200 сделок по 0,1 лота стоят 200 × 0,1 × 6 = USD 120. Это 12% начального баланса USD 1 000 ещё до ценовых результатов. Диапазон USD 5–7 — пример, а не текущий обзор тарифов. Скальпинговый тест, пропускающий существенный сбор за оборот, не подтверждает нужное утверждение о чистой результативности.
Ловушка 6: многократное выискивание в данных
Исследователь пробует 30 стратегий, отбрасывает 28 и публикует два привлекательных бэктеста. Отдельные расчёты могут быть верны, но отбор делает видимую значимость обманчивой. При 30 независимых тестах нулевой гипотезы с порогом 5% ожидается 1,5 ложноположительных результата, а шанс хотя бы одного около 78,5%. Это не означает обязательного успеха ровно двух или трёх и не даёт почти нулевой вероятности работоспособности опубликованных стратегий. Это означает включение в вывод всего поиска, а не только выживших.
Один из обычных способов контроля ошибки семейства — поправка Бонферрони: для 30 тестов при общем уровне 0,05 порог на тест равен 0.05 / 30 ≈ 0.00167.[2] Она может быть консервативна, особенно при связанных тестах. Другие подходы решают иные задачи, включая контроль доли ложных открытий и дефлированный коэффициент Шарпа.[3] Они не взаимозаменяемые переключатели: нужны их допущения и входные данные отбора. Скрытие неудачных испытаний в любом случае мешает содержательной оценке.
Выявление: ведите реестр каждой проверенной стратегии и варианта, включая отвергнутые результаты. Два победителя из 30 поисковых кандидатов требуют иного толкования, чем две действительно заранее заданные оценки. Поэтому поле 7 карточки обязательно.
Разбор ошибки: стоп и цель внутри одной свечи
Эта неоднозначность исполнения может заметно завысить бэктест, выглядя обычным результатом сделки. Важность зависит от частоты попадания выходов стратегии в один записанный бар.
Неверная запись: У свечи H1 открытие 1,0850, максимум 1,0885, минимум 1,0815, закрытие 1,0870. Предполагается уже исполненная длинная позиция по 1,0850 со стопом 1,0820 и целью 1,0880, каждый в 30 пипсах. Оба уровня внутри диапазона свечи. Собственный тест, первым проверяющий цель, записывает +1R, хотя OHLC не показывают, какой уровень достигнут первым. Это конкретный пример оптимистичной реализации, а не утверждение о цели первой по умолчанию в каждом тестере.
Исправленная модель исполнения: Одни OHLC не восстанавливают полную внутрибараную последовательность. Укажите обработку неоднозначности:
- Консервативный вариант считает свечу с касанием обоих выходов выходом по стопу. В поле 5 карточки пометьте это как пессимистичное, а не доказанно реалистичное допущение.
- Изучайте младшие таймфреймы или тики неоднозначных баров. M1 всё ещё может содержать оба выхода в одном баре; достаточно подробные котировки верной стороны разрешают часть случаев, но исполнению могут всё равно требоваться допущения о состоянии ордера и ликвидности.
- Рассчитайте обе крайности: во всех неоднозначных сделках сначала стоп и во всех сначала цель. Если диапазон меняет решение, сообщайте неопределённость вместо выбора выгодной границы.
- Запишите число неоднозначных баров в ограничениях. Если стопы и цели близки относительно диапазона бара решения, выбранного разрешения OHLC может не хватать для утверждения.
Синтетический расчёт: тест из 200 сделок содержит 14 таких свечей. Учёт всех с целью первой даёт ожидание +0,18R. Изменение всех 14 с +1R на −1R убирает 28R, или 0,14R на сделку, оставляя +0,04R. Достаточно подробное воспроизведение находит девять случаев стопа первым и пять цели первой. Относительно варианта всех целей девять сделок теряют по 2R: 18R / 200 = 0,09R, поэтому уточнённая оценка равна +0,09R. Оптимистичная модель завышает её на 0,09R на сделку, что может быть существенно относительно запаса стратегии на издержки. Одна H1 не устанавливает эту последовательность. Сообщайте ограничение и способ его разрешения, а не более красивый исход.

3. Анализ walk-forward — проверка при ограниченных данных
Анализ walk-forward, или WFA, оценивает последовательность окон разработки и последующей оценки. Роберт Пардо систематически рассматривает метод в Оценка и оптимизация торговых стратегий.[1] Вместо выбора параметров по всей истории разрабатывайте на внутривыборочном окне, оценивайте зафиксированный выбор на последующем вневыборочном окне, затем сдвигайтесь вперёд по заранее заданной процедуре.
Хронологическое разделение: разработка, валидация и OOS
Простой пример из двух частей использует:
- Пять календарных лет: 1 января 2020–31 декабря 2024.
- Около 70% для разработки: 1 января 2020–30 июня 2023, или три с половиной года.
- Около 30% для итоговой оценки: 1 июля 2023–31 декабря 2024, или полтора года; первый просмотр только после фиксации выбранных правил.
Разделение 70/30 — допущение сценария, а не рыночный стандарт. Выберите разделение с полезным числом сигналов и релевантными условиями с обеих сторон. Хронология важна: в этой задаче прогноза и торговли оценка следует за разработкой. Случайное смешение дат может внести в исследование будущие режимы и зависимости.
Есть и три отдельные роли, хотя в первом примере лишь два блока дат верхнего уровня:
- Разработка внутри выборки: здесь ищут, оптимизируют и отклоняют кандидатов. Выбор параметров допустим при раскрытии его как разработки.
- Валидация для отбора: более позднее окно разработки помогает выбирать кандидатов. После такого использования оно часть отбора, а не нетронутый итоговый тест. В примере из двух частей явно выделите его внутри периода разработки.
- Итоговая оценка OOS: просматривайте после фиксации стратегии и процедуры оценки. Если результат подсказывает новый фильтр, он уже не независимое доказательство для исправленного фильтра; запишите загрязнение.
Отдельное окно отбора полезно при сравнении нескольких кандидатов. Для одного полностью заранее заданного кандидата оно логически не обязательно, но финальная OOS никогда не должна незаметно становиться местом выбора победителя. «Попробуем ещё фильтр» после просмотра меняет роль данных.
После слабой OOS можно вернуться к разработке, но нельзя изменить правила, повторить период и назвать результат нетронутой валидацией. Сохраните первый результат, а последующее использование пометьте как разработку или диагностическое повторение. Идентичный прогон ради воспроизводимости сам не создаёт новую гипотезу; изменение правила по результату создаёт.
Скользящий анализ walk-forward
Один итоговый период может быть необычно лёгким или трудным. Скользящая оценка изучает процедуру в нескольких последовательных периодах, но не гарантирует представления всех будущих условий:
| Шаг | Окно разработки | Следующее окно оценки |
|---|---|---|
| 1 | 2020-01 — 2022-12 (3 года) | 2023-01 — 2023-06 (6 месяцев) |
| 2 | 2020-07 — 2023-06 (3 года) | 2023-07 — 2023-12 (6 месяцев) |
| 3 | 2021-01 — 2023-12 (3 года) | 2024-01 — 2024-06 (6 месяцев) |
| 4 | 2021-07 — 2024-06 (3 года) | 2024-07 — 2024-12 (6 месяцев) |
Четыре окна оценки не перекрываются по календарю и вместе охватывают два года. Это не делает их статистически независимыми. Они соседние, окна разработки сильно перекрываются, один устойчивый режим может охватывать несколько оценочных блоков. Зафиксируйте скользящую процедуру отбора до просмотра общей последовательности, иначе и сама процедура может быть подогнана к кажущимся результатам OOS.
Положительные чистые результаты в трёх или четырёх окнах могут оправдать дальнейшее исследование устойчивости, но само число — слабое доказательство. В иллюстративной независимой модели равновероятных знаков вероятность минимум трёх положительных из четырёх составляет 5/16 = 31,25%. Зависимость меняет вероятность, причём направление не всегда предсказуемо универсально. Сообщайте для каждого окна число сделок, чистое ожидание, неопределённость и охват режимов. Одно–два положительных окна могут указывать на чувствительность к режиму; ноль или одно не дают убедительного обоснования запуска. Ни одно число не заменяет заранее заданных статистических и операционных критериев.
Исследование walk-forward для редких сделок
При пяти–десяти сделках в месяц свинг-стратегия даёт примерно 300–600 сделок за пять лет. Доля OOS 30% содержит около 90–180. Вблизи доли выигрышей 60% независимый биномиальный 95% интервал имеет приблизительную полуширину 7–11 процентных пунктов в зависимости от числа и метода. Это может ограничить утверждение о доле выигрышей, но само не устанавливает прибыльную выплату после издержек.
При 50–100 сделках в месяц пять лет дают около 3 000–6 000 наблюдений. Выборочная неопределённость может уменьшиться, но зависимость, отбор, охват режимов и моделирование исполнения важны по-прежнему. Большое число сделок не делает модель издержек автоматически единственной оставшейся проблемой.
При одной–двух сделках в месяц позиционная стратегия даёт лишь 60–120 сделок за пять лет, оставляя примерно 18–36 в сегменте OOS 30%. Неопределённость может быть слишком широкой для отличия полезного ожидания от убытка. Возможные ответы:
- Более длинная история: десять–пятнадцать лет при этой частоте дают около 120–360 сделок, из них примерно 36–108 в оценочной доле 30%. Проверьте релевантность старых рыночных условий и исполнения.
- Несколько инструментов: шесть–десять валютных пар могут добавить наблюдений, но общие валютные события и перекрывающиеся позиции создают зависимость. Проверяйте межинструментальное утверждение и не считайте каждую сделку новым независимым опытом.
- Блочный бутстрэп: перевыбирайте блоки наблюдавшихся результатов для изучения вариации при заданных допущениях зависимости. Это повторно использует имеющиеся наблюдения и не создаёт новых рыночных доказательств. Множество симулированных путей само не превращает крошечную выборку в хорошо установленное преимущество.
Базовая модель: с чем сравнивают стратегию?
Положительное среднее можно сообщить без базовой модели, но утверждение о пользе дополнительных правил требует релевантного сравнения. До толкования «+0,25R на сделку» примените тот же период, допущения исполнения и учёт издержек к явно заданным альтернативам:
- Триггер без дополнительных фильтров. Если четыре фильтра не улучшают заданную цель результативности или риска, они могут лишь уменьшать выборку и добавлять гибкость. Сравнивайте не одно среднее, если фильтры предназначены для изменения просадки или экспозиции.
- Случайные входы с сопоставимой частотой, политикой направления и выходами. Повторные симуляции дают опорное распределение, а не одно удобно выбранное число. Задайте множество допустимых входов, рандомизацию и начальное значение. Стратегия около центра не показала отличия в таком сравнении; это не универсальное доказательство случайности каждого её аспекта.
- Удержание заданного направления весь период. Для свинг-стратегии одной пары это может показать сходство результата с направленным дрейфом. Используйте сопоставимую экспозицию и финансирование; немасштабированное удержание не автоматически справедливое сравнение риска.
- Та же процедура с обратным сигналом. Если прибыльны оба направления, исследуйте время, асимметричные выходы, эффекты волатильности и модель издержек. Результат не автоматически ошибка, но ставит под сомнение единственный источник ценности в прогнозе направления.
Запишите результаты стратегии и базовой модели в поле 10. Анализ чувствительности локально задаёт тот же вопрос: что будет при сдвиге каждого параметра на шаг в любую сторону? Если преимущество исчезает при сдвиге порога ATR с 1,1 до 1,0, исследуйте изменения сделок и неопределённость. Одна привлекательная ячейка карты — не сильное доказательство устойчивого преимущества.
Фиксация OOS: папки, хеши конфигурации и реестр испытаний
Слабая OOS с последующими изменениями параметров и повторным просмотром того же периода — разработка на общей истории, а не нетронутое доказательство walk-forward. Простая структура проекта делает различие видимым:
- Храните отдельные каталоги, например
01_raw_data,02_IS_optimizationи03_OOS_locked. При использовании добавьте явно обозначенную подвыборку отбора-валидации и её границы. - До первого итогового прогона OOS запишите полные хеши спецификации, кода, параметров, модели издержек и границ дат в
03_OOS_locked/run_001.lock. Затем добавьте результат и метаданные прогона, не заменяя исходные входы. - Изменённый кандидат получает новую запись прогона, например
run_002.lock, и пометку, что уже просмотренный период не является нетронутым доказательством для редакции. Не стирайте действительную историческую запись результата первого зафиксированного кандидата. - У каждого итогового оценочного окна один первый просмотр по заранее заданной процедуре. Идентичные проверки воспроизводимости отличают от новых вариантов по результату. Планируйте скользящие окна заранее и записывайте, когда ранний оценочный блок становится допустимыми прошлыми данными для позднего запланированного шага разработки.
Имя файла с окончанием .lock или хеш физически не запрещают правки и просмотр. Они дают аудиторский след вместе с сохранёнными файлами и дисциплиной доступа. Видимая блокировка без записи, кто какие данные смотрел, не доказывает независимости.
Что делать после слабого результата OOS
Не добавляйте фильтр лишь из-за неприятного результата. Следуйте записанной последовательности решений:
- Примите и сохраните результат. Текущий кандидат не выполнил нужный критерий валидации. Результат может быть неопределённым, а не окончательно отрицательным; используйте записанный до теста критерий.
- Вернитесь к концепции. Пересмотрите гипотезу, цикл разработки и определение преимущества в первых трёх разделах статьи 15.3. Проверьте осмысленность механизма и объясняют ли результат дефекты реализации или данных.
- Если механизм остаётся правдоподобным, исследуйте зависимость от режима как новый вопрос. Могут помочь четыре–шесть заранее заданных скользящих окон. Два благоприятных трендовых и четыре неблагоприятных боковых указывают на возможное взаимодействие с режимом, а не немедленное разрешение включаться при тренде. Каждому окну нужны размер выборки и интервал чистого ожидания. Три положительных окна всего по восемь сделок могут оставаться совершенно неопределёнными. Обнаруженный по ним фильтр режима требует версионированной спецификации и независимой оценки.
- Если концепция не проходит, выведите кандидата из использования. Сохраните причину и историю испытаний, затем переходите к другой идее вместо накопления исключений вокруг отклонённого утверждения.
4. Анализ Монте-Карло — один исторический путь не вся картина
Бэктест записывает одну последовательность возможностей и результатов. Пятилетняя выборка может содержать 100 сделок; иная история рынка могла дать 95 или 110 по другим ценам и с другими итогами. Ресэмплинг не восстанавливает все возможные рынки. Он спрашивает уже: как варьируются результаты при явно выбранной модели на основе имеющихся наблюдений?
Симуляция даёт распределение вместо точечной оценки. Оно может выявить чувствительность, скрытую исходным порядком, но условно относительно модели и входной выборки. Это не полное измерение реального риска и не гарантия попадания будущих результатов в его границы.
Два основных метода ресэмплинга
Бутстрэп отдельных сделок: возьмите, например, список 200 результатов в R — +1,5R, −1R, +2,2R и так далее — и выберите 200 наблюдений с возвращением. Повторите 1 000 раз для 1 000 путей. Могут изменяться и порядок, и частота отдельных результатов.
Это отличается от случайной перестановки без возвращения. Перестановка тех же фиксированных R не меняет сумму. При постоянной доле риска и отсутствии зависимых от пути ограничений она сохраняет и произведение множителей капитала, хотя просадка меняется. Не описывайте перестановку и бутстрэп как взаимозаменяемые процедуры.
Блочный бутстрэп: выбирайте непрерывные блоки, например по десять последовательных сделок, а не отдельные сделки. Это сохраняет часть зависимости внутри блока, но разрывает связи на новых стыках. Уместность зависит от наблюдаемой зависимости стратегии. Длина блока — исследуемый параметр; сравнивайте 5, 10 и 20 вместо выбора самого успокаивающего результата.
Что рассчитывать по 1 000 симулированных путей
- Медианная конечная доходность: центр распределения симулированной доходности на заданном горизонте. Называйте его годовым лишь при действительно годовом горизонте и временной модели.
- Пятый процентиль доходности: квантиль нижнего хвоста симуляции. Это не худший возможный и не гарантированный «худший реалистичный» исход. Совпадения значений и интерполяция конечной выборки меняют долю строго ниже него.
- 95-й процентиль величины просадки: верхнехвостовое резюме симулированных падений от пика к дну. Сравнивайте с заранее заданными лимитами плана, не считая потолком.
- Частота пересечения заданного порога: например, доля путей с просадкой больше 30%. Назовите порог и измерение от начального баланса или текущего максимума. Просадка 30% — не буквальная неплатёжеспособность.
Иллюстративные цифры, не исторические результаты: допустим, исходный путь годовой модели показывает доходность +45% и максимальную просадку 12%. Гипотетическая симуляция 1 000 путей даёт медиану +38%, пятый процентиль +8%, 95-й процентиль величины просадки 22% и частоту 4% просадок глубже 30%. Значит, около одного пути из 25 в этой модели пересекает границу; это не устанавливает реальную вероятность разорения 4%. Любая процентная просадка уже предполагает политику размера позиции, а не является свойством одного сигнала входа.[4]
Используйте единый согласованный набор определений метрик
До запуска кода определите ожидание в R, профит-фактор, просадку и её длительность, фактор восстановления и любую оценку в стиле SQN. Статья 15.9 — опорная статья главы по формулам и знаменателям. Здесь важны три пункта:
- Просадка использует текущий пик, а не будущий глобальный максимум. Определите
H_t = max(капитал до момента t),D_t = (H_t - E_t) / H_tиmaxDD = max(D_t). Для 100 → 80 → 120 → 110 наибольшее падение от предшествующего пика равно 20%, от 100 до 80. Поздний пик 120 с ранним дном 80 даёт 33,3%, но это не просадка пути. - Укажите кривую и частоту измерений. Переоценённый по рынку капитал с открытыми позициями отличается от баланса закрытых сделок. Тиковая, дневная и послесделочная выборка дают разные максимумы. «Просадка 12%» без определений не сопоставима прямо с другим отчётом или планом.
- Укажите соглашение оценки. Оценка среднее-R/стандартное отклонение, умноженная на √N, меняется с N. Ограниченный и неограниченный варианты — разные величины. Используйте одно соглашение и сопоставимый N, не заменяя оценкой неопределённость или правило распределения капитала.
Явно задайте и остальные отчётные соглашения. Денежный профит-фактор не обязан совпадать с профит-фактором в R при изменении денежной единицы риска. Шарпу нужны интервал доходности, ориентир и допущения годового пересчёта; R на сделку не автоматически календарный ряд доходности. Калмар требует заданной годовой доходности и просадки на сопоставимом горизонте. Включайте хвостовые убытки, длину убыточной серии, длительность просадки и нерешённые операционные состояния, не сводя отчёт к одному отношению.
Пример блочного бутстрэпа на Python
Пример можно запустить в локальном Python с NumPy и pandas или в сервисе блокнотов, таком как Google Colab. Colab предоставляет браузерный блокнот с лимитами использования; смотрите актуальную информацию о сервисе и хранении. Создайте блокнот, вставьте код в ячейку и запустите. Вход по умолчанию синтетический, поэтому для просмотра формата вывода не нужны личные торговые данные.
Для своего журнала подготовьте CSV с одним числовым столбцом R и одной полной сделкой в строке в хронологическом порядке. Раскомментируйте импорт и укажите файл. Каждый R должен включать нужные издержки один раз и использовать положительный денежный риск, запланированный до входа. Удалите личные идентификаторы до рассмотрения загрузки в облако; чувствительные выгрузки счёта храните локально, если не хотите хранения у третьей стороны.
import numpy as np
import pandas as pd
def block_bootstrap_strategy(trades_R, n_simulations=1000, block_size=10,
risk_per_trade=0.01, seed=42):
"""Перевыбирайте непрерывные нециклические блоки чистых результатов сделок в R.
trades_R: конечные хронологические результаты, одна полная сделка на значение.
n_simulations: число синтетических путей, не новых рыночных наблюдений.
block_size: длина непрерывного блока; исследуйте 5, 10 и 20.
risk_per_trade: фиксированная доля тогдашнего капитала под риском на сделку.
seed: вход воспроизводимости; запишите также версию NumPy.
Доходности охватывают len(trades_R) сделок, НЕ автоматически годовые.
Просадки измерены после каждой сделки и сохранены отрицательными.
"""
trades_R = np.asarray(trades_R, dtype=float)
if trades_R.ndim != 1 or trades_R.size == 0:
raise ValueError("trades_R должен быть непустым одномерным массивом")
if not np.isfinite(trades_R).all():
raise ValueError("trades_R должен содержать только конечные значения")
for name, value in (("n_simulations", n_simulations),
("block_size", block_size)):
if isinstance(value, bool) or not isinstance(value, (int, np.integer)):
raise ValueError(name + " должен быть положительным целым числом")
if value < 1:
raise ValueError(name + " должен быть положительным целым числом")
if not np.isfinite(risk_per_trade) or not 0 < risk_per_trade < 1:
raise ValueError("risk_per_trade должен находиться между нулём и единицей")
rng = np.random.default_rng(seed)
n_trades = len(trades_R)
# Следуйте примеру: ограничьте слишком большой блок длиной выборки.
# Блок всей выборки не даёт разнообразия ресэмплинга; сообщите ограничение.
block_size = min(block_size, n_trades)
n_blocks = (n_trades + block_size - 1) // block_size
final_returns, max_drawdowns = [], []
threshold_breaches = 0
for _ in range(n_simulations):
# Выбирайте начальные позиции с возвращением; сохраняйте каждый блок.
starts = rng.integers(0, n_trades - block_size + 1, size=n_blocks)
sample = np.concatenate(
[trades_R[s:s + block_size] for s in starts]
)[:n_trades] # Сохраните ровно исходное число сделок.
equity, equity_curve = 1.0, [1.0]
for outcome in sample:
# При исчерпании капитала убытком поглощайте на нуле. Это не модель долга
# и не утверждает применимость правовой защиты от отрицательного баланса.
equity *= max(0.0, 1.0 + outcome * risk_per_trade)
equity_curve.append(equity)
equity_curve = np.asarray(equity_curve)
peak = np.maximum.accumulate(equity_curve)
drawdown = (equity_curve - peak) / peak
worst = float(drawdown.min())
final_returns.append(equity - 1.0)
max_drawdowns.append(worst)
if worst < -0.30: # Строго глубже падения на 30% от текущего пика.
threshold_breaches += 1
return {
"trades_per_path": n_trades,
"effective_block_size": block_size,
"median_return": float(np.median(final_returns)),
"p05_return": float(np.percentile(final_returns, 5)),
"p95_return": float(np.percentile(final_returns, 95)),
# Отрицательный DD: пятый процентиль — неблагоприятная величина 95-го процентиля.
"p95_max_dd": float(np.percentile(max_drawdowns, 5)),
"p99_max_dd": float(np.percentile(max_drawdowns, 1)),
"prob_dd_over_30pct": threshold_breaches / n_simulations,
"mean_return": float(np.mean(final_returns)),
}
# Свои данные необязательны: одно чистое R на завершённую сделку, по времени.
# trades = pd.read_csv("my_results.csv")["R"].to_numpy(dtype=float)
# СИНТЕТИЧЕСКАЯ демонстрация, не результаты рыночной стратегии.
# 20 значений: 6 выигрышей, сумма +2R, среднее +0.10R; доминирует один выброс +7.2R.
toy = np.array([-1.0, -1.0, 3.1, -1.0, -1.0, -1.0, 0.9, -1.0, 7.2, -1.0,
-1.0, -0.6, 1.4, -1.0, -1.0, -1.0, 2.3, -1.0, -1.0, 0.7])
trades = np.tile(toy, 10) # Искусственное повторение, НЕ 200 независимых наблюдений.
# Для своего CSV замените строку выше необязательной строкой импорта.
print("Версия NumPy:", np.__version__)
for risk in (0.01, 0.02):
result = block_bootstrap_strategy(trades, n_simulations=2000,
block_size=10, risk_per_trade=risk, seed=42)
print(f"Доля риска на сделку: {risk:.0%}")
print(f"Медианная доходность за {result['trades_per_path']} сделок: {result['median_return']:.2%}")
print(f"Пятый процентиль доходности: {result['p05_return']:.2%}")
print(f"Неблагоприятный 95-й процентиль DD: {result['p95_max_dd']:.2%}")
print(f"Пути с DD глубже 30%: {result['prob_dd_over_30pct']:.2%}")
Расчёт проверяет поведение выбранной выборки при ресэмплинге и заданной политике размера. Игрушечная последовательность из 20 значений имеет сумму +2R и среднее +0,10R; удаление наблюдения +7,2R существенно меняет картину. Десятикратное повторение создаёт демонстрацию кода из 200 записей с искусственной периодичностью, а не десятикратные независимые доказательства.
Проверенный пример вывода с NumPy 2.5.3, начальным значением 42 и 2 000 путями: при риске 1% медианная доходность за 200 сделок +19,56%, пятый процентиль доходности −4,11%, неблагоприятный 95-й процентиль просадки −17,66%, и ни один симулированный путь не превышает просадку 30%. При риске 2% соответствующие цифры +32,25%, −13,71%, −33,70% и 11,05% путей за порогом. Неблагоприятные 99-е процентили просадки — около −21,09% и −39,51% соответственно. Это синтетические выходы за 200 сделок, не годовые прогнозы. Запишите код и версию NumPy вместе с начальным значением: генератор не обещает неизменного потока во всех будущих версиях. Важно, что процентная просадка зависит и от размера, и от последовательности R.
Запишите критерии симуляции в поле 9 карточки до просмотра вывода. Иллюстративная политика может требовать положительных медианы и пятого процентиля доходности, неблагоприятного квантиля просадки ниже лимита плана и менее 1% путей с пересечением просадки 30%. Это правила решения сценария, а не рыночные стандарты. Неудача означает непрохождение кандидатом этой модели и масштаба по выбранным критериям, а не приглашение передвинуть пороги задним числом.
Важные ограничения: ресэмплинг не создаёт отдельного убытка хуже самого плохого входа, хотя повторные убытки дают более глубокую совокупную просадку. Он не изобретает невиданного кризиса ликвидности, нового финансирования или отсутствующего отказа исполнения. Ноль пересечений в конечной симуляции не означает нулевого реального риска. Послесделочная кривая кода исключает внутрисделочное изменение капитала, маржинальную ликвидацию, перекрытие позиций и остаточный долг. Нулевой пол капитала — модельное соглашение, а не правовая защита счёта.
Тот же процент, другая сумма денег
Падение 15% на PLN 5 000 — PLN 750; на PLN 50 000 — PLN 7 500. Сохраняется валюта исходного польского сценария, а не валютный пересчёт. Та же арифметика действует в любой валюте счёта: 15% от 5 000 единиц — 750, 15% от 50 000 — 7 500. Процент один, но денежные последствия и ограничения владельца могут сильно различаться.
Допустимая просадка и размер на разных масштабах счёта относятся к статье 15.11; дневные, недельные и месячные лимиты — к плану в статье 15.2. В этом тесте сравнивайте симулированный квантиль с записанным до прогона лимитом, а не суммой, терпеть которую вы согласились после результата.
Зачем блоки вместо независимого ресэмплинга?
Кластеризация волатильности касается размера движений. Она не означает автоматически, что после убытка следующий убыток вероятнее. Зависимость знаков и результатов надо исследовать в вашей стратегии, а не предполагать универсальным фактом. Общий режим, коррелированные пары или одно макрособытие могут создавать последовательности, разрушаемые независимым ресэмплингом.
Блочная выборка сохраняет локальные последовательности и при важности зависимости даёт более релевантный анализ чувствительности. Она не сохраняет все дальние связи, а ошибка независимого бутстрэпа не гарантированно занижает риск во всех данных. Сравнивайте длины 5, 10 и 20, раскрывайте все результаты и изучайте исходную зависимость. Рост неблагоприятного квантиля просадки с длинными блоками указывает на чувствительность к схеме, но сам не доказывает конкретной модели зависимости. Малое изменение в этом небольшом упражнении тоже не доказывает безвредность независимости во всех условиях.
5. Перспективное тестирование — демо, бумажная торговля и ограниченный реальный пилот
Следующие этапы повышают реалистичность и финансовые последствия ошибки. Сокращение процесса не убирает непроверенные допущения: больше из них обнаружат уже после риска деньгами. Последовательность — учебная схема, а не требование обязательного выхода каждого кандидата на реальную торговлю.
Два значения слова «форвард»
Всегда различайте их в отчёте:
- Историческая форвард-выборка: тестер отделяет позднюю часть имеющихся данных, выбирает параметры на ранней и оценивает на удержанной. MT5 называет историческое разделение Forward.[6] Это проверяет другое историческое окно при модели тестера, а не фактическое будущее исполнение.
- Перспективное наблюдение: зафиксированная стратегия работает на наблюдениях после даты фиксации. Исходные решения с временными метками не используют ещё не существующие наблюдения. Всё же сохраняйте записи: поздние пересмотры или ретроспективное переименование способны загрязнить оценку. Укажите, симулируются ли ордера, лишь записываются на бумаге или реально исполняются; фактические исполнения даёт только последнее.
Запишите режим и дату фиксации в поле 4. Без даты «работало на новых данных» неотличимо от «работало на уже имевшихся при выборе правил данных».
Этап 1: демо на поступающих данных
Демо поставщика может напоминать реальную платформу без совпадения всех потоков, правил исполнения и ограничений. Проверяйте отличия, не предполагая идентичности. Демо полезно потому, что:
- Ошибки ордеров и стратегии прямо не теряют реальный капитал счёта.
- Можно найти дефект после десяти сделок и вернуться к разработке без денежного торгового убытка. Запишите новую версию и сохраните старые наблюдения, не смешивая исправленное правило с прежней оценкой.
- Можно проверить интеграцию: оповещения, запуск EA, реализацию правил, состояния ордеров и экспорт журнала.
Ограничения включают:
- Симулированные исполнения: проскальзывание и обработка ликвидности могут отличаться от реальных. Не выводите мотив поставщика из удачного демоисполнения; установите измеримую разницу.
- Иные денежные ставки: механика симулированной маржи и стоп-аута может существовать, но отсутствие реального денежного убытка не воспроизводит реакцию пользователя на экспозицию с деньгами.
- Неполное поведение запросов: обработка отказов, реквот и частичного исполнения может отличаться. Она зависит от режима исполнения и настроек продукта, а не одной метки ECN или STP.
Иллюстративный этап демо 30 дней и 30 сделок задаёт практические вопросы: своевременны ли оповещения, пропускал ли EA сигналы, отличался ли спред от модели, менял ли оператор правила вручную? Эти количества — пороги сценария, не рыночные стандарты. При одном сигнале в две недели та же цель займёт многие месяцы. Даже 30 корректных сделок поддерживают в основном проверку инфраструктуры и процесса, а не точную оценку ожидания.
Записывайте перспективные результаты с первого дня. Ручное восстановление месяца сделок ведёт к пропускам и ненадёжной сверке. Схема журнала, импорт и сравнение с выписками поставщика относятся к статье 15.9. Сохраните как минимум время сигнала, запроса и исполнения, исполнимые цены, проскальзывание, сборы, версию сетапа и исходный денежный риск. Без совместимого учёта перспективный R-множитель не сравним с R теста.
Этап 2: бумажная торговля на реальном потоке, необязательно 30–60 дней
Теневой или бумажный процесс записывает каждый допустимый сигнал и рассчитывает гипотетический итог по явной модели спреда, проскальзывания и исполнения без ордера. Это даёт контроль модели без опоры на необъяснённые демоисполнения. Реальных доказательств исполнения нет, и неизвестно, отправил бы оператор ордер при реальных денежных ставках. Иллюстративные 30–60 дней необязательны и зависят от нерешённого после демо вопроса. При тех же сигналах это не автоматически дополнительные независимые рыночные наблюдения.
Этап 3: отдельно разрешённый ограниченный реальный пилот
Разобранный сценарий показывает небольшой пополненный счёт PLN 1 000–2 000 с ордерами 0,01–0,05 стандартного лота. Сохраняйте их как суммы польского сценария, а не рекомендацию подходящего депозита или размера позиции. Допустимый размер выводится из расстояния стопа, стоимости пипса, сборов, маржинальных требований и бюджета потерь владельца. Даже 0,01 лота может быть слишком много для малого счёта или широкого стопа. Если минимум поставщика не помещается в разрешённый бюджет, правильный исход — не проводить там пилот.
Цель ограниченного реального этапа — исследовать фактическую реализацию при ограниченной явно принятой плановой экспозиции, а не проверять заработок. Он измеряет:
- Фактическое исполнение: наблюдаемые спреды, проскальзывание, задержку, отказы и возможные реквоты в режиме реального счёта.
- Операционное соблюдение: ручные выходы вне правил, изменения стопов, игнорирование сигналов и другие отклонения. Определите знаменатель частоты ошибок: допустимые сигналы, отправленные ордера и завершённые сделки — разные совокупности.
- Фактическое финансирование: сверяйте списания и начисления с действующей реальной спецификацией инструмента, а не деморасписанием.
- Интеграция в реальных условиях: подтвердите нужное поведение EA, оповещений, журналирования и контрольных процедур.
Цели примера 90 дней и 60–100 сделок — иллюстративные допущения планирования. Заранее задайте сравнение исторических и перспективных оценок с неопределённостью обеих выборок. Проверка попадания нового среднего в доверительный интервал исторического — неподходящее двухвыборочное сравнение. И перекрытие двух отдельных интервалов математически не равнозначно включению нуля интервалом их разности.
Оценивайте разность методом для данных и зависимости; при вопросе практической эквивалентности задайте допустимый предел ухудшения. Интервал разности с нулём означает неразрешённое различие, а не доказанную эквивалентность реализаций. Вместе со сравнением требуйте понятного исполнения, соблюдения риск-лимитов и измеренной приемлемой частоты нарушений. Процентиль симулированной просадки может быть заранее заданным поводом для анализа, а не непереходимой будущей границей. Всё запишите до начала.
Критерии перехода
Длительности и количества ниже сохраняют сценарий примера. Настоящие правила решения записываются в поле 9; таблица не разрешает продвижение лишь по истечении дней.
| Откуда | Возможный следующий этап | Иллюстративный допуск |
|---|---|---|
| Историческое исследование | Демо или теневое наблюдение | Пройдены заданные критерии OOS/WFA; Монте-Карло: 5-й процентиль доходности > 0, частота пересечения порога ниже записанного в карточке лимита (поле 9); модель издержек реалистична. До продвижения рассмотрите неопределённость и ограничения. |
| Демо | Отдельно разрешённый ограниченный реальный пилот | Для примера 30+ дней и 30+ сделок; пройдены сверка сигналов и интеграция; наблюдаемые отличия объяснены; подходящее сравнение не нарушает заданного критерия ухудшения. Подтвердите осуществимый минимальный размер и явный бюджет реального риска. |
| Ограниченный реальный пилот | Любой масштаб, разрешённый торговым планом (15.2) | Для примера 90+ дней и 60+ сделок; реальные издержки и разницы результатов оценены с неопределённостью; просадка в пределах контроля плана; измеренные отклонения достаточно редки; нерешённых операционных дефектов нет. Масштабирование требует отдельного решения, не автоматического перехода. |
Во многих планах отсутствует ветвь «не запускать». Непройденный допуск — записываемый результат, а не приглашение снизить критерий. График примера складывает четыре–восемь недель исторической работы, 30 дней демо и 90 пилота: 148–176 дней, примерно пять–шесть месяцев, без необязательной бумажной стадии и пауз. Арифметика — пример планирования, не гарантия достаточных доказательств и не прогноз обязательного убытка от пропуска. Пропуск оставляет вопросы без ответа.
Операционная осуществимость: чего не тестирует историческая модель
Стратегия с решением в 13:30 Europe/London операционно неосуществима для занятого на совещаниях до 16:00 в том же поясе. Это эквиваленты исходного польского примера 14:30 и 17:00, а не универсальное расписание событий. Перспективный перечень сигналов выявит пропуски. Записывайте их как неисполнения; не удаляйте, притворяясь, что исследование и практика использовали одинаковые возможности.
Статья 15.5 рассматривает совместимые с работой окна решений, оповещения и старшие таймфреймы. Статья 15.1 охватывает непрерывность рабочего места, мониторинг VPS и запуск; статья 15.3 записывает временные допущения и исполнение стратегии. Это разные обязанности, все важные для реализации.
В сценарии историческая модель только bid использовала издержки 1,5 пипса, а наблюдаемая требует спреда 2,5–4 пипса плюс проскальзывание 0,5–1,5 на каждой стороне: всего 3,5–7 пипсов. Это синтетические допущения, а не нынешние котировки GBP/JPY. Разница в R зависит от стопа. Например, рост издержек с 1,5 до 4,5 пипса добавляет 3; при D = 5 это 0,6R, достаточно для превращения +0,4R в −0,2R. Проверка демо может выявить различия модели котировок, но не гарантирует обнаружения реального проскальзывания. При одной десятой денежного риска те же −6R стали бы USD 15 вместо USD 150, только если минимум поставщика и пропорциональные издержки допускают масштаб. Тридцать сделок всё ещё дают ограниченные доказательства ожидания. Измеренные расхождения издержек всё же могут оправдать исправление модели с признанием изменчивости издержек и неопределённости хвостового исполнения.
6. Сколько наблюдений достаточно? N, p-значения и доверительные интервалы
Бэктест из 30 сделок с 18 выигрышами имеет наблюдаемую долю 60%. Это верное описание выборки, а не точное измерение истинной вероятности выигрыша стратегии. При независимых одинаково распределённых испытаниях Бернулли двусторонний 95% интервал Клоппера–Пирсона составляет примерно 40,6–77,3%. Процедура интервала имеет как минимум заявленное покрытие на повторных выборках при модели; она не назначает фиксированному неизвестному параметру вероятность 95% после наблюдения именно этой выборки.
Центральная предельная теорема, тяжёлые хвосты и отсутствие магического числа
Центральная предельная теорема не объявляет N = 30 универсально достаточным. Применимость и качество приближения зависят от распределения и зависимости. Финансовые результаты могут быть асимметричны, тяжелохвосты и кластеризованы: один выигрыш +5R или гэп −3R сильно меняют среднее и разброс малой выборки. Сходимость бывает медленной, некоторые модели вообще не удовлетворяют обычной конечности дисперсии.
Единого магического числа сделок нет. Достаточность зависит от разброса R, зависимости сделок, частоты сигналов, охвата режимов, числа вариантов и нужной точности решения. Тридцать входов в одном недельном тренде или макрособытии не автоматически тридцать независимых опытов. Всегда сообщайте число наблюдений, но вместе с интервалом, методом и допущениями, а не отдельным проходным баллом.
Интервалы доли выигрышей при разных выборках
| Число сделок N | Наблюдаемые выигрыши и доля | Двусторонний точный 95% интервал | Можно ли отличить преимущество от шума? |
|---|---|---|---|
| 30 | 60% | 40,6–77,3% (примерно ±18 процентных пунктов) | Неопределённо: интервал включает доли ниже безубыточности; при выплате 1:1 без издержек порог 50%. |
| 50 | 60% | 45,2–73,6% (примерно ±14 процентных пунктов) | Нижняя граница остаётся ниже 50%. |
| 100 | 60% | 49,7–69,7% (примерно ±10 процентных пунктов) | Интервал всё ещё включает 50%; округление не должно менять решение. |
| 200 | 60% | 52,9–66,8% (примерно ±7 процентных пунктов) | Исключает 50% при заданной модели; это не устанавливает прибыльных выплат после издержек. |
| 500 | 60% | 55,6–64,3% (примерно ±4 процентных пункта) | Меньшая неопределённость вероятности выигрыша, не доказательство прибыльного ожидания. |
| 1 000 | 60% | 57–63% (округлено; примерно ±3 процентных пункта) | Выше точность при модели; качество данных, зависимость и выплаты всё равно важны. |
Таблица использует двусторонние 95% интервалы Клоппера–Пирсона с целыми числами выигрышей и независимыми испытаниями постоянной вероятности. Зависимость или изменение вероятности нарушают простое толкование; положительная кластеризация часто уменьшает эффективную информацию, но не всякая зависимость имеет одинаковый эффект. Укажите обработку кластеризации и меняющихся условий.
Столбец сравнения использует 50% только как безубыточную долю модели двух исходов с фиксированными выплатами 1:1 без дополнительных издержек. В общем случае при положительных величинах выигрыша W и убытка L безубыточная доля без дополнительных издержек равна L / (W + L), эквивалентно 1 / (1 + W/L). Выигрыш 2R против убытка 1R даёт 33,3%; выигрыш 0,5R против убытка 1R — 66,7%. Дополнительные постоянные средние издержки c повышают порог модели до (L + c) / (W + L), если эти издержки ещё не включены в W и L.
Практический вывод не в том, что «200 сделок достаточно», а в том, что важна неопределённость относительно выбранного порога решения. При n = 100 двусторонний интервал всё ещё включает 50%, поэтому этот критерий не разрешён. При n = 200 он исключает 50%, но утверждению о прибыльности всё равно нужны полные выплаты и издержки. Неопределённый итог обычно требует продолжения исследования по плану; он не разрешает автоматически меньшую реальную позицию и не доказывает обязательного вывода действующей стратегии. Лимиты безопасности и доказанные дефекты реализации остаются отдельными причинами паузы.
Биномиальный тест: вероятность выигрыша выше 50%?
Нулевая гипотеза здесь p = 0,5 с заранее заданной альтернативой p > 0,5. Это не то же, что «нет торгового преимущества». Стратегия с 40% выигрышей и выплатой 3:1 имеет положительное ожидание до издержек, тогда как даже 70% с выплатой 0,5:1 дают лишь малый положительный запас, съедаемый издержками.
Одностороннее p-значение — вероятность при нулевой гипотезе и её допущениях получить не меньше выигрышей, чем в выборке. Это не вероятность истинности нулевой гипотезы, наличия преимущества или будущей прибыли. Описательные полосы, подобные примеру статьи, толкуйте осторожно:
- Ниже 0,01: сравнительно необычный верхнехвостовой результат при этой нулевой гипотезе для одного заранее заданного теста, не доказательство полезного торгового эффекта.
- 0,01–0,05: может пройти заданный односторонний тест 5%, но отбор множества кандидатов требует подходящего контроля множественности.
- 0,05–0,10: не проходит порог отклонения 5%. По этому критерию эффект неопределён.
- Выше 0,10: недостаточно оснований отклонить эту гипотезу вероятности выигрыша при таких порогах. Это не доказывает случайность результатов или отсутствие преимущества на основе выплат.
Выберите направление и порог до результата. После поиска 30 вариантов минимальное нескорректированное p-значение — отобранный результат; раздел 2 объясняет важность всей истории испытаний.
В современном SciPy используйте from scipy.stats import binomtest, затем binomtest(wins, n_trades, 0.5, alternative='greater').pvalue. Её официальная документация API фиксирует появление в версии 1.7.0. Старый binom_test был признан устаревшим в 1.10.0 и удалён в 1.12.0; используйте нынешний API объекта результата вместо старых фрагментов.
Для 60 выигрышей в 100 сделках одностороннее p-значение примерно 0,02844. Для 18 из 30 — примерно 0,18080 при той же наблюдаемой доле 60%. Первый проходит нескорректированный заранее заданный тест 5% односторонний; второй нет. Это не противоречит включению 50% интервалом для 100 сделок в таблице: там используется двусторонний 95% интервал. Согласуйте уровень доверия и направление до сравнения решений.
Проверяйте результат R, а не только долю выигрышей
При 40% выигрышей, среднем выигрыше 3R и убытке 1R ожидание до дополнительных издержек равно 0,4 × 3 − 0,6 × 1 = +0,6R. При 70% выигрышей, среднем выигрыше 0,5R и убытке 1R он лишь +0,05R. У второго выше доля выигрышей, но гораздо меньше запас издержек. Ни одно численное допущение не доказывает фактического качества стратегии.
Одновыборочный t-тест может проверить среднее чистое R против нуля при подходящих допущениях и приближении. Его статистика t = mean_R / (sample_sd_R / sqrt(N)) с N−1 степенями свободы. Это не полный статистический ответ для отобранных, зависимых или тяжелохвостых результатов; им может понадобиться иной дизайн вывода или ресэмплинг.
Для иллюстративного выборочного среднего +0,3R и выборочного стандартного отклонения 1,5R при N = 30 получаем t ≈ 1,10 и одностороннее p-значение около 0,14. При N = 200 те же среднее и разброс дают t ≈ 2,83 и одностороннее p-значение около 0,003. Второй результат сильнее свидетельствует против конкретной нулевой средней при допущениях, но не даёт уверенности или автоматического реального допуска. Интерфейс API одновыборочного t-теста SciPy поддерживает явные альтернативы; выбирайте alternative='greater' только для заранее заданного такого вопроса.
Пример показывает разные выводы из одной точечной оценки при разных размерах выборки. Записывайте N и подходящий интервал чистого ожидания. Достижение N не даёт определённости, а повторные проверки до значимости создают новую проблему отбора.
Рабочая формула ожидания
Используйте доли для W% и L% и положительные величины условных средних выигрыша и убытка. Безубыточные сделки дают ноль, но входят в общее число. При 54% выигрышей, среднем выигрыше 1,8R и убытке 1R результат 0,54 × 1,8 − 0,46 × 1 = 0,512R, примерно +0,51R.
Это должны быть реализованные средние, а не плановое отношение цели. Цель в 1,8 исходного стопа не означает фактического среднего выигрыша +1,8R: частичные выходы, ранние закрытия и исполнение меняют итог. Если R уже чистое после всех сборов, не вычитайте их повторно. Если до отдельных сборов, включите их один раз до оценки чистого утверждения. Издержки +0,2–0,3R могут убрать меньшую положительную исходную оценку; единицы и знаменатель должны обеспечивать прослеживаемость.
SQN: отчётное соглашение, не решение о капитале
Оценка вида SQN = sqrt(N) × mean(R) / std(R) объединяет средний результат, разброс и размер выборки.[5] При тех же среднем и стандартном отклонении неограниченная форма растёт с √N. Поэтому длинный тест может иметь больший балл без большего преимущества на сделку. Укажите соглашение выборочного стандартного отклонения и ограничение N; обсуждаемый в главе ограниченный вариант не взаимозаменяем с неограниченным.
Статья 15.9 даёт общие определения метрик и ограничения. SQN не доказывает реальность преимущества, не заменяет OOS или модель издержек и сам не определяет выделение капитала.
Добавление среднего выигрыша 0,7R и убытка 1,2R даёт (27 × 0,7 − 20 × 1,2) / 47 = (18,9 − 24) / 47 ≈ −0,109R. Сумма −5,1R, а не положительный результат. При фиксированном денежном R в 1% начального капитала это −5,1% начального капитала. Если каждый из 27 выигрышей ровно +0,7R, а каждый убыток ровно −1,2R, риск 1% текущего капитала каждый раз даёт 1,007^27 × 0,988^20 − 1 ≈ −5,17%. Если известны лишь два средних, сложный результат не определяется однозначно: важны и размеры отдельных исходов.
Положительные деньги при отрицательном невзвешенном среднем R могут отражать разные денежные веса риска, вводы или выводы, сборы либо ошибку сверки; исследуйте, не предполагая одну причину. Переменный риск не делает ожидание R неисчислимым. Каждой сделке нужен свой положительный R₀, зафиксированный до входа с R_i = чистая P/L_i / R₀_i. Нельзя переводить невзвешенную сумму R в процент счёта без весов риска, пути капитала и денежных потоков. Урок — сохранять недостающие столбцы, а не отвергать восемь месяцев из-за неполноты одной метрики. Малая или зависимая выборка: ограничивайте выводы.
7. Моделирование исполнения и издержек: спред, проскальзывание, финансирование, комиссия и частичное исполнение
Занижение издержек превращает убыточную реализацию в кажущийся прибыльным бэктест. Моделируйте четыре компонента отдельно, затем сверяйте с исполнением для однократного учёта каждого. Подробная таблица сборов не компенсирует невозможные исполнения.
Спред: фиксированный или переменный?
| Модель | Описание | Подходящее толкование |
|---|---|---|
| Фиксированный спред, например 1 пипс | Одно настроенное значение на весь тест. | Быстрая первичная проверка или явно упрощённый сценарий. При слабой ликвидности может быть оптимистичным; до реального утверждения нужны проверки чувствительности. |
| Исторический средний спред | Среднее за 6–12 месяцев, сообщаемое одним значением. | Грубая модель чётко заданного ликвидного окна при репрезентативных среднем и хвостах. Среднее всего дня может скрыть реальные издержки входа стратегии. |
| Спред по времени суток | Разные значения по сессиям или ликвидности; для примера 0,3 пипса в ликвидное время и 4 на ролловере. | Более богатая модель сценариев, но таблице, часовому поясу и границам режимов нужны доказательства. Она не воспроизводит каждую котировку или шок публикации. |
| Потиковый спред bid/ask | Спред каждого записанного наблюдения bid/ask выбранного потока. | Полезен для чувствительных к спреду и внутрибараных стратегий. Не включает автоматически глубину стакана, исполнимый размер, позицию очереди или исполнения поставщика. |
Tick Data Suite — один из процессов MT4 для импортированных тиков, переменных спредов и дополнительных настроек исполнения. Поставщик описывает возможности и продвигает показатель качества моделирования 99%. Это индикатор тестера, а не вероятность 99% правильности стратегии или реального исполнения. Покупка зависит от нужных исследованию недостающих данных или моделирования, а не значка.
Чувствительный к спреду скальпинг или новостная стратегия могут сменить знак при иной модели, а свинг со стопом около 100 пипсов — слабее реагировать на малую разницу спреда. Измеряйте чувствительность, не предполагая обязательной окупаемости платного инструмента. Статья не рекомендует покупку и не даёт текущих цен подписки.
Проскальзывание: статические и условные модели
Проскальзывание — разница выбранной опорной цены и исполнения с заданными направлением и стороной ордера. Сравнение исторической модели с реальным исполнением полезно лишь после согласования времени ориентира и соглашения котировок. Модели включают:
- Статическая: фиксированный неблагоприятный резерв, например 0,5 пипса на каждый вход и выход. Просто, но может не хватать при стрессе.
- Условная по ATR: иллюстративный резерв 0,1 × ATR(14) завершённых M5 с пересчётом в пипсы. Растёт с выбранной волатильностью, но коэффициент требует калибровки и может не описать хвосты.
- Условная по размеру и глубине: модель с объёмом ордера, доступной глубиной и процессом площадки. Нужны данные глубины и состояний; обычная история bid/ask автоматически их не даёт.
Начальная схема трёх режимов — доли пипса в обычных условиях, несколько пипсов на пробоях и возможные двузначные после публикаций — иллюстрация, не измеренное распределение счёта. Стройте свою таблицу по сопоставленным запросам и исполнениям. При положительном знаке неблагоприятного проскальзывания покупка использует исполнение - ориентир, а продажа ориентир - исполнение, затем делите на размер пипса. Выход длинной позиции — продажа, короткой — покупка. Сохраняйте и благоприятные исполнения, и отказы; сообщайте ориентир.
Несколько десятков сделок могут выявить обычное расхождение реализации, но редко надёжно характеризуют редкие хвосты исполнения. Запишите период, размеры и условия вместо представления малого среднего всей моделью проскальзывания.
Своп и финансирование
Позиции через границу финансирования могут получать списание или начисление. Спецификации инструментов платформы поддерживают разные расчёты, поэтому своп не обязательно «пипсы на лот за ночь». До пересчёта проверьте, означает ли число пункты, деньги, процентный расчёт или другое соглашение продукта.
- Направление: получайте длинные и короткие ставки отдельно. Они не обязательно равны и противоположны, обе могут быть списаниями. Не предполагайте постоянный плюс короткого EUR/USD или минус длинного по старой среде ставок.
- Множители дней: многие инструменты FX T+2 используют тройную корректировку ролловера среды, но фактический день и праздничные исключения зависят от инструмента и поставщика. Моделируйте календарь позиции, а не умножайте число ночей без дат.
- Изменения ставок: финансирование отражает действующие ставки и условия поставщика. Для истории используйте исторические расписания либо раскройте сценарное приближение. Сегодняшняя таблица не восстанавливает автоматически прошлые годы.
В свинг-позиции на три–восемь дней финансирование может съесть значимую часть ожидания. Переведите пипсовый эквивалент в R по исходному расстоянию, затем примените фактические датированные ставки и множители. Пропуск существенного сбора оставляет чистое утверждение без опоры; начисление тоже записывайте с верным знаком, не предполагая компенсации другой стоимости.
Комиссия
Часть счетов берёт плату по объёму сверх спреда. Пример даёт USD 5–7 за полный оборот стандартного лота основной пары, USD 6–10 второстепенной и USD 8–15 экзотической. Это сценарии, не текущие тарифы; ECN/STP не определяют плату. Используйте тариф счёта с минимумами и ступенями.
Чтобы выразить комиссию в пипсах, разделите комиссию полного оборота одного лота на стоимость пипса этого лота в той же валюте. В стандартном примере EUR/USD USD 6 / USD 10 на пипс = 0,6 пипса за полный оборот. Если счёт в PLN или иной валюте, пересчитывайте обе суммы согласованно; только числитель неверно меняет отношение.
При 200 сделках в месяц по 0,1 лота и USD 6 за полный оборот стандартного лота комиссия составляет USD 120 в месяц. Относительно USD 1 000 начального капитала это 12% месячной стоимости оборота, или USD 1 440 — 144% начала — за двенадцать одинаковых месяцев. Это арифметическая сумма, не прогноз или сложная доходность счёта. Она показывает важность изучения оборота и затрат, а не убыточность каждой мелколотовой стратегии.
Иллюстративная политика ограничивает годовую комиссию примерной долей 20–30% ожидаемой доходности стратегии. Любое такое отношение — политика сценария, не универсальный порог капитала; определите знаменатель: валовая ожидаемая прибыль или прибыль после той же комиссии, чтобы избежать кругового рассуждения. Один рост капитала не улучшает чистое преимущество на сделку при пропорциональном росте экспозиции. Сначала оцените фактические чистые итоги и неопределённость.
Tick Data Suite: процесс тиковых данных MT4
Исходный процесс можно сохранить, не считая название ПО сертификатом профессиональной валидации:
- Поставщик и лицензия: до покупки изучите актуальный официальный сайт, условия лицензии и совместимости. Адреса и перенаправления могут меняться.
- Данные: Экспорт исторических данных Dukascopy — возможный источник. Проверьте инструменты, метки времени, поля bid/ask, пробелы и условия использования. Точное временное разрешение не гарантирует полной исполнимой ликвидности.
- Первичная настройка: резерв два–три часа — пример, не обещание. Сначала скачайте небольшой период, подтвердите время и свойства символа, подключите данные к документированному тестеру и проверьте фактический тиковый режим.
- После настройки: сверьте переменный спред, комиссию, финансирование, объёмы, маржу и стопы с нужным счётом. Вручную изучите примеры сделок. Одно «Каждый тик» не доказывает запись тиков вместо генерации.
Цель — исследовать разницу упрощённого спреда и более релевантной модели записанных данных. Инструмент не проверяет гипотезу, не чинит отсутствующую глубину и не гарантирует сходства будущих затрат с прошлыми. Полезность следует из требований исследования и ваших проверок.
Модель исполнения: задержка, гэпы и частичные исполнения
Учёт издержек — лишь половина модели. Поле 5 должно указать и события между сигналом и исполнением:
- Время сигнала и задержка: после подтверждённого закрытия расчёт, передача и принятие требуют времени. Ручные решения занимают секунды; автоматические задержки зависят от системы и поставщика. Измерьте или явно моделируйте. Нулевая задержка существенна для пробоя, но её вклад нельзя объявить фиксированной долей затрат без данных.
- Гэпы: обычный стоп-маркет не исполняется по недоступной цене. Моделируйте следующую доступную исполнимую котировку по правилам, включая задержку или неисполнение. Постоянное точное исполнение по стопу занижает часть хвостовых потерь, особенно на закрытиях и публикациях.
- Частичные исполнения: используйте среднюю цену с весами объёма, не только первую. При прочих равных частичный объём обычно даёт меньше экспозиции, чем запрос целиком, но цены и сборы меняют сравнение. В принятом журнале сохраняйте исходный предордерный R₀ и отдельно записывайте неисполненную долю. Если другая реализация использует выделенный риск исполненной позиции, укажите иной знаменатель отдельной метрикой, не меняя задним числом. Частичные выходы одного решения входа остаются одной сделкой; отдельные наблюдения меняют веса и искажают долю выигрышей.
- Реквоты и отказы: исторический сигнал может не стать реальным исполнением. Запишите запросы, различая подтверждённый отказ и неизвестность. Пятьдесят кандидатов и 41 сделка могут означать девять сбоев исполнения, не пропущенных сигналов; сверка сравнивает однотипное.
Подвергните стрессу значимые допущения: длиннее задержка, хуже проскальзывание, неблагоприятный исход неоднозначной свечи. Если правдоподобная перемена убирает преимущество, сообщите чувствительность и недостающие доказательства исполнения. Консервативность не делает любой пессимистичный сценарий реалистичным. Модель мгновенного полного исполнения по каждой опорной цене требует явного ограничения. Диагностика MAE/MFE и соглашения выборки разобраны в статье 15.9.
Сводный реестр издержек для скрипта валидации
Следующий исполнимый учебный пример расширяет псевдокод этого примера. Все компоненты используют пипсы пары. Небольшие таблицы спреда и комиссии синтетические, не данные поставщика. Часовые полосы UTC намеренно упрощены без летнего времени и шоков публикаций. Рабочее исследование должно использовать датированные котировки или корректно заданную условную модель.
События финансирования задают раздельные длинные и короткие издержки и множитель дня; функция не предполагает противоположности и не угадывает тройной своп по числу ночей. Флаги обозначают уже учтённые в тестовом P/L компоненты. Результат — оставшаяся дополнительная корректировка к вычету, а не разрешение списать весь реестр второй раз.
import math
def total_cost_per_trade(pair, hour_utc, atr_pips, direction,
financing_events=(), *, spread_in_fills=False,
slippage_in_fills=False, commission_in_result=False,
financing_in_result=False):
"""Дополнительные издержки в пипсах; плюс = затраты, минус = чистое начисление.
Каждое событие финансирования содержит независимые дневные 'long' и 'short'
ИЗДЕРЖКИ в пипсовом эквиваленте и нужный 'multiplier'. Начисление отрицательно.
Датированные события заполняйте извне по реальному удержанию и ставкам.
"""
spread_table = {
"EURUSD": {"low": 1.5, "normal": 0.7, "peak": 0.3},
"GBPJPY": {"low": 4.0, "normal": 2.0, "peak": 1.2},
}
commission_table = {"EURUSD": 0.6, "GBPJPY": 0.8} # Синтетические пипсы полного оборота.
if pair not in spread_table:
raise ValueError("Неподдерживаемая пара: задайте явную модель издержек")
if direction not in ("long", "short"):
raise ValueError("direction должен быть long или short")
if isinstance(hour_utc, bool) or not isinstance(hour_utc, int):
raise ValueError("hour_utc должен быть целым числом от 0 до 23")
if not 0 <= hour_utc <= 23:
raise ValueError("hour_utc должен быть целым числом от 0 до 23")
if not math.isfinite(atr_pips) or atr_pips < 0:
raise ValueError("atr_pips должен быть конечным и неотрицательным")
regime = "low" if hour_utc >= 22 or hour_utc <= 6 else (
"peak" if 8 <= hour_utc <= 16 else "normal"
)
spread = 0.0 if spread_in_fills else spread_table[pair][regime]
slippage = 0.0 if slippage_in_fills else 2 * 0.1 * atr_pips
commission = 0.0 if commission_in_result else commission_table[pair]
financing = 0.0
for event in financing_events:
rate = float(event[direction])
multiplier = float(event["multiplier"])
if not math.isfinite(rate) or not math.isfinite(multiplier) or multiplier < 0:
raise ValueError("Недопустимое событие финансирования")
if not financing_in_result:
financing += rate * multiplier
return spread + slippage + commission + financing
# Синтетический пример: отдельные ставки, без допущения противоположных знаков.
events = [{"long": 0.3, "short": 0.1, "multiplier": 3}]
print(total_cost_per_trade("EURUSD", 10, 5.0, "long", events)) # 2.8 пипса
print(total_cost_per_trade("EURUSD", 10, 5.0, "long", events,
spread_in_fills=True)) # 2.5 пипса
Простая проверка: +0,4R до дополнительных издержек становится +0,2R при издержках 0,2R или −0,1R при 0,5R. Пересчитайте пипсовый реестр по нужным исходному расстоянию и валютному соглашению. Без явного реестра и исполнения неизвестно, какой чистый результат представляет исторический отчёт.
8. Выбор удобных примеров и отбор сигналов
Методологический выбор удобных случаев возникает при удалении сигналов и отчёте о привлекательном остатке без обоснованного заранее заданного отбора. Это бывает сознательно или нет. Убыточная полная реализация выглядит прибыльной из-за исчезновения неблагоприятных наблюдений.
Три формы выборочного отбора
1. «Я пропускаю сигналы, которые выглядят неправильно». На истории есть допустимый сигнал, но исследователь отбрасывает его как неверный контекст. При видимых или запомненных поздних свечах «неправильно» может коррелировать с убытком, а не доступным при решении правилом. Дискреционную стратегию можно изучать, но нужны заданный слепой или перспективный протокол классификации и сохранённые решения до результата.
2. «Я добавляю фильтр после просмотра убытков». Группа убытков вторничного утра вызывает новое исключение вторника. Тот же период улучшается по построению, не устанавливая реального отличия вторников. Считайте фильтр новой гипотезой, запишите причину и проверьте независимо вместо выдачи отобранной выборки за подтверждение.
3. «Я использую только чистые периоды». Исследователь удаляет стрессовую историю — март 2020, кризис 2008 или распродажу конца 2018 — и объявляет остаток представительным. Названия должны быть точны: Lehman Brothers обанкротился в сентябре 2008, а taper tantrum был в 2013, не декабре 2018. Заранее заданная стратегия может исключать наблюдаемые условия, но не неожиданную кризисную историю задним числом из-за неудобного итога. Сохраните стрессовые периоды и опишите действия правил по доступной тогда информации.
Как выявлять выборочную обработку сигналов
- Считайте кандидатов, допустимые сигналы и исполнения отдельно. Предупреждения примера 10% и 30% ручных пропусков — поводы для аудита, не вероятности выборочного отбора. Даже малый пропуск по результату смещает итог; высокая доля исключений по правилу может быть допустима.
- Запишите причину отказа и время. Фильтр до оценки отличается от импровизации после итога. Для намеренного усмотрения сохраняйте суждение момента решения вместо незаметного превращения в механический фильтр.
- Восстановите весь период. Сопоставьте все допустимые сигналы с выборочно исполненными, включая трудные условия. Разрыв требует диагностики: отбор, сбой исполнения или истинный эффект заранее заданного фильтра. Сам разрыв причины не определяет.
Перечень сигналов: конкретный контроль
Назначьте статус каждому кандидату в автоматически созданном или сверенном с журналом логе. Сделайте статусы взаимоисключающими на выбранном уровне, сохраняя отдельные запросы и исполнения для дошедших до исполнения:
| Статус | Определение | Иллюстративное соглашение анализа |
|---|---|---|
taken | Допустимый сигнал, исполненный по заданному правилу. | Цель выше 90% описывает соблюдение среди допустимых исполнимых сигналов, не всех сырых кандидатов до фильтров. |
skipped_by_rule | Кандидат, исключённый зафиксированным до оценки правилом: календарём, корреляцией или временем. | Универсального процентного лимита нет. Сохраните правило, измеренные входы и причину для проверяемости исключений. |
skipped_manual | В остальном допустимый сигнал, пропущенный из-за немоделируемого усмотрения. | Пример использует 10% как повод для эскалации. Любой пропуск по результату требует расследования даже ниже этой цифры. |
invalid_data | Необходимый вход отсутствовал, был недопустим или недоступен при решении. | Предупреждение примера 5% иллюстративно. Диагностируйте вид и время проблемы, не скрывая её как обычное исключение правилом. |
Сбои поставщика или инфраструктуры после допустимого сигнала требуют дополнительных статусов исполнения, таких как order_rejected, order_state_unknown или partial_fill. Они не автоматически недопустимые рыночные данные. Явно задавайте знаменатель ошибки, иначе неограниченные исключения правилом сделают цель «taken» математически обманчивой.
По политике примера ручные пропуски выше 10% останавливают продвижение до понимания расхождения. Либо оформите обоснованную причину новым правилом и оцените новую версию, либо признайте ненадёжность исполнения метода в нынешнем процессе. Не переименовывайте старые дискреционные пропуски так, будто фильтр уже существовал. Порог — выбор процесса, а не граница исчезновения смещения отбора.
Выборочный отбор в продаже EA
Разумный критерий покупки — воспроизводимость нужного теста со своими данными и издержками и понимание ограничений. Доступ к исходникам позволяет глубже проверять, но закрытый продукт не автоматически мошеннический: у него предел валидации, возможно неприемлемый вашей политике. Цена, гладкая кривая и рейтинг не заполняют пробел. Не покупайте и не запускайте лишь из-за одного убедительного отобранного отчёта.
9. Распространённые ошибки тестирования
Ошибка 1: оптимизация на всех данных
Исследователь пробует 200 сочетаний за пять лет и выбирает +180% без нетронутой оценки. Максимум отобран, его величина сама не устанавливает преимущество. Используйте хронологическую разработку и оценку, запишите разделение в поле 4, все 200 испытаний в поле 7. Деление 70/30 — пример, не универсальное правило. Перспективный этап полезен, но не превращает прежний отбор задним числом в независимый тест.
Ошибка 2: решающий вывод по малой исторической выборке
Шесть месяцев и 24 сделки — всё ещё бэктест, но возможны слабые доказательства широкого долгосрочного утверждения. Неопределённость велика относительно среднего, период может содержать один режим. Выбирайте историю под область применения и сообщайте реальные режимы; «несколько лет» не гарантируют охвата. Числа 200 или 500 — примеры сценариев, не стандарты. Судите о точности по распределению, зависимости и порогу решения.
Ошибка 3: одна сторона котировки без модели другой
Длинная позиция, открытая и закрытая по bid, пропускает ask входа и в простом сопоставлении завышает итог примерно на спред. Длинный вход — ask, выход — bid; короткий вход — bid, выход — ask. История одного bid не автоматически непригодна при обоснованной модели ask и исполнения, но приближение должно быть явным. Записанные тики MT5 и правильно настроенный тиковый процесс MT4 — варианты исследования, не доказательство полной реалистичности.[6] Запишите bid, ask, среднюю и соглашения сгенерированных/записанных данных в поле 3.
Ошибка 4: игнорирование различий режимов
Результат одной политики, волатильности или ликвидности может не переноситься в другую среду. Не называйте целые многолетия однородно низко- или высокоставочными, QE или QT при изменении условий внутри. Скользящая оценка выявляет различия окон, но режимному преимуществу нужны достаточные доказательства и правило распознавания режима по доступной тогда информации. Фильтр после просмотра удачных окон — новый вариант исследования, не автоматическое включение.
Ошибка 5: переносимость без проверки
Удачный на вид EUR/USD не устанавливает работу метода на других валютах. Для межпарного утверждения оцените заранее заданный набор, например пять–восемь пар в учебном дизайне, с нужными издержками и зависимостью. Если исходное утверждение действительно только об EUR/USD, провал другой пары сам его не опровергает и не доказывает подгонку. Область вывода должна совпадать с областью доказательств.
Ошибка 6: путаница доходности и результата с поправкой на риск
Допустим, A сообщает годовую доходность 35% и просадку 22%, B — 25% и 8% на сопоставимом горизонте. Простое сравнение в стиле Калмара:
- A: 35 / 22 ≈ 1,6.
- B: 25 / 8 ≈ 3,1.
B имеет большее отношение доходности к наблюдавшейся просадке при этих определениях. Это не устанавливает все стороны устойчивости или будущего риска. По двум числам Шарпа не вычислить: нужен ряд доходностей заданной частоты, согласованный ориентир и годовое соглашение: (средняя периодическая доходность - опорная доходность) / стандартное отклонение периодической доходности с обоснованием любого годового множителя корня из числа периодов.
Годовая доходность, делённая на месячное стандартное отклонение без согласования единиц, — неадекватный Шарп. Пропущенные входы означают недоступность метрики, не право выдумывать приближение. Статья 15.9 разбирает Шарпа, Сортино и Калмара и непокрытые ими стороны.
Ошибка 7: прекращение измерений после запуска
Кандидат может пройти историю, демо и ограниченный пилот, а после увеличения капитала измерения прекратятся. Продолжайте сверять реализацию и сравнивать результаты с допущениями, неопределённостью и сценарными пределами теста. У новой выборки своя неопределённость: одного попадания среднего в старый интервал недостаточно. Статья 15.10 задаёт ритм анализа и решения сохранить, наблюдать, сократить или остановить. Здесь предоставляется запись сравнения: определения метрик, исходные интервалы, издержки и квантили симулированной просадки.
Ошибка 8: смена метода после каждой убыточной серии
Еженедельные изменения после пяти–десяти убытков могут опережать поступление информации о каждой версии. При независимых результатах и вероятности выигрыша 52% пять убытков в одном заранее заданном блоке имеют вероятность 0,485 ≈ 2.5%. Шанс хотя бы одной такой серии где-нибудь в 100 сделках около 75%. Во втором случае много перекрывающихся возможностей серии; обращение с окнами как независимыми по формуле 1 - (1 - q^k)^(N-k+1) завышает точную вероятность серии в этом примере.
Это расчёты модели, не утверждение независимости ваших сделок. Урок — верный вероятностный вопрос до объявления стратегии сломанной. Используйте заранее заданные критерии анализа, не впечатление последней недели. Операционные сбои, превышенные лимиты и доказанный дефект данных могут требовать немедленной паузы; для защиты счёта не нужно ждать значимого падения ожидания. Поправка правила создаёт версию с собственной оценкой.
До изменения правила: проверяйте слои по порядку
Не путайте дефект стратегии с реализацией или данными. До правки торговых правил установите измеряемое результатом:
- Данные и исполнение. Сверьте журнал с поставщиком, подтвердите версию и сосчитайте нарушения. Загрязнённый период не трактуют как чистый результат заданной стратегии, но он может дать полезные сведения об операционном сбое.
- Издержки. Сравните спред, проскальзывание и комиссию с карточкой. Падение ожидания 0,15R при росте затрат 0,15R может объяснить разницу. Издержки — часть жизнеспособности торгуемой стратегии даже при прежнем входном механизме.
- Режим. Проверьте фактическое наступление нужных условий и правильность фильтра допустимости.
- Преимущество. Лишь затем оценивайте распределение результатов и неопределённость относительно заранее заданного правила решения, а не только среднее последней дюжины сделок.
Полная таблица «менять систему или исполнение», критерии понижения и процесс анализа находятся в статье 15.10. Здесь сначала разрешают три диагностических слоя и лишь затем относят разницу к входам и выходам. Настоящее изменение возвращает к версионному тестированию, не служит невидимой заплаткой старых доказательств.
10. Список проверок — два отдельных допуска к реальной торговле
Список содержит 20 пунктов в пяти категориях: статистика, методология, издержки, перспективный тест и операционная дисциплина. Допусков два: пункт 17 требует настоящих реальных наблюдений и не может предшествовать первому ограниченному реальному исследованию. В этой версии проверьте 1–16, 19 и 20 до рассмотрения отдельно разрешаемого исследования; проверьте все 20 до последующего решения о масштабе. План непрерывного измерения пункта 20 должен быть до пилота, не только после.
Балл не компенсирует критического пробела. «Не применимо» требует письменной причины. Все длительности, количества и пороги здесь — выбор сценария, не стандарты. Заполнение не сертифицирует прибыльность и не разрешает ордера.
Страница не отправляет ответы и намеренно не сохраняет их как исследовательскую запись. Браузер может восстановить форму при возврате; это не доказательство проверки пунктов. Сохраните проверенный список в датированном архиве теста.
Обязательный архив: одиннадцать компонентов
Для анализа запуска нужен аудиторский след. Без него через шесть месяцев можно не восстановить правила, данные и допущения исходного результата:
- Карточка из двенадцати полей: поля 1–9 до оценки, результаты и ограничения после; манифест воспроизведения заполнен и проверен.
- Исторические входы: сырые рыночные и календарные данные, источник, дата получения, разрешения, хеши, очищенные версии, код преобразований и журнал пробелов, дубликатов, пересмотров.
- Спецификация и реализация стратегии: читаемые правила, код, параметры, версии зависимостей и платформы, время фиксации и точные команды. Фиксируйте до OOS, не после просмотра.
- Отчёты IS, валидации и OOS: границы разделения, все испытания, кривые капитала, интервалы ожидания, профит-фактор и просадка по окнам плюс сопоставимые базовые результаты.
- Отчёт симуляции и стресса: для примера 1 000 или больше путей с начальным значением, кодом, блоками, горизонтом, размером, квантилями доходности и просадки, частотами превышений и ограничениями. Больше путей не значит больше рыночных наблюдений.
- Модель издержек и счёта: сессионные или тиковые спреды, допущения проскальзывания, отдельные ставки и множители дней, комиссия, конверсии, маржа, ограничения инструмента.
- Экспорт демо или бумажной торговли: полный плановый период, для примера 30 дней, с исходными временами сигналов, статусами и исторической сверкой.
- Журнал ограниченного реального этапа, если разрешён и завершён: плановый период, для примера 90 дней, с R₀, чистым R, соглашением MAE/MFE, фактическими затратами, запросами, исполнениями, инцидентами и полезными снимками до/после каждой сделки.
- Перечень сигналов: все кандидаты и причины исключений, ручных пропусков, плохих данных и сбоев исполнения с воспроизводимыми знаменателями отклонений.
- Запись настроек поставщика: тип счёта, условия символа, плечо, минимальный объём, стопы и сборы на дату теста. Сохраните доказательства спора об исполнении без раскрытия учётных данных.
- Восстановимые копии и запись решения: зафиксированные EA, скрипты и шаблоны, проверенные выводы, нерешённые ограничения, ответственные, места восстановления и условия паузы либо возобновления.
Пример каталога — strategy_X/2026-Q2/{01_data,02_IS,03_OOS_locked,04_montecarlo,05_demo,06_micro_live,07_artefacts}. Храните восстановимые копии в подходящем хранилище и защищайте чувствительные выгрузки. Облако — выбор политики данных, не требование. Хеши выявляют различия файлов, но не доказывают правильность исходных котировок.
Первый пройденный допуск разрешает рассмотрение вопроса о разрешении ограниченного реального исследования, а не автоматический ордер. Все двадцать допускают позднюю проверку запуска или масштаба по плану. Критический пробел возвращает проект к нерешённому этапу. Столь же допустимое итоговое решение — не запускать.
Частые вопросы
Сколько длится весь путь от бэктеста до рассмотрения реального запуска?
Иллюстративная последовательность — четыре–восемь недель истории, 30 дней демо и 90 дней отдельно разрешённого ограниченного реального пилота: 148–176 дней, около пяти–шести месяцев. Сложное многоактивное или многотаймфреймовое исследование может занять восемь–шестнадцать недель одной исторической стадии. Это плановые допущения, не отраслевые стандарты или гарантии доказательств. Редким сигналам нужно более долгое наблюдение. Не прошедший допуск кандидат остаётся без разрешения; время не оправдывает снижения критерия. Необязательная бумажная стадия, паузы и исправленные версии добавляют время, а не незаметно поглощаются исходным графиком.
Достаточно ли MT4 Strategy Tester для валидации?
Зависит от стратегии, данных и конфигурации. Модель только открытий не устанавливает не представленной ею внутрибараной последовательности. Фиксированный спред может не подходить чувствительному правилу; полной скользящей WFA нужны явно управляемые окна и записи. Тиковый процесс вроде TDS добавляет возможности, но качество моделирования 99% не удостоверяет правильность. Проверьте записанные и сгенерированные тики, стороны, издержки, время и примеры сделок. Исторический Forward MT5 даёт отложенное разделение, а не перспективное реальное наблюдение.[6] Выбирайте инструменты под нужные доказательства, не предполагая, что имя платформы делает тест верным.
Что делать, если в истории лишь 50 сделок?
Рассмотрите более длинную релевантную историю, возможно десять вместо пяти лет; заданное межпарное исследование при реальной переносимости гипотезы; чувствительность блочного бутстрэпа на длинах 5, 10 и 20. Длинная история добавляет наблюдения, но не обязательно с постоянной частотой. Пять–восемь пар не дают автоматически столько же крат независимых доказательств. Бутстрэп вообще не создаёт рыночных наблюдений. Если неопределённость пересекает порог, запишите неопределённый или ограниченный частотой результат. Правдоподобный механизм не заменяет доказательств и сам не разрешает меньшую реальную позицию. Продолжайте исследовать или откажитесь от запуска по плану.
Можно ли пропустить демо после хорошего бэктеста?
Хорошая история не отвечает на вопросы работы оповещений, запуска, доставки данных, состояний ордеров и процесса оператора на новых наблюдениях. Демо или подходящая тень выявляют дефекты до риска реальными средствами. Демо не полностью измеряет реальные проскальзывание и ликвидность, поэтому последующее исследование исполнения — отдельное явно разрешённое решение. Смысл не в ритуале платформы, а в непропуске операционных вопросов, не проверенных бэктестом.
Какая годовая доходность реалистична для розничной стратегии?
У статьи нет надёжных данных для единой «типичной прибыльной розничной доходности». Доля убыточных счетов регулятора — не распределение доходностей прибыльных. Очень высокие заявления требуют проверки плеча, риска, знаменателя, денежных потоков, отбора, затрат и длины удачного периода. Проп-счёт может использовать знаменатель, отличный от собственного капитала трейдера; разницу объясняют. Примеры 50%, 200% или 500% — проверяемые заявления, не пороги мошенничества или невозможности. Задайте проверяемое решение по чистому R с неопределённостью вместо рекламной цели годовой доходности.
Как отличить смену режима от ухудшения стратегии?
Начните с данных, реализации и затрат, затем проверьте наступление нужных условий. Реально не просмотренный свежий период даёт новые доказательства фиксированных правил, но размер и режимы ограничивают вывод. Шесть месяцев не автоматически достаточно. Если реконструкция сигналов и перспективное исполнение расходятся на тех же датах, сверяйте их вместо объяснения всего рынком. Использование периода для нового фильтра делает его разработкой этой редакции. Решения сохранить, наблюдать, уменьшить или остановить следуют процессу в статье 15.10 с отдельными защитными контролями немедленных операционных проблем.
Может ли перспективное наблюдение предшествовать бэктесту?
Да, особенно при отсутствии исторических входов на момент времени или дискреционных меток, но опишите ограничение. При пяти сделках в неделю 30 дней дают около 21 наблюдения, полгода около 130, два года около 520. Точность зависит от разброса и зависимости, не одних чисел. Процесс с 50 сделками в день накапливает более 1 000 в месяц, но общие события делают их сильно зависимыми. История добавляет охват и контекст; перспектива записывает реально доступное знание и действия. Ни одно название не гарантирует вывода, отсутствие истории не требует экспериментов на деньги.
Возможны ли маржин-колл и принудительное закрытие у хорошо проверенной стратегии?
Да. Невиданный шок ликвидности или политики, большая аллокация, новые маржинальные условия или инфраструктурный сбой могут превысить условия теста. Ресэмплинг сделок не создаёт каждого неизвестного события. Используйте лимиты плана, записанные критерии масштаба и отката, процедуру инцидентов в статье 15.8. Статья 15.11 рассматривает масштаб. Некоторые сбои стресс-моделируются, но ни одна модель не гарантирует полной тяжести. Маржинальное предупреждение и автозакрытие — специфические механизмы поставщика, не взаимозаменяемые универсальные события. Удачный квартал не разрешает риск вне плана.
Можно ли купить EA вместо разработки стратегии?
Купленную реализацию можно оценить, но цена, рейтинг и отобранный бэктест не заменяют проверки. Запросите историю испытаний и версий, воспроизводимые данные и издержки и достаточно информативные реальные записи, если заявлены. Пример предпочитает для отбора публичную реальную историю минимум трёх лет; это не гарантия, сторонний трекинг требует происхождения и проверки денежных потоков. Исходник даёт глубокую валидацию; при обязательности по вашей политике отказ означает несоответствие продукта, не доказательство нечестности продавца. Учтите отбор, скрытые варианты, выживание, текущую осуществимость и исполнение. Статья не устанавливает надёжную общую успешность рыночных EA или универсальную денежную выгоду покупки против разработки.
Ручное тестирование по природе менее обоснованно, чем автоматизация?
Нет. Ручному тесту нужны фиксированные выборка и решения, полные записи и контроль знания задним числом. Автоматизации — правильный код, доступные на момент входы и убедительное исполнение. Оба способны многократно повторять свои ошибки. Укажите дискреционные части и сохраняйте решения до исходов.
Можно ли повторить период вне выборки?
Неизменный расчёт повторяют для воспроизведения или аудита. Если результат направляет правку или отбор, период становится разработкой изменённой гипотезы. Сохраните первый результат, честно пометьте дальнейшее использование; новое имя файла не возвращает непросмотренность тех же данных.
Что делать, если стоп и цель внутри одной свечи?
Одни OHLC не устанавливают порядок. Используйте подходящие подробные данные и стороны котировок либо сообщайте пессимистичный стоп-первым и оптимистичную цель-первой. Даже хронология тиков не устанавливает все доступные объёмы исполнения и не гарантирует существования ордера до котировки.
Доказывает ли высокая доля выигрышей положительное преимущество?
Нет. Пример из 47 сделок выигрывает в 57,4% случаев, но сумма −5,1R: средний убыток больше выигрыша. Проверяйте реализованную чистую выплату с исходным рисковым знаменателем. Биномиальный тест вероятности — не тест среднего чистого R.
Устанавливает ли Монте-Карло максимально возможную просадку?
Нет. Квантили описывают заданное симулированное распределение, не жёсткие границы. Результат зависит от входной выборки, ресэмплинга, длины блока, горизонта и размера. Пропущенные шоки, внутрисделочный капитал и отказы ликвидности не возникают автоматически от большего числа путей.
Надо ли вычитать спред из каждой выгруженной сделки?
Лишь если он ещё не включён. Реальные bid/ask входа и выхода обычно включают спред и реализованное проскальзывание. Добавляйте только отсутствующие сборы в согласованных валютах и объёмах. Сверяйте комиссию и финансирование вместо двойного вычета.
Оправдывает ли неопределённый итог торговлю половинным размером?
Сам по себе нет. Недостаточные доказательства остаются недостаточными. Ограниченному исследованию исполнения нужны отдельные цель, разрешение, осуществимый минимум ордера и принятый бюджет потерь. Наблюдение без запуска — допустимое решение.
Источники и примечания проверки
Первые шесть записей — методологическая литература. Она поддерживает методологический фон, не результативность синтетических стратегий или универсальные пороги выборки, риска и запуска. Ссылки платформ ниже описывают технические функции: документация относится к конкретной платформе, не каждому брокеру или площадке.
Литература польской редакции
- Robert Pardo, Оценка и оптимизация торговых стратегий, Wiley, 2008. Разработка, оптимизация и оценка walk-forward стратегий.
- David Aronson, Доказательный технический анализ, Wiley, 2007. Проверка гипотез, поиск в данных и статистическое рассуждение при оценке стратегий.
- Marcos López de Prado, Достижения финансового машинного обучения, Wiley, 2018. Исследовательский отбор, переобучение бэктеста и проверка зависимых финансовых наблюдений.
- Howard B. Bandy, Количественный технический анализ, Blue Owl Press, 2015. Оценка систем, ресэмплинг, размер позиции и просадка.
- Van K. Tharp, Полное руководство по размеру позиции, International Institute of Trading Mastery, 2008. Результаты в R, размер и оценка систем. Статистика R сама не одобряет запуск.
- MetaQuotes, Тестирование торговых стратегий, и MetaTrader 5, Тестирование стратегий. Исторические режимы, форвард-разделение и настройки моделирования. Исторический форвард тестера — не перспективный период реальных новых данных.
Ниже дополнительные технические источники ранней английской редакции. Численные примеры остаются учебными сценариями, не независимо проверенными исследованиями рыночной результативности. Точные биномиальные интервалы сверены численно, примеры NumPy и реестра издержек проверены отдельно от брокерского счёта.
- TradingView, Стратегии, и Перерисовка: допущения эмулятора брокера, синтетические графики и время информации. Это описания платформы, не универсальные биржевые правила.
- Bailey и соавторы, Вероятность переобучения бэктеста, и Дефлированный коэффициент Шарпа: отбор и ненормальность оценки результатов.
- MetaTrader 5, Совершение сделок, и MQL5, Свойства символа: обработка ордеров платформы и контрактные настройки объёма, финансирования, исполнения.
- MetaTrader 5, Тестирование стратегий: исторические форвард-разделения, тиковые режимы, задержка и счёт/издержки, включая ограничения расчёта прибыли в пипсах.
- Глобальный валютный комитет, Использование last look на валютных рынках: определение и раскрытие практик last look на оптовом валютном рынке.
- NIST/SEMATECH, Доверительные интервалы доли: построения интервалов и допущения.
- SciPy, binomtest, и ttest_1samp: разные тесты биномиальной вероятности и среднего генеральной совокупности.