Я столкнул «снайпера» и «системщика» на 10 000 прогонов. Снайпер слил в 93% случаев. Хотя средний чек у него ВЫШЕ
Опять полез в симуляцию. В прошлый раз считал, правда ли трейдеры с иксами умнее тех, кто слил — оказалось, нет, всё решает размер ставки. Но там остался вопрос, который не давал мне покоя, и я сел проверять дальше.
Есть вечный спор. Одни говорят: «надо ждать. Сидишь, ловишь идеальный вход, и когда звёзды сошлись — заходишь крупно, на всю котлету». Другие: «забей на тайминг, торгуй системно, фиксированным процентом, всегда одинаково». Снайпер против пулемётчика.
Интуиция кричит, что снайпер умнее. Он же выбирает! Он не палит во все стороны, он ждёт верный момент и берёт куш. А системщик — скучный робот.
Я решил это прогнать. Не спорить, а посчитать.
ЧТО Я СДЕЛАЛ
Два трейдера. Одинаковый старт — 10 000 долларов. Один и тот же рынок (эдж скромный, реалистичный — угадывание чуть выше монетки, 53%). 1000 сделок. И так 10 000 параллельных прогонов на каждого, чтобы убрать везение одного забега.
СИСТЕМЩИК: входит ВСЕГДА, но фиксированным процентом — 2% от текущего депозита. Скучно, механически, без эмоций.
СНАЙПЕР: ждёт «идеальный момент», поэтому торгует реже (заходит примерно в трети случаев). Но раз уж зашёл — крупно, 25% депозита. Он верит, что его тайминг даёт ему преимущество.
Маленькая деталь, которая всё решает: я дал снайперу почти то же угадывание на его «избранных» входах, что и системщику. Не выше. Потому что в этом вся суть: снайпер ДУМАЕТ, что его входы точнее, а по факту — нет. Это иллюзия точности. Кто реально умеет стабильно ловить лучшие входы — тот не читает этот пост, он на яхте.
ЧТО ПОЛУЧИЛОСЬ (10 000 прогонов)
СИСТЕМЩИК (всегда 2%): — слил (ушёл в минус 90%): 0% — медиана итога: 27 200 долларов — в плюсе закрылись: 94% прогонов
СНАЙПЕР (ждёт, заходит 25%): — слил: 93% — медиана итога: 903 доллара (это в полу, обнулился) — в плюсе закрылись: всего 4,5%
Девяносто три процента снайперов обнулились. При том же рынке и почти том же проценте угадывания. Разница только в том, что снайпер ставил крупно.
А ТЕПЕРЬ САМОЕ ИНТЕРЕСНОЕ
Смотрите на средний чек, не на медиану.
Средний итог снайпера: 46 000 долларов. Средний итог системщика: 33 000 долларов.
У снайпера средний ВЫШЕ. Хотя 93% снайперов лежат на дне.
Как так? Потому что из 10 000 снайперов нашлась горстка, которой дико повезло — их крупные ставки совпали с удачной серией, и они улетели в космос, на миллионы. Эти несколько везунчиков задрали «средний» так, что он перекрыл тысячи трупов.
И вот эти везунчики — единственные, кого вы видите. Они постят скрины, ведут каналы, продают курсы «как ловить лучшие входы». А 93% снайперов, которые слились ровно с той же стратегией, молча удалили приложение и никому ничего не пишут.
Когда вам показывают «среднюю доходность» — вам показывают яхту выживших, а кладбище за кадром.
Последняя цифра, которая меня добила: я сравнил снайпера и системщика попарно, прогон в прогон. Снайпер обогнал системщика только в 3,2% случаев. В 97 случаях из 100 скучный системщик с его 2% оказался богаче «снайпера».
ВЫВОД
Я не топлю за то, что тайминг не существует. Я про то, что «ждать идеальный вход и заходить крупно» — это не стратегия гениев, это лотерея, которая выглядит как стратегия гениев, потому что мы видим только победителей лотереи.
Размер ставки решает, выживете ли вы достаточно долго, чтобы ваш эдж вообще успел сработать. Можно угадывать чаще монетки и всё равно обнулиться, если ставишь крупно.
Скучный фиксированный процент почти всегда обгоняет красивого снайпера. Просто про это не снимают рилсы.
Код симуляции ниже — кому интересно, поменяйте проценты и посмотрите, где ломается. Вдруг при вашем эдже снайпер таки выигрывает — мне правда интересно, накидайте в комменты, прогоню. И себе я сделал калькулятор размера позиции, чтобы считать этот самый фиксированный процент под свой депозит и стоп — лежит бесплатно на моём сайте riskdesks.com, в разделе калькуляторов. Регистрации и прочей шелухи нет, делал для себя.
import numpy as np
rng = np.random.default_rng(7) N_TRADES, N_RUNS, START = 1000, 10_000, 10_000.0 RUIN = START * 0.10
P_WIN = 0.53
def systematic(p_win, risk=0.02): eq=np.full(N_RUNS,START); alive=np.ones(N_RUNS,bool); ruin=np.zeros(N_RUNS,bool) for _ in range(N_TRADES): w=rng.random(N_RUNS)<p_win eq=np.where(alive, eq+np.where(w,risk,-risk)*eq, eq) nr=alive&(eq<=RUIN); ruin|=nr; alive&=~nr return eq,ruin
def sniper(p_win, conviction=0.25, hit=0.52, frac=0.30): eq=np.full(N_RUNS,START); alive=np.ones(N_RUNS,bool); ruin=np.zeros(N_RUNS,bool) for _ in range(N_TRADES): takes = rng.random(N_RUNS)<frac w=rng.random(N_RUNS)<hit delta=np.where(takes, np.where(w,conviction,-conviction)*eq, 0.0) eq=np.where(alive, eq+delta, eq) nr=alive&(eq<=RUIN); ruin|=nr; alive&=~nr return eq,ruin
def rep(name,e,r): print(name) print(f" слив {r.mean()*100:.1f}% | медиана ${np.median(e):,.0f} | " f"в плюсе {(e>START).mean()*100:.1f}% | средний ${np.mean(e):,.0f}")
print(f"Старт ${START:,.0f} | {N_TRADES} сделок | {N_RUNS:,} прогонов | сид=7") print(f"Рынок: эдж {P_WIN*100:.0f}%, RR 1:1\n")
es,rs = systematic(P_WIN, 0.02) rep("СИСТЕМЩИК (всегда 2%)", es, rs)
esn,rsn = sniper(P_WIN, 0.25, 0.52, 0.30) rep("СНАЙПЕР (ждёт, заходит 25%)", esn, rsn)
print(f"\nСнайпер обогнал системщика в {(esn>es).mean()*100:.1f}% прогонов")






