Calibrating VIX option data to model - lsqnonlin problem
2 次查看(过去 30 天)
显示 更早的评论
Im new to MatLab and in the process of learning it. Currently im trying to calibrate VIX option market data to Mean-reverting volatility process. To begin with im just trying to get an output without errors.
I have coded this script and the following function: ___________________________________________________________________________ clear all
load('callopt.mat');
global K; global T; global r; global market;
%K=strike, T=time to expiration in year fraction %market=market option prices
K=callopt(:,3); T=callopt(:,2); market=callopt(:,10); r=0.01;
x0=[2,2,2,2];
[x,resnorm]=lsqnonlin(@myfun,x0); ___________________________________________________________________________
function F=myfun(bet,rev,V,sig)
global K; global T; global r; global market;
vega=4*rev*bet./(sig^2);
gam=(4*bet)./((sig^2)*(1-exp(-bet*T)));
lambda=vega*exp(-bet*T)*V;
model=exp(-r.*T).*(exp(-bet.*T).*V.*ncx2cdf(gam.*K,vega+4,lambda))+rev.*(1-exp(-bet.*T)).*ncx2cdf(gam.*K,vega+2,lambda)-K.*ncx2cdf(gam.*K,vega,lambda);
F=(market-model); ___________________________________________________________________________
This is the complete error i receive: Error using myfun (line 5) Not enough input arguments.
Error in lsqnonlin (line 197) initVals.F = feval(funfcn{3},xCurrent,varargin{:});
Error in meanrev (line 15) [x,resnorm]=lsqnonlin(@myfun,x0); Caused by: Failure in initial user-supplied objective function evaluation. LSQNONLIN cannot continue.
Can someone help?
0 个评论
采纳的回答
Richard Crozier
2012-6-4
lsqnonlin does not know that myfun takes 4 arguments, it expects it to just take one. You can get around this using an 'anonymous' function call like so:
[x,resnorm]=lsqnonlin(@(argthatchanges) myfun(argthatchanges,rev,V,sig), x0);
Note that I don't know which of your argument your actually solving for, so you may need to change about. Read about anonymous functions to understand better how this works.
Incidentally it is good programming practice to avoid the use of global variables unless absolutely necessary.
更多回答(0 个)
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!