Discrete final

3437 days ago by Emiel.Ergo

def function(S,Y,N): return Y/N 
       
def v(S,Y,n,N,a,r,u,d): p_perp = (1+r-d)/(u-d) q_perp = (u-1-r)/(u-d) if n==N: return function(S,Y,N) else: return (1/(1+r))*(p_perp*v(u*S,Y+a[n+1]*u*S,n+1,N,a,r,u,d)+q_perp*v(d*S,Y+a[n+1]*d*S,n+1,N,a,r,u,d)) 
       
def delta(S,Y,n,N,a,r,u,d): return (v(u*S,Y+a[n+1]*u*S,n+1,N,a,r,u,d)-v(d*S,Y+a[n+1]*d*S,n+1,N,a,r,u,d))/(u*S-d*S) 
       
def Asianforwardcall(S,Y,N,m,K): return max(0,Y/(N-m)-K) 
       
def Asian(S,Y,n,N,a,r,u,d,m,K): p_perp = (1+r-d)/(u-d) q_perp = (u-1-r)/(u-d) for i in range(0,m+1): a.append(0) for i in range(m+1,N+1): a.append(1) if n==N: return Asianforwardcall(S,Y,N,m,K) else: return (1/(1+r))*(p_perp*Asian(u*S,Y+a[n+1]*u*S,n+1,N,a,r,u,d,m,K)+q_perp*Asian(d*S,Y+a[n+1]*d*S,n+1,N,a,r,u,d,m,K)) 
       
a = [] Asian(100,0,0,12,a,0.002,1.007,1/1.007,6,100) 
       
def Builder(str,u,d): b =[] for a in str: if a == 'T': b.append(d) else: b.append(u) return b 
       
def deltaAsian(S,Y,n,N,a,r,u,d,m,K): for i in range(0,m+1): a.append(0) for i in range(m+1,N+1): a.append(1) return (Asian(u*S,Y+a[n+1]*u*S,n+1,N,a,r,u,d,m,K)-Asian(d*S,Y+a[n+1]*d*S,n+1,N,a,r,u,d,m,K))/(u*S-d*S) 
       
def deltaAsianpad(str,S,Y,n,N,a,r,u,d,m,K,S_0): a=[] for i in range(0,m+1): a.append(0) for i in range(m+1,N+1): a.append(1) Y = [] S = [] Hedge = [] pad = Builder(str,u,d) S.append(S_0) Y.append(S_0*a[0]) for i in range (1,N+1): S.append(pad[i-1]*S[i-1]) for i in range (1,N+1): Y.append((Y[i-1]+S[i])*a[i]) for i in range(0,N): Hedge.append(deltaAsian(S[i],Y[i],i,N,a,r,u,d,m,K)) return Hedge 
       
S = Y = a = [] deltaAsianpad('THHHHTTHTHHH',S,Y,0,12,a,0.002,1.007,1/1.007,6,100,100); 
       
def Asianfloatstrike(S,Y,N): return max(0, S-(1/N)*(Y-S)) 
       
def Asianfloat(S,Y,n,N,a,r,u,d): p_perp = (1+r-d)/(u-d) q_perp = (u-1-r)/(u-d) for i in range(0,N+1): a.append(1) if n==N: return Asianfloatstrike(S,Y,N) else: return (1/(1+r))*(p_perp*Asianfloat(u*S,Y+a[n+1]*u*S,n+1,N,a,r,u,d)+q_perp*Asianfloat(d*S,Y+a[n+1]*d*S,n+1,N,a,r,u,d)) 
       
X=[] Asianfloat(100,100,0,18,X,0.001,1.005,1/1.005) 
       
def Hawaiaanspayoff(S,Y,n,K): return K - (1/(n+1))*Y 
       
def Hawaiaans(S,Y,n,N,r,u,d,K): p_perp = (1+r-d)/(u-d) q_perp = (u-1-r)/(u-d) if n==N: return max(0, Hawaiaanspayoff(S,Y,N,K)) else: return max (Hawaiaanspayoff(S,Y,n,K) , (1/(1+r))*(p_perp*Hawaiaans(u*S,Y+u*S,n+1,N,r,u,d,K)+q_perp*Hawaiaans(d*S,Y+d*S,n+1,N,r,u,d,K))) 
       
Hawaiaans(100,100,0,10,0.001,1.005,1/1.005,102) 
       
def deltaHawai(S,Y,n,N,r,u,d,K): return (Hawaiaans(S,Y+u*S,n+1,N,r,u,d,K)-Hawaiaans(S,Y+d*S,n+1,N,r,u,d,K))/(S*(u-d)) 
       
def prijzen(str,S_0,n,N,r,u,d,K): Y = [] S = [] prijs = [] pad = Builder(str,u,d) S.append(S_0) Y.append(S_0) for i in range (1,N+1): S.append(pad[i-1]*S[i-1]) for i in range (1,N+1): Y.append(Y[i-1]+S[i]) for i in range (0, N+1): prijs.append(Hawaiaans(S[i],Y[i],i,N,r,u,d,K)) return prijs 
       
def payoff(str,S_0,n,N,r,u,d,K): Y = [] S = [] l = [] pad = Builder(str,u,d) S.append(S_0) Y.append(S_0) for i in range (1,N+1): S.append(pad[i-1]*S[i-1]) for i in range (1,N+1): Y.append(Y[i-1]+S[i]) for i in range (0,N+1): l.append((Hawaiaanspayoff(S,Y[i],i,K))) return l 
       
def toptime(str,S_0,N,r,u,d,K): Y = [] S = [] pad = Builder(str,u,d) S.append(S_0) Y.append(S_0) for i in range (1,N+1): S.append(pad[i-1]*S[i-1]) for i in range (1,N+1): Y.append(Y[i-1]+S[i]) for i in range(0,N+1): if (Hawaiaanspayoff(S[i],Y[i],i,K) == Hawaiaans(S[i],Y[i],i,N,r,u,d,K)): return i else: print('niet') 
       
toptime('TTHHHTTHTH',100 , 10,0.001,1.005,1/1.005,102);prijzen('TTHHHTTHTH',100 ,0, 10,0.001,1.005,1/1.005,102);payoff('TTHHHTTHTH',100 ,0, 10,0.001,1.005,1/1.005,102)