i try to solve the Black-Scholes-Merton formula for two unknwons: Asset Value & Asset Volatility.
My basic code is from this topic:
https://www.statalist.org/forums/for...atility-merton
but i want to solve it with "solvenl"
I have problems with the syntax of solvenl. Espacially i don't know how i can change my code the Avalue & Avol change to set lnf to zero (or near zero).
My error message is:
Solver(): 3001 expected 2 arguments but received 4
solvenl__calluser_2(): - function returned error
solvenl__functioneval(): - function returned error
solvenl_solve__broydenpowell(): - function returned error
_solvenl_solve(): - function returned error
solvenl_solve(): - function returned error
<istmt>: - function returned error
With my code
Code:
clear*
set obs 2
gen ev = 100
replace ev = 120 in 2
gen evola = .15
replace evola = .13 in 2
gen debt = 50
replace debt = 70 in 2
gen r = .05
replace r = .045 in 2
gen t = 1
gen Avalue = .
gen avol = .
mata
mata clear
j=1
T = st_data(j,"t")
sqrtT = sqrt(T)
rf= st_data(j,"r")
F = st_data(j, "debt")
E = st_data(j, "ev")
Evol = st_data(j, "evola")
Avol = Evol*(E/(E+F))
Avalue = (E + F)
//A = (Avalue, Avol)
//c = (sqrtT, rf, E, Evol, F)
void function Solver(Avol, Avalue) ///
{
//d1=(ln(Avalue/F)+(rf+0.5*(Avol)^2)*(sqrtT)^2)/(Avol*sqrtT)
//d2=d1-Avol*sqrtT
//E_calc=Avalue*normal(d1)- exp(-rf*(sqrtT)^2)*F*normal(d2)
//Evol_calc=(Avalue/E_calc)*normal(d1)*Avol
//lnf =(E_calc/E-1)^2 + (Evol_calc/Evol-1)^2
lnf= (Avalue*normal((ln(Avalue/F)+(rf+0.5*(Avol)^2)*(sqrtT)^2)/(Avol*sqrtT))- ///
exp(-rf*(sqrtT)^2)*F* ///
normal((ln(Avalue/F)+(rf+0.5*(Avol)^2)*(sqrtT)^2)/(Avol*sqrtT)-Avol*sqrtT)-E-1)^2+ ///
((Avalue/E_calc)*normal((ln(Avalue/F)+(rf+0.5*(Avol)^2)*(sqrtT)^2)/(Avol*sqrtT))*Avol-Evol-1)^2
}
S = solvenl_init()
solvenl_init_argument(S,1,Avalue)
solvenl_init_argument(S,2,Avol)
solvenl_init_evaluator(S, &Solver())
solvenl_init_numeq(S, 1)
solvenl_init_type(S, "zero")
solvenl_init_conv_maxiter(S, 100)
ERR=solvenl_result_error_code(S)
//solvenl_init_iter_log(S,"off)
//_solvenl_solve(S)
//solvenl_dump(S)
A = solvenl_solve(S)
st_store(j, "Avalue", A[1])
st_store(j, "avol", A[2])
end
Thank you very much!
I got my solvenl-knowlege from
https://www.statalist.org/forums/for...venl-arguments
and
https://www.stata.com/help13.cgi?mf_solvenl
althoug i use Stata 14.
0 Response to Solvenl - Optimize for 2 unknown variables (in Mata)
Post a Comment