How to solve a equation iteratively?

7 views (last 30 days)
Andi
Andi on 23 Nov 2020
Commented: Andi on 24 Nov 2020
I am currently replicating the Synthetic Put Strategy in MATLAB according to Dichtl and Drobetz (2010) "Portfolio Insurance and Prospect Theory Investors", page 3. They say that
w_risky = (S*N(d1))/(S*N(d1)+K*exp(-r*T)*N(-d2)
where
S = Share Price
K = Strike Price
r = risk free rate
T = Time to Maturity
N(.) = standard normal cumulative distribution function
d1 = (ln(S/K)+(r+0,5*sig^2)*T)/(sig*sqrt(T))
d2 = d1-sig*sqrt(T)
So far everything is fine. and also works pretty good.
However, they say that the Stike Price K must be set such that the following holds:
K = F/W0*(S+P(K))
where
(F/W0) is the percentage floor and P(K) is the price of a put with K. This should be solved interatively and I dont know which command I could use or how to even start solving such a problem? Couldnt find anything that helped so far.
Many thanks in advance
  2 Comments
dpb
dpb on 23 Nov 2020
Try
fsolve(@(x) K-F/W0*(S+P(K)),x0)
You've still got undefined terms you'll have to have defined, though...particularly P(K) if it is a function.

Sign in to comment.

Accepted Answer

Alan Stevens
Alan Stevens on 23 Nov 2020
Look at the fzero function.
Assuming you know P as a function of K, then with an initial guess for K
K0 = ...' % initial guess
K = fzero(fn,K0);
and
function Z = fn(K)
P = ...; % Calculated using K
Z = F/W0*(S + P) - K;
end
fzero will adjust K until it gets Z as close to zero as possible.
  1 Comment
Andi
Andi on 24 Nov 2020
thank you very much, that works perfectly
The only thing I had to change was adding a "@" sign
"K = fzero(@fn,K0);"

Sign in to comment.

More Answers (0)

Categories

Find more on Portfolio Optimization and Asset Allocation in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!