|
|
| CPPI_PayOff_From_Returns_2(StartAmount, WarrantiedAmount, Multiplier,OneYearOfReturns, InterestRate, SmoothingFactor, TransactionThreshold, TransactionCost,HedgingFrequencyInDays)
|
function [PortFolioValue, TradedAmount, PercentageOfTradingDates, DynamicFloor, Exposure, ExpPercentage] = CPPI_PayOff_From_Returns_2(StartAmount, WarrantiedAmount, Multiplier,OneYearOfReturns, InterestRate, SmoothingFactor, TransactionThreshold, TransactionCost,HedgingFrequencyInDays)
NumberOfTimeStepPerYear = 250;
NumberOfSteps = size(OneYearOfReturns,1);
NumberOfYear = NumberOfSteps / NumberOfTimeStepPerYear;
Floor = WarrantiedAmount;
S = StartAmount;
dt = HedgingFrequencyInDays /NumberOfTimeStepPerYear;
% Initialize everything
NumberOfTradingDates = 0;
PortFolioValue = zeros(1,NumberOfSteps -1);
PortFolioValue(:,1) = StartAmount;
Cash = Floor * exp(-InterestRate*NumberOfYear);
NewCash = Cash;
Cushion(1) = StartAmount - Cash;
Exposure(1) = Cushion(1) * Multiplier;
ExpPercentage(1) = Exposure ./ StartAmount;
OneYearOfReturns = OneYearOfReturns +1;
DynamicFloor(1) = Floor * exp(-InterestRate*(NumberOfYear));
NumberOfHedgingStep = 0;
% Hedging Loop
for t = HedgingFrequencyInDays + 1 : HedgingFrequencyInDays : NumberOfSteps
NumberOfHedgingStep = NumberOfHedgingStep + 1;
% what is the current value of my Floor at my hedgin date ?
DynamicFloor(t-HedgingFrequencyInDays + 1 : t) = Floor * exp(-InterestRate*(NumberOfYear - dt * t));
% how much can i spend in the risky asset
Cushion(t) = PortFolioValue(t-HedgingFrequencyInDays ) - DynamicFloor(t);
% What is my retunr between my hedging dates ?
ReturnOnPeriod = prod(OneYearOfReturns(t-HedgingFrequencyInDays+1:t ));
% Let s take a bit more risk as we expect not loose everything
% between 2 hedging dates ...
Exposure(t) = Cushion(t) .* Multiplier;
% how much should i trade to hedge ?
TransactionPercentage(t) = (Exposure(t) - Exposure(t-HedgingFrequencyInDays))./Exposure(t-HedgingFrequencyInDays);
if (abs(TransactionPercentage(t)) > TransactionThreshold)
% Let's hedge
% Apply Smoothing factor (we want to have a 'smooth strategy :
% downside protection
Exposure(t-HedgingFrequencyInDays+1 : t) = SmoothingFactor * Exposure(t) + (1-SmoothingFactor) * Exposure(t-HedgingFrequencyInDays);
% How much is really in my risk free asset ?
Cash = PortFolioValue(t - HedgingFrequencyInDays) - Exposure(t) ;
% take Trading cost in actio,
TradedAmount(t - HedgingFrequencyInDays +1 : t) = abs(Exposure(t) - Exposure(t-HedgingFrequencyInDays)) * TransactionCost;
% We have our new Portfolio value
PortFolioValue(t - HedgingFrequencyInDays +1 : t) = Exposure(t) .* ReturnOnPeriod+ Cash .* exp(InterestRate * dt) - TradedAmount(t);
% Update hte number of trading dates
NumberOfTradingDates = NumberOfTradingDates +1;
% ExpPercentage
ExpPercentage(t - HedgingFrequencyInDays +1 : t) = Exposure(t) ./ PortFolioValue(t);
else
% We don't hedge
%How much was in the riskfree asset ?
PreviousRiskFreeCash = PortFolioValue(t-HedgingFrequencyInDays) - Exposure(t - HedgingFrequencyInDays);
% How much was exposed ?
Exposure(t-HedgingFrequencyInDays+1 : t) = Exposure(t - HedgingFrequencyInDays).* ReturnOnPeriod;
% Simply update the portfolio value according to our retruns on our
% considered period between our hedging dates
PortFolioValue(t - HedgingFrequencyInDays +1 : t) = Exposure(t) +(PreviousRiskFreeCash .* exp(InterestRate * dt));
% No trading here !
TradedAmount(t - HedgingFrequencyInDays +1 : t) = 0;
% ExpPercentage
ExpPercentage(t - HedgingFrequencyInDays +1 : t) = Exposure(t) ./ PortFolioValue(t);
end;
end;
PercentageOfTradingDates= 100 * NumberOfTradingDates/NumberOfHedgingStep ;
|
|
Contact us at files@mathworks.com