##// END OF EJS Templates
Override makeTest to correctly support path/to/test.py:test_function syntax....
Override makeTest to correctly support path/to/test.py:test_function syntax. If we don't explicitly override this, the checker used isn't IPython-aware and we don't get full support for things like #random markers, when using the syntax:: iptest tests/test_magic.py:doctest_clear_array

File last commit:

r1606:a579fd1d
r1763:a26f8e3c
Show More
mcpricer.py
43 lines | 1.6 KiB | text/x-python | PythonLexer
import numpy as N
from math import *
class MCOptionPricer(object):
def __init__(self, S=100.0, K=100.0, sigma=0.25, r=0.05, days=260, paths=10000):
self.S = S
self.K = K
self.sigma = sigma
self.r = r
self.days = days
self.paths = paths
self.h = 1.0/self.days
self.const1 = exp((self.r-0.5*self.sigma**2)*self.h)
self.const2 = self.sigma*sqrt(self.h)
def run(self):
stock_price = self.S*N.ones(self.paths, dtype='float64')
stock_price_sum = N.zeros(self.paths, dtype='float64')
for j in range(self.days):
growth_factor = self.const1*N.exp(self.const2*N.random.standard_normal(self.paths))
stock_price = stock_price*growth_factor
stock_price_sum = stock_price_sum + stock_price
stock_price_avg = stock_price_sum/self.days
zeros = N.zeros(self.paths, dtype='float64')
r_factor = exp(-self.r*self.h*self.days)
self.vanilla_put = r_factor*N.mean(N.maximum(zeros,self.K-stock_price))
self.asian_put = r_factor*N.mean(N.maximum(zeros,self.K-stock_price_avg))
self.vanilla_call = r_factor*N.mean(N.maximum(zeros,stock_price-self.K))
self.asian_call = r_factor*N.mean(N.maximum(zeros,stock_price_avg-self.K))
def main():
op = MCOptionPricer()
op.run()
print "Vanilla Put Price = ", op.vanilla_put
print "Asian Put Price = ", op.asian_put
print "Vanilla Call Price = ", op.vanilla_call
print "Asian Call Price = ", op.asian_call
if __name__ == '__main__':
main()