Hi all,
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
Can someone please shortly explain which arguments i should use and how i can change the function to min lnf?
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.
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.