Тема
Take-Profit Yield Calculator — относительный выход + эффективность капитала
EV-модель для варианта directional с относительным take-profit (выход = процент от входа) вместо статической цены Harvester (≈0.99). Каркас — docs/strategies/harvester-yield.md; реализация и тесты —
crates/pm-analytics/src/harvester_yield.rs(take_profit_symmetric,roi_rate,compare_efficiency).Статус: калькулятор. Вердикт «эффективнее ли Harvester» — форвард/бэктест-gated (§5), не выносится здесь.
1. Зачем
Harvester выходит по СТАТИЧЕСКОЙ цене exit ≈ 0.99 и досиживает до почти-резолюции: большой захват (0.99 − p_e ≈ 9¢ на фаворите 0.90) ценой ДОЛГОГО удержания капитала (часы). Вариант take-profit выходит на exit = p_e·(1 + g) (напр. g = 0.05 → +5% от входа) с симметричным относительным стопом на p_e·(1 − x), освобождая капитал быстро для БОЛЬШЕГО числа итераций. Вопрос — эффективнее ли это по капиталу-во-времени, чем один долгий Harvester. Вход directional не меняется — расширяется только параметр выхода (статический → процент от входа).
2. Переменные
p_e = средняя цена входа
g = take-profit доля от входа (exit = p_e·(1+g); захват на выигрыш = p_e·g)
x = stop доля от входа (стоп-цена p_e·(1−x); x=g ⇒ симметрия)
r = стоп-эффективность ∈ [0,1] (0 = досидеть проигравших до $0; 1 = стоп режет на s_eff всегда)
s_eff = РЕАЛЬНАЯ цена стоп-фила (не порог); при симметрии s_eff = p_e·(1−x)
w = realised winrate (доля позиций, достигших +g раньше стопа/adverse-резолюции)
T_hold = среднее время удержания (T_H у Harvester — долго; T_tp у take-profit — коротко)3. Формула EV (обобщение Harvester-модели)
Per-share EV — та же формула Harvester, где exit и s_eff теперь функции p_e:
E[PnL/share] = w·(exit − p_e) − (1 − w)·(p_e − r·s_eff)
= w·p_e·g − (1 − w)·(p_e − r·s_eff)Break-even winrate (E = 0):
w* = (p_e − r·s_eff) / (p_e·(1+g) − r·s_eff)+EV ⟺ w > w* (edge_margin = w − w* > 0).
Предельные случаи (см. тесты take_profit_no_stop_is_steamroller_wall, take_profit_symmetric_stop_breakeven_half):
r = 0(нет стопа):w* = 1/(1+g)— приg = 0.05это ≈ 0.952. «Монетки перед катком»: выигрыш +5% част, но редкий проигрыш −100% доминирует. Без стопа нужен winrate ~95% — вот почему TP-режим ОБЯЗАН иметь стоп.r = 1, x = g(симметрия):w* = p_e·x / (p_e·2g) = 0.5. Симметричные ±g ⇒ break-even 50%.
4. Эффективность капитала — измерение сравнения с Harvester
Само по себе E[PnL/share] НЕ сравнивает режимы: Harvester захватывает больше на сделку, но держит капитал дольше. Метрика сравнения — доходность капитала В ЕДИНИЦУ ВРЕМЕНИ (roi_rate в harvester_yield.rs):
roi_rate = E[PnL/share] / (p_e · T_hold)За горизонт T тот же капитал прокручивается T/T_hold раз, поэтому малый захват p_e·g умножается на оборот T_H/T_tp. Take-profit эффективнее Harvester ⟺
roi_rate_tp > roi_rate_H ⟺ E_tp · T_H > E_H · T_tpгде E_H = w_H·(0.99 − p_e) − (1 − w_H)·loss_H (долгое удержание T_H), E_tp = w_tp·p_e·g − (1 − w_tp)·loss_tp (короткое T_tp ≪ T_H). Оборот T_H/T_tp — рычаг: меньший захват побеждает, только если удержание достаточно короче (тест take_profit_turnover_can_beat_harvester_capture).
5. Worked example (иллюстративный; входы (ii) — pending форвард)
Фаворит p_e = 0.90. Harvester: exit = 0.99, r = 0, w_H = 0.93, долгое удержание T_H = 100 (усл. единиц). Take-profit на том же фаворите: g = 0.05 (0.90 → 0.945), симметричный стоп x = 0.05, r = 1, w_tp = 0.60, короткое T_tp = 5.
E_H = 0.93·(0.99−0.90) − 0.07·0.90 = 0.0837 − 0.0630 = +0.0207 /share
E_tp = 0.60·(0.945−0.90) − 0.40·(0.90−0.855) = 0.0270 − 0.0180 = +0.0090 /share (0.855 = 0.90·0.95)
roi_rate_H = 0.0207 / (0.90·100) = 0.000230
roi_rate_tp = 0.0090 / (0.90·5) = 0.002000 ⇒ tp ≈ 8.7× эффективнее Harvester ПРИ 20× оборотеHarvester берёт больше на сделку (0.0207 > 0.0090), но при 20-кратном обороте take-profit эффективнее по капиталу. Но при РАВНОМ удержании (T_tp = 100) roi_rate_tp = 0.0001 < 0.000230 — Harvester выигрывает. Оборот — рычаг, а w_tp, T_tp — эмпирические: без них это форма, не вердикт.
6. GARBAGE-IN дисциплина (та же, что harvester_yield §GARBAGE-IN)
Формула точна лишь при КОРРЕКТНЫХ входах:
w_tp,T_tp— из РЕАЛЬНЫХ результатов форвардных торговых сессий, НЕ counterfactual; открытых проигравших резолвить (no survivorship).r,s_eff— из РЕАЛЬНЫХ стоп-филлов, не из порога.- taker-fee на стоп/TP-выход брать из подтверждённых боевых исполнений и трассировки ордеров; симуляторных оценок в контуре валидации нет.
w_H,T_H— из живых данных Harvester; сверять на ≥2 независимых срезах.
7. Порядок расчёта
1. Задать (i): p_e, g, x (напр. 0.05/0.05), exit_H (0.99).
2. Измерить (ii) по телеметрии боевых сессий: w_tp, T_tp, r, s_eff
(только confirmed fills); взять w_H, T_H из тех же форвардных Harvester-данных.
3. E_tp = w_tp·p_e·g − (1−w_tp)·(p_e − r·s_eff); E_H = w_H·(exit_H − p_e) − (1−w_H)·loss_H.
4. w*_tp = (p_e − r·s_eff)/(p_e·(1+g) − r·s_eff); edge_margin = w_tp − w*_tp.
5. roi_rate_tp = E_tp/(p_e·T_tp); roi_rate_H = E_H/(p_e·T_H).
6. Вердикт эффективности: roi_rate_tp > roi_rate_H (только по confirmed fills, ≥2 независимых среза).Cross-references: directional-harvester.md (родительская стратегия), harvester-yield.md (каркас), crates/pm-analytics/src/harvester_yield.rs (реализация + тесты).