(*Dynamicsofθ(t)andμ(t)usingtheEuler-Maruyamamethod*)NextTheta[theta_,thetaBar_,kappa_,sigmaTheta_,deltaZ_,dt_]:=theta-kappa*(theta-thetaBar)*dt+sigmaTheta*deltaZ;NextMu[mu_,theta_,sigmaMu_,deltaW_,dt_]:=mu+theta*dt+sigmaMu*deltaW;LogLikelihoodFunction[params_List,observedLogReturns_,dt_,initialTheta_,initialMu_]:=Module[{theta=initialTheta,mu=initialMu,thetaBar,kappa,sigmaTheta,sigmaMu,rho,n=Length[observedLogReturns],logLikelihood=0,deltaWs,deltaZs,totalVariance},{thetaBar,kappa,sigmaTheta,sigmaMu,rho}=params;If[And[sigmaTheta>0,sigmaMu>0,-1<rho<1],(*GeneratecorrelatedWienerprocessincrements*){deltaWs,deltaZs}=Transpose[RandomVariate[MultinormalDistribution[{0,0},{{dt,rhoSqrt[dt]Sqrt[dt]},{rhoSqrt[dt]Sqrt[dt],dt}}],n-1]];(*Iterateoverobservedlog-returns*)For[t=1,t<n,t++,(*Updatethetaandmuforthenexttimestepusingmodeldynamics*)theta=NextTheta[theta,thetaBar,kappa,sigmaTheta,deltaZs[[t]],dt];mu=NextMu[mu,theta,sigmaMu,deltaWs[[t]],dt];(*Calculatetotalvarianceforthetimestep*)totalVariance=(sigmaMu^2+sigmaTheta^2+2rhosigmaMusigmaTheta)dt;(*Accumulatelog-likelihoodusingthedirectlog-PDFcomputation*)logLikelihood+=-0.5Log[2PitotalVariance]-((observedLogReturns[[t+1]]-mu)^2/(2totalVariance));];-logLikelihood,(*Returnthenegativelog-likelihoodforoptimization*)Infinity(*Handleinvalidparametervalues*)]];