2014-12-30 6 views
0

내가 로컬 변동성 모델의 몬테카를로 시뮬레이션을 위해 노력하고 있어요.지역의 변동성 모델 matlab에

이런 이유로 나는 Euler-Mayurama 방법으로이 SDE를 수동으로 시뮬레이션하고 있습니다. 더 구체적으로 내가 로그 프로세스 Xt=log(St)

dXt = -1/2 sigma^2(exp(Xt),t) dt + sigma(exp(Xt),t) dWt 

이의 코드에 대한 SDE를 얻기 위해 이토의 공식을 사용 않습니다 :

이 코드는 시그마 그러나, 작은 시그마 오히려 좋은 일

function [S]=geom_bb(sigma,T,N,m) 
% T.. Time horizon, sigma.. standard deviation, N.. timesteps, m.. dimensions 

X=zeros(N+1,m); 
dt=T/N; 
t=(0:N)'*dt; 
dW=randn(N,m); 

for j=1:N 
    X(j+1,:)=X(j,:) - 1/2* sigma(exp(X(j,:)),t(j))^2 * sqrt(dt) + sigma(exp(X(j,:)),t(j))*dW(j,:); 
end 

S=exp(X*sqrt(dt)); 
end 
약 10 프로세스는 항상 0이됩니다. 이것은 S가 마틴 게일이기 때문에 발생해서는 안되며, 따라서 expectation = 1 (적어도 상수 시그마의 경우)입니다. 그러나 평균은 정확하므로 X를 올바르게 시뮬레이션해야합니다.

누구든지이 문제를 해결할 수 있습니까? 이는 수치 반올림 오류로 인한 것입니까? 이 문제를 해결하기 위해 선호되는 다른 시뮬레이션 방법이 있습니까?

답변

1

먼저 루프 외부의 S = exp (X * sqrt (dt))가 원하는 것을 수행하고 있습니까? 루프 내부에서 시작하지 않으시겠습니까? 어떤 경우에도 루프 내부에서 sigma()에 대해 exp (X)를 사용하고 있습니다. 이제는 sqrt (dt)가 누락되었습니다.

동작을 개선하기위한 권장 방법 : Milstein 체계를 대신 사용하여 시간 단계 수를 늘리고 sigma() 값이 timestep에 비례하는지 확인하십시오. 시그마 10은 1000 % 변동성, 즉 하루 60 %의 움직임을 의미합니다. dt가 몇 분 이상이라고 가정하면 이것은 간단하게 좋을 수 없습니다.