{% extends "base.html" %} {% from "_macros.html" import headline_card, exec_badge, deploy_constituent_row %} {% block title %}Paper book{% endblock %} {% block body %} {# Venue switch — Bybit is the DEPLOY fund (default), Binance is research/secondary. Relative URLs only. #}
Bybit · deploy Binance · research
{% if venue == 'binance' %} {# ===== RESEARCH: the Binance paper book is NOT the fund — dimmed/secondary, same components, PAPER-badged. ===== #}

Binance paper book — research, not the fund · live mark-to-market {{ exec_badge('paper') }} BINANCE

{{ spark|safe }}

sleeves

{% for sleeve, s in v.sleeves.items() %}
{{ sleeve }}
alloc {{ '%.1f'|format(100*s.weight) }}% · {{ s.n }} position{{ 's' if s.n != 1 else '' }}
PnL {{ s.pnl|money_signed }}
{% else %}

no sleeves yet

{% endfor %}
{% include "_paper_live.html" %}

recent trades ({{ v.trades|length }})

{# bounded scroll box so the trades don't stretch the page on mobile (each row stacks into a card) #}
{% for t in v.trades %} {% else %} {% endfor %}
tssleevesymbolsideqtypricereason
{{ t.ts }} {{ t.sleeve }} {{ t.symbol }} {{ t.side }} {{ t.qty|qty }} {{ t.price|qty }} {{ t.reason }}
no trades yet

research · paper

{% else %} {# ===== DEPLOY: the fund (Bybit). Headline = the SAME connected-backfill card the Overview leads with; below it the detail the Paper page uniquely provides — the LIVE per-symbol book + trades — then the individual constituent edges (consistent with the Overview's deploy constituents). PAPER-badged. ===== #}

Bybit paper book — the fund · deploy venue · live mark-to-market {{ exec_badge('paper') }} BYBIT

{{ headline_card(headline, headline_curve) }} {# Forward RECONCILIATION gate (the only true OOS check): PASS iff the ~2wk window is reached AND the forward reconciles with the backtest AND execution is clean. Each criterion shows ✓/✗ at a glance. #} {% if forward %}
forward track · {{ forward.venue }} · since {{ forward.t0 or '—' }} [{{ forward.gate_status }}]
{{ forward.gate_reason }}
{% if forward.recon_gate %}
{{ '✓' if forward.days_ok else '·' }} ~2wk window ({{ forward.days }}/{{ forward.gate_min_days }} days) {{ '✓' if forward.reconciles_ok else '✗' }} reconciles with backtest {{ '✓' if forward.clean_exec_ok else '✗' }} clean execution
{% else %}
{{ forward.days }} forward day{{ 's' if forward.days != 1 else '' }}
{% endif %} {% if forward.n_points > 1 %}
{{ forward.curve|safe }}
forward return {{ '%+.2f'|format(forward.total_return_pct) }}% · Sharpe {{ '%.2f'|format(forward.sharpe) }}
{% endif %}
{% endif %} {# The detail /paper uniquely provides: the LIVE per-symbol book (positions + mark-to-market) + trades. #}
{% include "_paper_live.html" %}

recent trades ({{ v.trades|length }})

{# bounded scroll box so the trades don't stretch the page on mobile (each row stacks into a card) #}
{% for t in v.trades %} {% else %} {% endfor %}
tssleevesymbolsideqtypricereason
{{ t.ts }} {{ t.sleeve }} {{ t.symbol }} {{ t.side }} {{ t.qty|qty }} {{ t.price|qty }} {{ t.reason }}
no trades yet

live mark-to-market · paper

{# Individual edges — the per-sleeve breakdown, consistent with the Overview's deploy constituents. #}

individual edges — standalone Bybit (vol-targeted @ 20%)

{% for e in individual_edges %}{{ deploy_constituent_row(e) }}{% else %} {% endfor %}
edgemetricmaxDD
no bybit sleeve backtest data yet
{% endif %} {% endblock %}