Lowering the Barrier to Stream Processing With Alex Morley | Current 2022
final
1. #CSC521 Final Project
import os
import time
import random
from datetime import date
os.chdir("C:/Users/Desktop")
from nlib import *
import pickle
data = pickle.load(open('clients.pickle.txt'))
#correct stock ticker
for client in data:
if 'WAG' in data[client].keys():
data[client]['WBA']=data[client]['WAG']
del data[client]['WAG']
if 'BRK.B' in data[client].keys():
data[client]['BRK-B']=data[client]['BRK.B']
del data[client]['BRK.B']
else:
pass
symbol=[]
for client in data:
for stock in data[client]:
if stock in symbol:
pass
else:
symbol.append(stock)
stockinfo = PersistentDictionary("stockinfo.sqlite")
for stock in symbol:
if stock in stockinfo:
pass
else:
h=YStock(stock).historical(stop=date(2015,3,31)) #download historiacal
information from Yahoo Finance
stockinfo[stock]=h
s0={}
for stock in symbol:
s0[stock]=stockinfo[stock][-1]["adjusted_close"]
logreturn={} #calculate log return
for stock in symbol:
logreturn[stock]=[day["log_return"] for day in stockinfo[stock]]
# Monte Carlo Simulation
def simulate_once(h,file):
rn=[]
for i in range(h):
n=random.randint(1,250)
rn.append(n)
total=0.0
2. thisstock=data[client].keys()
for stock in thisstock:
nshare=data[client][stock]
p0=s0[stock]
log=sum(logreturn[stock][-a] for a in rn)
p1=p0*exp(log)
pandl=(p1-p0)
pandl=(p1-p0)*nshare
total +=pandl
return total
def simulate_many(h,file,p,N=1000):
final=[]
for i in range(N):
pl=simulate_once(h,file)
final.append(pl)
final.sort()
final.reverse()
return final[int(p*N)]
def brokerage():
brokerage={}
for stock in symbol:
brokerage[stock]=0
for client in data:
for stock in data[client]:
brokerage[stock]+=data[client][stock]
return brokerage
def onestock(h,file,p,N=1000):
final=[]
for i in range(N):
pl=simulate_once(h,file)
final.append(pl)
final.sort()
final.reverse()
return final
#Value at risk for every client:
for client in data:
print client, simulate_many(7,client,0.99)
#Value at risk for the brokeragehouse:
brokhouse=brokerage()
print 'cumulative',simulate_many(7,brokhouse,0.99)
#histogram for individual stock
AIG=onestock(5,data[client]['AIG'],0.99)
PEP=onestock(5,data[client]['PEP'],0.99)
Canvas(title='99% Var for AIG').hist(AIG).save('AIG.png')
Canvas(title='99% Var for PEP').hist(PEP).save('PEP.png')