Source code for tradeexecutor.strategy.chart.standard.weight

"""Portfolio weights visualisation."""


import pandas as pd
from plotly.graph_objects import Figure

from tradeexecutor.analysis.weights import calculate_asset_weights, visualise_weights, calculate_weights_statistics
from tradeexecutor.strategy.chart.definition import ChartInput


def _calculate_and_cache_weights(input: ChartInput) -> pd.Series:
    """Calculate and cache asset weights for the input."""
    state = input.state
    weights_series = input.cache.get_indicator_series("weights")
    if weights_series is None:
        weights_series = calculate_asset_weights(state)
        input.cache["weights"] = weights_series
    return weights_series


[docs]def volatile_weights_by_percent( input: ChartInput, ) -> Figure: """Return volatile asset weights, 100% stacked. """ weights_series = calculate_asset_weights(input.state) fig = visualise_weights( weights_series, normalised=True, include_reserves=False, ) return fig
[docs]def volatile_and_non_volatile_percent( input: ChartInput, ) -> Figure: """Return volatile asset weights, 100% stacked. """ weights_series = calculate_asset_weights(input.state) fig = visualise_weights( weights_series, normalised=True, include_reserves=True, ) return fig
[docs]def equity_curve_by_asset( input: ChartInput, ) -> Figure: """Equity curve with assets colored. """ weights_series = calculate_asset_weights(input.state) fig = visualise_weights( weights_series, normalised=False, ) return fig
[docs]def weight_allocation_statistics( input: ChartInput, ) -> pd.DataFrame: """Statistics about portfolio mixture. """ weights_series = calculate_asset_weights(input.state) stats = calculate_weights_statistics(weights_series) return stats