@@ -101,7 +101,7 @@ def _init_asset_list(request, portfolio_short_history, portfolio_dividends, asse
101101@pytest .fixture (scope = "package" )
102102def init_portfolio_values ():
103103 return dict (
104- assets = ["RGBITR.INDX" , "MCFTR.INDX" ],
104+ assets = ["RGBITR.INDX" , "MCFTR.INDX" ], # index values are better as they are not changing (adjusted_close)
105105 ccy = "RUB" ,
106106 first_date = "2015-01" ,
107107 last_date = "2020-01" ,
@@ -153,40 +153,62 @@ def portfolio_dividends(init_portfolio_values):
153153
154154
155155# DCF Scenarios
156- # @pytest.fixture(scope="package")
157- # def portfolio_cashflows_inflation(init_portfolio_values):
158- # _portfolio_cashflows_inflation = deepcopy(init_portfolio_values)
159- # _portfolio_cashflows_inflation["cashflow"] = -100
160- # _portfolio_cashflows_inflation["initial_amount"] = 100_000
161- # return ok.Portfolio(**_portfolio_cashflows_inflation)
162- #
163- #
164- # @pytest.fixture(scope="package")
165- # def portfolio_cashflows_NO_inflation(init_portfolio_values):
166- # _portfolio_cashflows_NO_inflation = deepcopy(init_portfolio_values)
167- # _portfolio_cashflows_NO_inflation["cashflow"] = -100.0
168- # _portfolio_cashflows_NO_inflation["initial_amount"] = 100_000.0
169- # _portfolio_cashflows_NO_inflation["inflation"] = False
170- # _portfolio_cashflows_NO_inflation["discount_rate"] = 0.09
171- # return ok.Portfolio(**_portfolio_cashflows_NO_inflation)
172- #
173- #
174- # @pytest.fixture(scope="package")
175- # def portfolio_cashflows_NO_inflation_NO_discount_rate(init_portfolio_values):
176- # _portfolio_cashflows_NO_inflation_NO_discount_rate = deepcopy(init_portfolio_values)
177- # _portfolio_cashflows_NO_inflation_NO_discount_rate["cashflow"] = -100.0
178- # _portfolio_cashflows_NO_inflation_NO_discount_rate["initial_amount"] = 100_000.0
179- # _portfolio_cashflows_NO_inflation_NO_discount_rate["inflation"] = False
180- # _portfolio_cashflows_NO_inflation_NO_discount_rate["discount_rate"] = None
181- # return ok.Portfolio(**_portfolio_cashflows_NO_inflation_NO_discount_rate)
182- #
183- #
184- # @pytest.fixture(scope="package")
185- # def portfolio_cashflows_inflation_large_cf(init_portfolio_values):
186- # _portfolio_cashflows_inflation_large_cf = deepcopy(init_portfolio_values)
187- # _portfolio_cashflows_inflation_large_cf["cashflow"] = -2000
188- # _portfolio_cashflows_inflation_large_cf["initial_amount"] = 100_000
189- # return ok.Portfolio(**_portfolio_cashflows_inflation_large_cf)
156+ @pytest .fixture (scope = "package" )
157+ def init_portfolio_dcf (init_portfolio_values ):
158+ _portfolio_values = deepcopy (init_portfolio_values )
159+ _portfolio_dcf_values = dict (
160+ discount_rate = None ,
161+ use_discounted_values = True ,
162+ )
163+ return [_portfolio_values , _portfolio_dcf_values ]
164+
165+
166+ @pytest .fixture (scope = "package" )
167+ def init_mc ():
168+ return dict (
169+ distribution = "t" ,
170+ period = 10 ,
171+ number = 100
172+ )
173+
174+ @pytest .fixture (scope = "package" )
175+ def portfolio_dcf (init_portfolio_dcf ):
176+ pf = ok .Portfolio (** init_portfolio_dcf [0 ])
177+ pf_dcf = ok .PortfolioDCF (pf , ** init_portfolio_dcf [1 ])
178+ return pf_dcf
179+
180+
181+ @pytest .fixture (scope = "package" )
182+ def portfolio_dcf_no_inflation (init_portfolio_dcf ):
183+ values_list = deepcopy (init_portfolio_dcf )
184+ values_list [0 ]["inflation" ] = False
185+ # Create Portfolio
186+ pf = ok .Portfolio (** values_list [0 ])
187+ pf_dcf = ok .PortfolioDCF (pf , ** values_list [1 ])
188+ return pf_dcf
189+
190+ @pytest .fixture (scope = "package" )
191+ def portfolio_dcf_discount_rate (init_portfolio_dcf ):
192+ values_list = deepcopy (init_portfolio_dcf )
193+ values_list [1 ]["discount_rate" ] = 0.08
194+ # Create Portfolio
195+ pf = ok .Portfolio (** values_list [0 ])
196+ pf_dcf = ok .PortfolioDCF (pf , ** values_list [1 ])
197+ return pf_dcf
198+
199+ @pytest .fixture (scope = "package" )
200+ def portfolio_dcf_indexation (init_portfolio_dcf , init_mc ):
201+ pf = ok .Portfolio (** init_portfolio_dcf [0 ])
202+ pf_dcf = ok .PortfolioDCF (pf , ** init_portfolio_dcf [1 ])
203+ pf_dcf .set_mc_parameters (** init_mc )
204+ # Cash Flow
205+ ind = ok .IndexationStrategy (pf ) # create IndexationStrategy linked to the portfolio
206+ ind .initial_investment = 10_000 # add initial investments size
207+ ind .frequency = "year" # set cash flow frequency
208+ ind .amount = - 1_500 # set withdrawal size
209+ ind .indexation = "inflation"
210+ pf_dcf .cashflow_parameters = ind
211+ return pf_dcf
190212
191213
192214# Macro
0 commit comments