/* General Variance Gamma Process */ new; cls; mu=0.1; sig=0.3; beta=0.01; X0=50; T=1; n=252; X=X0|vargamp(mu,sig,beta,X0,T,n); library pgraph; graphset; xy(seqa(0,T/n,n+1),X); proc vargamp(mu,sig,beta,X0,T,n); local delt,Y,Z,X,i; delt=T/n; Y=rndgamma(delt/beta,beta,n); Z=rndn(n,1); X=zeros(n,1); X[1]=X0+mu*Y[1]+sig*sqrt(Y[1])*Z[1]; i=1; do while i<=n-1; X[i+1]=X[i]+mu*Y[i+1]+sig*sqrt(Y[i+1])*Z[i+1]; i=i+1; endo; retp(X); endp; proc rndgamma(alpha,beta,nn); local x; if alpha<=0 or beta<=0; errorlog "ERROR: Parameter alpha and beta must be positive."; retp("."); endif; x=rndu(nn,1); /* U(0,1) to Gamma(alpha,beta) */ x=beta*gammaii(alpha*ones(nn,1),x); retp(x); endp;