Document cost bps as one-way per-trade, not round-trip
The simulator charges (cost_bps + slippage_bps) on each fill, so a full round trip is charged twice. Correct the cost-model doc, the reversal_5d report, and the report generator to state the rate is one-way per-trade (~20 bps round trip for 5+5), rather than mislabeling it round-trip. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,13 @@ execution_price_i = open_price_i
|
|||||||
rates are added linearly. The CLI options `--cost-bps` and `--slippage-bps`
|
rates are added linearly. The CLI options `--cost-bps` and `--slippage-bps`
|
||||||
both default to `0.0`.
|
both default to `0.0`.
|
||||||
|
|
||||||
|
Both rates are **one-way, per-trade**: the combined `(cost_bps + slippage_bps)`
|
||||||
|
is charged on the traded notional of *each* fill, buy and sell alike. A full
|
||||||
|
round trip (enter then exit a position) is therefore charged twice — e.g.
|
||||||
|
`5 + 5` bps becomes ~20 bps over a complete round trip, not 10. Quote any
|
||||||
|
round-trip figure by doubling, or convert a round-trip budget to a per-trade
|
||||||
|
rate by halving before passing it in.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|||||||
@@ -30,8 +30,9 @@ costless research cumulative return at Sharpe
|
|||||||
54.31% daily hit rate.
|
54.31% daily hit rate.
|
||||||
|
|
||||||
The binding constraint is **cost, not signal**: at ~148×/year
|
The binding constraint is **cost, not signal**: at ~148×/year
|
||||||
turnover, a 10 bps round-trip (5 bps commission + 5 bps slippage) erases the
|
turnover, a 10 bps one-way per-trade cost (5 bps commission + 5 bps slippage,
|
||||||
edge — every variant is negative after costs. A tradable 5-day reversal needs
|
charged on each leg — so ~20 bps per round trip) erases the edge — every variant
|
||||||
|
is negative after costs. A tradable 5-day reversal needs
|
||||||
turnover control, not a different signal.
|
turnover control, not a different signal.
|
||||||
|
|
||||||
## Headline Metrics
|
## Headline Metrics
|
||||||
|
|||||||
@@ -630,8 +630,9 @@ costless research cumulative return at Sharpe
|
|||||||
{_pct(results['rank_liquid']['alpha_metrics']['hit_rate']) if rliq else 'n/a'} daily hit rate.
|
{_pct(results['rank_liquid']['alpha_metrics']['hit_rate']) if rliq else 'n/a'} daily hit rate.
|
||||||
|
|
||||||
The binding constraint is **cost, not signal**: at ~{results['rank_liquid']['alpha_metrics']['turnover_annual']:.0f}×/year
|
The binding constraint is **cost, not signal**: at ~{results['rank_liquid']['alpha_metrics']['turnover_annual']:.0f}×/year
|
||||||
turnover, a 10 bps round-trip (5 bps commission + 5 bps slippage) erases the
|
turnover, a 10 bps one-way per-trade cost (5 bps commission + 5 bps slippage,
|
||||||
edge — every variant is negative after costs. A tradable 5-day reversal needs
|
charged on each leg — so ~20 bps per round trip) erases the edge — every variant
|
||||||
|
is negative after costs. A tradable 5-day reversal needs
|
||||||
turnover control, not a different signal.
|
turnover control, not a different signal.
|
||||||
|
|
||||||
## Headline Metrics
|
## Headline Metrics
|
||||||
|
|||||||
Reference in New Issue
Block a user