Backtest Configs

This is the configs your backtesting used.

{% for key, value in props.items() %} {% endfor %}
This data stored in Analyzer.configs
Config Term Value
{{key}} {{value | cut_if_too_long(50) }}

PnL Curve & Performance Metrics

Responsive Image

This data is stored in Analyzer.df_returns

Strategy Performance Metrics

These are calculated using ACTIVE return of your portfolio. When calculating sharpe ratio, risk-free rate is assumed to be 0.

{% for key, value in performance_metrics_report %} {% endfor %}
This data is stored in Analyzer.performance_metrics
Term Value
{{key}} {{value | round_if_float(1) }}

Strategy Risk Metrics

{% for key, value in risk_metrics_report %} {% endfor %}
This data is stored in Analyzer.risk_metrics
Term Value
{{key}} {{value | round_if_float(3) }}

Daily PnL Metrics

{% for key, value in dailypnl_metrics_report %} {% endfor %}
This data is stored in Analyzer.dailypnl_metrics
Term Value
{{key}} {{value | round_if_float(3) }}

Tail 5 Daily PnL

{% for key, value in dailypnl_tail5_metrics_report %} {% endfor %}
This data is stored in Analyzer.dailypnl_tail5_metrics
Term Value
{{key}} {{value | round_if_float(3) }}

Top 5 Daily PnL

{% for key, value in dailypnl_top5_metrics_report %} {% endfor %}
This data is stored in Analyzer.dailypnl_top5_metrics
Term Value
{{key}} {{value | round_if_float(3) }}
{% if alpha_decomposition is not none%}

Alpha Decomposition

{{ alpha_decomposition.to_html(classes="table table-striped", border=0) }}
{% endif %} {% if industry_agg is not none%}

Industry Total Alpha and Overweight

{{ industry_agg.to_html(classes="table table-striped", border=0) }}
{% endif %}

Daily Trading & Holding PnL

Trading PnL = (close price - fill price) * position change
Holding PnL = (close price - pre-close price) * initial position

Responsive Image

This data is stored in Analyzer.df_pnl

{% if df_brinson is defined %}

Brinson Attribution

Responsive Image

This data is stored in Analyzer.df_brinson

{% endif %} {% if selected_securities|length > 0 %}

Visualization for Selected Security

{% for symbol in selected_securities %} Responsive Image {% endfor %}

Daily PnL for Selected Security

{% for symbol in selected_securities %} {{ symbol }}
{{ df_daily[symbol].to_html(classes="table table-striped", border=0) }}
{% endfor %} {% endif %} {% if rebalance_positions is not none %}

Table of Position on Re-balance Days

{% for date, df in rebalance_positions.items() %}

{{ df.to_html(classes="table table-striped", border=0) }}
{% endfor %}

This data is stored in Analyzer.rebalance_positions

{% endif %} {% if alpah_weight_contribution is not none %}

Alpha Weight Contribution

Table of Alpha contribution on top 40% weight. Total {{ alpha_weight_traded_stocks }} stocks were bought.

{{ alpha_weight_contribution.to_html(classes="table table-striped", border=0) }}
{% endif %} {% if alpha_decay_image %}

Alpha Decay

Sort the stock by average weight from top to bottom, then aggregate the alpha contribution by every 5 stocks.

Responsive Image {% endif %} {% if alpha_decay_weight_image %}

Alpha Decay Scaled by Weight

In each group, scale the alpha contribution by aggregate weight

Responsive Image {% endif %} {% if cum_alpha_weight_image %}

Cumulative Alpha and Weight

Calculate cumulative weight and alpha contribution after sort the stock by average weight from top to bottom.

Responsive Image {% endif %} {% if industry_overweight_images %}

Industry Overwight

{% for image in industry_overweight_images %} Responsive Image {% endfor %} {% endif %} {% if alpha_decomposition_images %}

Total Alpha Decomposition by Month

Responsive Image {% endif %} {% if alpha_decomposition_industry_images %}

Industry alpha Decomposition by Month

Responsive Image {% endif %} {% if sold_alpha_decay_image %}

Sold Alpha Decay

Responsive Image {% endif %} {% if daily_position is not none %}

Table of Daily Position

{{ daily_position.to_html(classes="table table-striped", border=0) }}

This data is stored in Analyzer.daily_position

{% endif %} {% if position_change is not none %}

Table of Records of Position Changes

{% for date, df in position_change.items() %} {{ date }}
market value = {{ account[date]['market_value'] / 1000.0 | round(0) }}k, cash = {{ account[date]['cash'] / 1000.0 | round(0) }}k,
{{ df.to_html(classes="table table-striped", border=0) }} {% endfor %}

This data is stored in Analyzer.position_change

{% endif %}