{% extends "base.html" %} {% block title %}{{ d.display_name }}{% endblock %} {% block body %}

← cockpit

sleeve {{ d.sleeve }} · venue {{ d.venue }} · as of {{ d.as_of or '—' }} · {{ d.gate_status }} {{ d.gate_reason }}

{{ d.days }} forward days · {{ '%+.2f'|format(d.total_return_pct) }}% · Sharpe {{ '%.2f'|format(d.sharpe) }} · maxDD {{ '%.1f'|format(100*d.maxdd) }}%

{{ curve|safe }}
{% if d.bt_status %}

backtest verdict {{ d.bt_status }} as of {{ d.bt_as_of or '—' }}

CAGR {{ '%+.1f'|format(100*d.bt_cagr) if d.bt_cagr is not none else '—' }}% · vol {{ '%.1f'|format(100*d.bt_ann_vol) if d.bt_ann_vol is not none else '—' }}% · Sharpe {{ '%.2f'|format(d.bt_sharpe) if d.bt_sharpe is not none else '—' }} · maxDD {{ '%.1f'|format(100*d.bt_maxdd) if d.bt_maxdd is not none else '—' }}% · DSR {{ '%.2f'|format(d.bt_dsr) if d.bt_dsr is not none else '—' }} · OOS Sharpe {{ '%.2f'|format(d.bt_oos_sharpe) if d.bt_oos_sharpe is not none else '—' }}

{% endif %}

per-period returns & rolling mean (raw — no normalization)

{% for period in ["daily", "weekly", "monthly"] %}
{{ period }}
{% for p in d.periods[period] %} {% else %} {% endfor %}
periodret%rolling mean%
{{ p.label }} {{ '%+.3f'|format(100*p.ret) }} {{ '%+.3f'|format(100*p.rolling_mean) }}
no data yet
{% endfor %}

daily forward rows

{% for p in d.history %} {% endfor %}
dateret%nav
{{ p.date }} {{ '%+.3f'|format(100*p.ret) }} {{ '%.4f'|format(p.nav) }}
{% endblock %}