PercentageStrategy

class PercentageStrategy(parent, frequency='none', initial_investment=1000.0, time_series_dic={}, time_series_discounted_values=False, percentage=0.0)

Bases: CashFlow

Cash flow strategy with regular fixed percentage withdrawals or contributions.

Parameters:
parentPortfolio

The parent Portfolio instance.

frequencystr, optional

Frequency of cash flows. Default is “none”.

initial_investmentfloat, optional

Initial investment amount. Default is 1000.0.

time_series_dicdict, optional

Dictionary with dates and cash flow values. Default is empty dict.

time_series_discounted_valuesbool, optional

If True, values in time_series_dic are considered as discounted (PV). Default is False.

percentagefloat, optional

Percentage of portfolio balance to be withdrawn or contributed. Negative for withdrawals. Default is 0.0.

Examples

>>> import matplotlib.pyplot as plt
>>> pf = ok.Portfolio(first_date="2015-01", last_date="2024-10")  # create Portfolio with default parameters
>>> pc = ok.PercentageStrategy(pf)  # create PercentageStrategy linked to the portfolio
>>> pc.initial_investment = 10_000  # add initial investments size
>>> pc.frequency = "year"  # set cash flow frequency
>>> pc.percentage = -0.12  # set withdrawal percentage
>>> # Assign the strategy to Portfolio
>>> pf.dcf.cashflow_parameters = pc
>>> # Plot wealth index with cash flow
>>> pf.dcf.wealth_index(discounting="fv", include_negative_values=False).plot()
>>> plt.show()
../_images/okama-PercentageStrategy-1.png

Methods & Attributes

NAME

frequency

The frequency of regular withdrawals or contributions in the strategy.

initial_investment

Initial investment (FV) amount at the start of the calculation period.

percentage

The percentage of withdrawals or contributions.

periods_per_year

Get the number of periods per year based on the frequency.

time_series_dic

Cash flow time series in form of dictionary.

NAME = 'fixed_percentage'
property percentage

The percentage of withdrawals or contributions.

The size of withdrawals or contribution is defined as a percentage of portfolio balance per year.

Returns:
float

The percentage of withdrawals or contributions.

property frequency

The frequency of regular withdrawals or contributions in the strategy.

Allowed values for frequency:

  • ‘none’ no frequency (default value)

  • ‘year’ annual cash flows

  • ‘half-year’ 6 months cash flows

  • ‘quarter’ 3 months cash flows

  • ‘month’ 1 month cash flows

Returns:
str

The frequency of withdrawals or contributions.

property initial_investment

Initial investment (FV) amount at the start of the calculation period.

For historical backtesting, this is the investment at first_date. For Monte Carlo simulations, this is the investment at last_date. Initial investment must be positive.

Returns:
float

Portfolio initial investment.

property periods_per_year

Get the number of periods per year based on the frequency.

Returns:
int

Number of periods per year.

property time_series_dic

Cash flow time series in form of dictionary.

Negative number corresponds to withdrawals, positive number corresponds to contributions.

Examples

>>> import matplotlib.pyplot as plt
>>> pf = ok.Portfolio(first_date="2015-01", last_date="2024-10")  # create Portfolio with default parameters
>>> # create simple dictionary with cash flow amounts and dates
>>> d = {"2018-02": 2_000, "2024-03": -4_000}
>>> ts = ok.TimeSeriesStrategy(pf)  # create TimeSeresStrategy linked to the portfolio
>>> ts.time_series_dic = d  # use the dictionary to set cash flow
>>> ts.initial_investment = 1_000  # add initial investments size (optional)
>>> # Assign the strategy to Portfolio
>>> pf.dcf.cashflow_parameters = ts
>>> # Plot wealth index with cash flow
>>> pf.dcf.wealth_index(discounting="fv", include_negative_values=False).plot()
>>> plt.show()
../_images/okama-PercentageStrategy-2.png