Ratios#

This module contains different ratios. A ratio is an object that is aimed at comparing a performance of an asset with another one and generally by controlling risk.

class portfolio_plan.ratios.InformationRatio(reference: Plan, benchmark: Plan)#

Bases: object

period_returns(keep_index: bool = False) Returns#
Parameters:

keep_index (bool) – See information_ratio()

Return type:

Returns, a singleton return

We will load a mock data and calculate the information ratio between two plans

from portfolio_plan import Frequency
from portfolio_plan.resource import File

from portfolio_plan import Assets, Weights, Asset, Portfolio, Frequency, Plan
from portfolio_plan.data import example_prices_path
from datetime import datetime



START_DATE = datetime.strptime("2025-01-30", "%Y-%m-%d")
END_DATE = datetime.strptime("2025-03-01", "%Y-%m-%d")
EXAMPLE = example_prices_path()


def create_benchmark_plan():
    resource = File(path=EXAMPLE, frequency=Frequency.BDAILY)
    assets = Assets(
        [Asset("B")],
        resource=resource,
    )

    portfolio = Portfolio(
        assets=assets,
        weights=Weights(),
        name="B"
    )
    plan = Plan(
        portfolio=portfolio,
        start_date=START_DATE,
        end_date=END_DATE,
    )
    return plan



def create_plan():
    assets = Assets(
        [Asset("A")],  # We use a single asset for simplicity of the example,
        resource=File(path=EXAMPLE, frequency=Frequency.BDAILY)
    )
    portfolio = Portfolio(
        assets=assets,
        name="Portfolio",
        weights=Weights(),
    )
    plan = Plan(
        portfolio = portfolio,
        start_date=START_DATE,
        end_date=END_DATE
    )
    return plan
from portfolio_plan.ratios import InformationRatio


plan = create_plan()
benchmark_plan = create_benchmark_plan()

ir = InformationRatio(plan, benchmark_plan)
ir_returns = ir.period_returns()
ir_returns.data
open low high close
symbol date
IR: Portfolio-B 2025-02-28 0.52828 0.528309 0.528312 0.528302
ir_cumulative_returns = ir_returns.cumulative("IR - Cumulative", check_base=False)
ir_cumulative_returns
---------------------------------------------------------------------------
| CumulativeReturns for period 2025-02-28 00:00:00 to 2025-02-28 00:00:00 |
---------------------------------------------------------------------------
| IR: Portfolio-B                                                         |
---------------------------------------------------------------------------
ir_cumulative_returns.data
CumulativeReturns open low high close
symbol date
IR: Portfolio-B 2025-02-28 1.52828 1.528309 1.528312 1.528302