{% extends "base.html" %} {% from "_macros.html" import headline_card, exec_badge, deploy_constituent_row %} {% block title %}Paper book{% endblock %} {% block body %} {# ===== DEPLOY: the fund (Bybit) — the cockpit's only paper-book venue (the legacy venue toggle was removed in Task 7a). 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 4-edge 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 — each edge shown on its own

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