public AsianOption(AsianOptionParameter param, int MaxDegreeOfParallelism) { this.param = param; //SET THE DRIFT OF THE PROCESS double drift = (param.rf - param.div - 0.5 * param.vol * param.vol); // the parameter of the Sequence object[] par = { "6" }; // set the stochastic process this.mc = new ContinuousMarkovChainGenerator(typeof(SobolSequence), new GeometricBrownianMotion(param.s, param.N, drift, param.vol, param.ttm), param.N, MaxDegreeOfParallelism, par); }
public static double PutStrikePayoff(AsianOptionParameter param, double[] markov_chain) { return(Math.Exp(-param.rf * param.ttm) * Math.Max(markov_chain[markov_chain.Length] - ArrayStatistics.Mean(markov_chain), 0)); }
public static double PutPricePayoff(AsianOptionParameter param, double[] markov_chain) { return(Math.Exp(-param.rf * param.ttm) * Math.Max(param.k - ArrayStatistics.Mean(markov_chain), 0)); }