/* A Stochastic Path on Binomial Tree */ new; cls; S0=50; r=0.08; sig=0.40; T=5/12; nn=500; /* up to 9999 in Light version of GAUSS */ S=pbsampler(S0,r,sig,T,nn); print S; library pgraph; graphset; title("A Path on Binomial Tree"); ylabel("S"); xlabel("t"); xy(seqa(0,T/nn,nn+1),S); /* ** pbsampler.txt - Stochastic Binomial Path Sampler. ** (C) Copyright 2005 Yosuke Amijima. All Rights Reserved. ** ** Purpose: Gets a stochastic path on binomial tree. ** ** Format: S=pbsampler(S0,sig,T,nn) ** ** Input: S0 scalar, initial value ** ** r scalar, risk-free interest rate ** ** sig scalar, volatility ** ** T scalar, maturity ** ** nn scalar, number of time steps ** ** ** Output: S vector, (nn+1) x 1 of resulting values including S0 ** ** Notice: This procedure uses 'pbisampler' inside. ** */ proc pbsampler(S0,r,sig,T,nn); local delt,a,u,d,p,S,u; delt=T/nn; a=exp(r*delt); u=exp(sig*sqrt(delt)); d=1/u; p=(a-d)/(u-d); S=pbisampler(p,nn); S=S-1*(S.==0); S=S0*u^cumsumc(S); S=S0|S; retp(S); endp; /* ** pbisampler.txt - Stochastic Binomial 0-1 Sampler. ** (C) Copyright 2005 Yosuke Amijima. All Rights Reserved. ** ** Purpose: Gets stochastic binomial 0-1 index numbers in a very easy way. ** ** Format: x=pbisampler(p,nr); ** ** Input: p scalar, probability(for 1) ** ** nr scalar, number of rows ** ** ** Output: x vector, nr x 1 of resulting 0-1 index vector ** */ proc pbisampler(p,nr); local x; x=rndu(nr,1); x=(x.<=p); retp(x); endp;