pyppr.matching_ppr_extra_value#
- pyppr.matching_ppr_extra_value(ua_cagr, nper, ua_tr, ppr_costr, ppr_tcr, ppr_standard_withdrawal)#
- Compute the after-tax extra value, expressed as a (positive or negative) percentage, generated by a PPR comparing to an investment made directly its Underlying Assets. - Given:
- the CAGR of the PPR’s underlying assets, - ua_cagr, compounded once per period, of which there are
- npertotal,
- the tax rate, - ua_tr, the investor would pay on the capital gains in the underlying assets, had he invested in them directly,
- the PPR’s total costs, - ppr_costr, including its management commission and others, expressed as a percentage of the invested capital,
- the tax credit rate, - ppr_tcr, the investor gets in his IRS for investing in a PPR,
- and whether the PPR will be withdrawn in standard conditions or not, - ppr_standard_withdrawal.
 
- Return:
- The difference between the PPR’s and its Underlying Assets’ tax-net final value. 
 - Parameters:
- ua_cagrscalar or array_like of shape(M, )
- Cumulative annual growth rate of the PPR’s underlying assets, in percentage Example: 0.05 
- nperscalar or array_like of shape(M, )
- Number of compounding periods 
- ua_trscalar or array_like of shape(M, )
- Tax rate the investor would pay on the capital gains in the underlying assets Example: 0.28 
- ppr_costrscalar or array_like of shape(M, )
- PPR’s total costs, including its management commission and others, expressed as a percentage of the invested capital Example: 0.0075 
- ppr_tcrscalar or array_like of shape(M, )
- Tax credit rate the investor gets in his IRS for investing in a PPR Example: 0 or 0.2 
- ppr_standard_withdrawalbool
- Whether the PPR will be withdrawn in standard conditions or not. 
 
- Returns:
- outarray_like
- The after-tax extra value generated by the PPR, in percentage. 
 
 - Warning - matching_ppr_extra_valueconsiders the PPR’s tax credit is reinvested into the PPR, itself not generating any tax credit.- Notes - Returns the result of \[V_0 + (PPR_n - V_0)\,(1 - tr_{PPR}) + TC_0 + (TC_n - TC_0)\,(1 - tr_{PPR}) = [ \, V_0 + (UA_n - V_0)\,(1 - tr_{UA}) \, ] \, (1 + ev_{PPR})\]- which, according to The Math Behind the Functions, in its longest form, can be decomposed to \[,V_0\,(1 + tcp_{PPR})\,(1 + r)^n\,(1 - cr_{PPR})^n\,(1 - tr_{PPR}) + V_0\,(1 + tcp_{PPR})\,(tr_{PPR}) = V_0\,(1 + r)^n\,(1-tr_{ETF})\,(1 + ev_{PPR}) + V_0\,(tr_{ETF})\,(1 + ev_{PPR})\]- solved to \(ev_{PPR}\), which gives the following formula: \[ev_{PPR} = \frac{(1 + r)^n\,(1 - cr_{PPR})^n\,(1 + tcp_{PPR})\,(1 - tr_{PPR}) + tr_{PPR}\,(1 + tcp_{PPR})} {(1 + r)^n\,(1 - tr_{ETF})+tr_{ETF}} - 1\]- You should take care to define the PPR’s tax credit rate according to the law. We recommend you to only consider inputting 0 or the current credit rate (at the time of this writing, 0.2) in the \(ppr_{tcr}\) parameter, even if only part of the investment will generate the credit. In that case, split the investment into two parts, one with \(ppr_{tcr}\) = 0 and the other with \(ppr_{tcr} = 0.2\). - Examples - >>> import pyppr - There’s a PPR that tracks the ETF I’m interested in investing in. Should I invest in the PPR or directly in the ETF? Here’s the scenario: - I expect the ETF to grow at a CAGR of 7%. 
- I expect to hold this investment for the next 20 years. 
- When withdrawing, I expect to pay 28% on capital gains. 
- Given the limitations and hurdles of the PPR, I require it to generate an extra 8% return, to choose it over the ETF. 
- I already invest in another ETF and I max out my tax credit when investing in it. 
- This PPR charges a management commission of 0.75% per year, and no other costs. 
- I will withdraw the PPR under standard conditions. 
 - >>> match = pyppr.matching_ppr_extra_value(0.07, 20, 0.28, 0.0075, 0, True) >>> if ( match < 0.08 ): ... print('I should invest directly in the underlying assets.') >>> else: ... print('I should invest in the PPR.') - How much more tax-net value would investing in the PPR provide if we expect the underlying assets to grow somewhere between 6% to 8%? - >>> import numpy as np >>> matches = pyppr.matching_ppr_extra_value(np.array([0.06, 0.08]), 20, 0.28, 0.0075, 0, True) >>> print(matches) [0.01120129 0.03652754] >>> print(f'{matches[0]:.2%} - {matches[1]:.2%}') 1.12% - 3.65%