На счете 50 тысяч, потерять можно две: считаем риск prop challenge
Вы открываете торговый терминал, а там $50 000. Приятное число. Можно даже на минуту почувствовать себя управляющим небольшого фонда. Потом открываете условия: после потери $2 000 счет закрывается.
Считать риск от пятидесяти тысяч все еще хочется. Полпроцента на сделку выглядит скромно, почти педантично. Только эти $250 съедают восьмую часть разрешенного убытка. Восемь стопов подряд, и обсуждать долгосрочное преимущество стратегии придется уже на новом счете.
В prop challenge трейдер платит за попытку пройти отбор: заработать заданную сумму, соблюдая лимиты. Даже прибыльная стратегия может не пройти его, если сначала попадет в полосу убытков. Посчитаем, как размер позиции меняет эту вероятность и что остается от выгоды после оплаты попыток.
Для этого хватит одного учебного счета и Python из стандартной установки. Параметры ниже мы задаем сами: это условные правила и условная стратегия, на которых удобно проверить арифметику.
1. Переписываем тариф в две границы
Пусть условия такие:
| Параметр | В нашем примере |
|---|---|
| Начальный баланс | $50 000 |
| Цель по прибыли, | $3 000 |
| Допустимый убыток от старта, | $2 000 |
| Успех | капитал достиг $53 000 |
| Провал | капитал упал до $48 000 |
Пока нижняя граница фиксирована. Касание любой границы завершает попытку. Дневных лимитов, второй фазы и срока окончания нет. Позже вернем их в задачу.
Разрешенная просадка дает начальный запас на убытки. Она не заменяет номинал счета при расчете маржи или доступного числа контрактов, но именно с ней нужно сравнивать денежный риск сделки.
Если стоп вместе с издержками обходится в $250, получаем:
Обе цифры верны. Вторая лучше объясняет, сколько неудач переживет счет.
Еще полезно сразу разделить цель на допустимый убыток: . Нужно заработать полтора доллара на каждый доллар начального запаса. Когда сравниваете два тарифа, начните с этого отношения и способа расчета просадки. Крупное число на обложке тарифа подождет.
2. Останавливаем бэктест вовремя
Возьмем десять сделок: шесть прибылей по $500 и четыре убытка по $500. Сумма равна плюс $1 000. Теперь переставим сделки.
Если сначала идут шесть прибылей, на шестой сделке капитал достигает $53 000. Отбор пройден. Если сначала идут четыре убытка, на четвертой сделке получаем $48 000. Попытка закончилась, а последующих шести прибылей на этом счете уже не будет.

Учебные последовательности с результатом сделки плюс или минус $500. Каждая линия обрывается при первом касании границы.
Обычный отчет бэктеста может спокойно сложить все десять результатов. Проверка challenge должна завершить расчет в момент нарушения. Иначе получится прибыль от сделок, которые правила уже не разрешили бы совершить.
На языке теории вероятностей это задача о первом достижении границы. Нас интересует, куда счет попадет раньше: к цели или к допустимому минимуму. Итоговая прибыль за произвольно выбранный месяц отвечает на другой вопрос.
3. Задаем стратегию, для которой есть точный ответ
У нашей учебной стратегии каждая сделка независимо от предыдущих приносит либо , либо . Вероятность прибыли , убытка . Риск фиксирован в долларах, позиции не увеличиваются вслед за балансом. Результаты считаем уже после издержек: дополнительно комиссия из них не вычитается.
Матожидание одной сделки:
При риске $500 получается плюс $50 в среднем на сделку. Звучит неплохо. Но первые четыре сделки вполне могут оказаться убыточными: вероятность именно такого старта равна . Это только один из путей к провалу. Можно проиграть отбор и после нескольких прибылей.
Для разных средних выигрышей и убытков используется обычная формула . Доля прибыльных сделок сама по себе не показывает наличие преимущества. А если статистика посчитана до комиссии, сначала добавьте модель торговых издержек.
В нашей симметричной модели можно обойтись без случайных чисел. Представим капитал как положение на лестнице. Ступень равна долларов, нижний край находится в нуле. Тогда стартуем со ступени , а цель находится на ступени .
Обозначим вероятность добраться до верха со ступени через . После следующей сделки мы окажемся на соседней ступени, поэтому:
Решение этой рекурсии дает вероятность прохождения:
Формула работает здесь потому, что сделки независимы, шаги одинаковы, а границы неподвижны и точно попадают на ступени. Если шаг не делит расстояния до границ нацело, эту формулу нельзя использовать с дробным числом ступеней как готовый точный ответ.
Проверка здравого смысла: при у стратегии нет преимущества, и формула заменяется на . Для наших границ это 40%. До убытка идти ближе, чем до цели. Изменение размера равных шагов, точно укладывающихся между границами, эти 40% не улучшает.
4. Сравниваем риск и время
Теперь подставим наши 55% и четыре размера позиции. Среднее число сделок до завершения попытки тоже можно вычислить точно:
Эта запись относится к . Считаем длительность всех попыток, включая провальные, а не только успешных.
| Риск сделки | Доля начального запаса | Вероятность пройти | Среднее число сделок до любой границы |
|---|---|---|---|
| $100 | 5% | 98.20% | 291.0 |
| $250 | 12.5% | 81.39% | 82.8 |
| $500 | 25% | 63.76% | 23.8 |
| $1 000 | 50% | 52.20% | 6.1 |
Это расчетные вероятности нашей модели. Они ничего не говорят о доле успешных клиентов какой-либо компании.
Маленькая позиция дает преимуществу больше сделок, чтобы проявиться. Цена видна в последнем столбце. При риске $100 попытка длится в среднем 291 сделку. Если стратегия торгует редко, а доступ к счету оплачивается ежемесячно, ожидание может оказаться дорогим.
Соблазнительный результат 98.20% держится на сильном допущении: вероятность прибыли всегда равна 55%. В реальной торговле ее приходится оценивать по ограниченной истории. Если мы ошиблись и получили ровно 50%, шанс прохождения в той же модели опускается до 40%, в том числе при риске $100. Тысячи симуляций уточняют расчет с заданными параметрами, но не делают сами параметры достовернее.
Проверяем числа своими руками
Скачайте пример на Python и запустите:
python3 prop-challenge-example.py
В нем нет сторонних библиотек. Скрипт считает точный ответ, затем разыгрывает по 20 000 попыток для каждого размера позиции. Генератор получает фиксированное начальное значение 20260917, поэтому результат можно повторить.
Правило остановки в симуляции простое: после каждого шага проверяем, достигнута ли верхняя или нижняя граница. Для защиты от слишком долгого расчета есть предел 10 000 сделок на попытку. Попытки, не достигшие ни одной границы за это время, идут в отдельный столбец censored; записывать их в провалы было бы ошибкой.
В проверенном запуске незавершенных попыток оказалось ноль:
| Риск сделки | Точная вероятность | Доля успехов в симуляции |
|---|---|---|
| $100 | 98.20% | 98.22% |
| $250 | 81.39% | 81.54% |
| $500 | 63.76% | 63.83% |
| $1 000 | 52.20% | 52.56% |
Совпадения до последнего знака ждать не нужно: правая колонка получена случайной выборкой. При 20 000 попыток максимальная стандартная ошибка доли составляет примерно 0.35 процентного пункта. В скрипте есть проверки граничного случая без преимущества и согласованности симуляции с формулой.
Для первого эксперимента замените P = .55 на .5, сохранив остальные условия. У всех четырех размеров позиции результат будет колебаться около 40%. Затем попробуйте .52. Так хорошо видно, насколько выбор размера позиции зависит от предполагаемого преимущества.
5. Проверяем, не движется ли нижняя граница
Все предыдущие числа относятся к статическому лимиту $48 000. Если правила используют trailing drawdown, граница поднимается вслед за максимумом капитала. В простейшем варианте без потолка:
Здесь обозначает капитал в момент , а допустимый минимум. Для примера пересчитываем его после каждой закрытой сделки.
Счет вырос с $50 000 до $51 500. Статическая граница по-прежнему равна $48 000, поэтому запас составляет $3 500. Плавающая уже поднялась до $49 500, оставив запас $2 000.
Теперь капитал снижается до $49 500. При статическом лимите у нас еще $1 500 запаса. При плавающем попытка закончилась, хотя от начального баланса потеряны всего $500.

Один условный путь: 50 000, 51 000, 51 500, 50 500, 49 500 долларов. Плавающая граница равна достигнутому максимуму минус 2 000 долларов.
В конкретном тарифе нужно выяснить, что компания считает максимумом. Баланс после закрытия позиций? Капитал с открытой прибылью? Результат на конец дня? Есть ли уровень, после которого граница перестает подниматься? Эти различия меняют исход одних и тех же сделок.
Если лимит следует за внутридневным максимумом с учетом открытых позиций, списка закрытых сделок недостаточно. Прибыль могла поднять границу внутри сделки, а последующий откат коснуться ее еще до выхода. Такой счет надо проверять по внутрисделочной траектории капитала.
6. Переносим расчет на свою стратегию
Для реальной проверки замените монетку с 55% на результаты стратегии после издержек. Понадобятся время сделок, их прибыль и убыток, а для внутридневных ограничений еще и изменение капитала внутри дня. Открытые одновременно позиции расходуют общий запас риска.
Дальше порядок работы такой:
- Перенесите правила тарифа в расчет: цель, общий и дневной лимиты, момент их пересчета, сроки и условия распределения прибыли по дням. Зафиксируйте, считается ли касание нарушением.
- Выберите несколько денежных размеров позиции, допустимых с учетом минимального контракта и маржи. Для каждого пересчитайте сделки и издержки.
- Постройте много возможных последовательностей. Проверяйте ограничения по мере движения капитала и прекращайте каждую попытку при первом нарушении или выполнении всех условий отбора.
- Отдельно сохраните успехи, провалы и попытки, которые не завершились за выбранный срок. Посчитайте длительность и расходы, затем повторите расчет с менее выгодными оценками стратегии.
Как получать такие последовательности, разобрано в туториале по Monte Carlo и bootstrap. Здесь есть тонкость: случайная перестановка сохраняет набор сделок, но меняет их порядок; bootstrap допускает повторное выпадение одних сделок и отсутствие других. Если результаты зависимы и убытки приходят сериями, поштучное перемешивание разрушит эту зависимость. Тогда имеет смысл выбирать блоки последовательных сделок, а не отдельные результаты.
С Келли тоже не стоит торопиться. В нашем бинарном примере его классическая формула дает . Но это доля собственного капитала для максимизации долгосрочного логарифмического роста при заданных вероятностях. Подставить 10% от номинальных $50 000 и рискнуть $5 000 в одной сделке было бы особенно коротким способом познакомиться с лимитом $2 000.
Даже применение этой доли к запасу просадки не дает автоматически оптимальный размер для challenge: цель, остановка, сроки и платежи меняют задачу. Вывод формулы и дробный Келли уже есть в статье о выборе размера позиции. Она вместе с материалами о просадке, издержках и Monte Carlo входит в подборку "Риск и размер позиции".
7. Считаем деньги после всех попыток
Осталось отделить прохождение отбора от получения денег. После отбора могут быть следующая фаза, плата за активацию, ограничения рабочего счета и условия первой выплаты. Вероятность пройти первую фазу не равна вероятности получить выплату.
Возьмем отдельный условный пример для бухгалтерии. Одна попытка стоит $120. Из 50 купленных попыток четыре принесли по $1 200 на руки. Всего заплачено $6 000, получено $4 800. Результат: минус $1 200. Четыре приятных уведомления о выплатах вполне совместимы с общим убытком.
Для модели с одной выплатой на успешную попытку:
Здесь это вероятность дойти до выплаты, ее размер после доли компании, а стоимость попытки. В нашем условном примере доля попыток с выплатой равна , а средний итог составляет:
При этих цене и размере выплаты безубыточность наступает при . Это арифметика примера, а не оценка реальных шансов трейдера.
Если возможны повторные выплаты, вместо одной выплаты нужно считать ожидаемую сумму всех поступлений за жизнь счета. Аналогично складываются расходы: покупка, продление, активация и остальные платежи. Условные расходы учитываются с вероятностью их возникновения. Плату за активацию, которую берут только после отбора, нельзя автоматически начислять каждой провальной попытке.
Перед покупкой заполните короткую карточку расчета: начальный запас до нарушения, риск всех открытых позиций, правило движения границы, вероятность и длительность прохождения в вашей модели, ожидаемые выплаты и полные расходы. Рядом запишите, откуда взята статистика стратегии и что получается при ухудшении ее параметров. Если от замены 55% на 52% решение меняется, сначала нужно разобраться с этой оценкой. Выбор красивого номинала счета пока можно отложить.
Авторы
Инженер торговых систем
Разработка торговых ботов с 2017 года: межбиржевой арбитраж (подключал до 30 бирж), парный арбитраж на коинтеграции между спотом и фьючерсами, скальпинг, фронтраннинг, торговля по новостям, сентиментный анализ, трендовые алгоритмы, а также алгоритмы управления и балансировки портфелей. Делает выставление ордеров до 1 мс, warehouse для big data, бэктестинг-движки, AI-агентов и интерфейсы для ботов (в т.ч. open-source profitmaker.cc). Стек: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, архитектура.