{% load humanize %}{% if error %}
{{ error }}
{% if retry_url %}Run it again or try another symbol{% else %}Try another symbol{% endif %}
{{ r.trend_note }}
{% endif %}| Model | Mean error | vs naive | CRPS vs naive | Interval score vs naive | Days won | Direction right | In {{ r.level }}% interval | p-value |
|---|---|---|---|---|---|---|---|---|
| {{ row.name }} {{ row.family }}{% if row.best and r.rivals > 1 %} ยท best model{% endif %} | {{ row.mae }} | {{ row.change.text }} | {{ row.crps.text }} | {{ row.interval.text }} | {{ row.win_rate }}{% if row.ties %}{{ row.ties }}{% endif %} | {{ row.direction }} | {{ row.coverage }} | {{ row.p_value }}{% if row.significant %}*{% endif %} |
Error relative to naive, split by whether the close was above or below its {{ r.trend_days }}-day average on the day of the forecast. An edge that only shows up on one side may just be a bet on the trend.
| Model | Uptrend {{ r.trend.days.0 }} days |
Downtrend {{ r.trend.days.1 }} days |
|---|---|---|
| {{ row.name }} | {% for cell in row.cells %}{{ cell.text }} | {% endfor %}
Recent closes, then each model's forecast from the latest close. The band is the selected model's {{ r.level }}% interval. {% if not r.calendar_known %}This exchange's holiday calendar isn't known, so future dates skip weekends only.{% endif %}
Each day adds how much closer the model's {{ r.horizon }}-day forecast was than naive's, in percentage points of error. The line rises while the model is winning and falls while it is losing, so a steady climb is a lasting edge and a jump is one lucky stretch.