# -*- coding: utf-8 -*- """ Created on Thu Apr 8 14:51:16 2021 @author: turinici """ #import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm T=1 # temps final N=255*8*4 dt=T/N timerange = np.linspace(0,T,N+1,endpoint=True) timerange=timerange[:,None] print(timerange.shape) M=150 #no de realisations #construction de Wt: Wt=np.zeros((N+1,M)) W0=0 dW=np.sqrt(dt)*np.random.randn(N,M) Wt[0,:]=W0 Wt[1:,:]=W0+np.cumsum(dW,0) plt.figure() plt.subplot(1,2,1) plt.plot(Wt) plt.title('Realisations du brownien') S0=100.0 mu=0.1 sigma=0.15 taux_r=0.05 def sousjacent(mu,sigma,t,Wt): """ Rend les realisations de St une fois donne le tmps et Wt avec la formule St = S0 * exp( (mu-sigma*sigma/2.0)*t + sigma*Wt) """ return S0*np.exp( (mu-sigma**2.0/2.0)*t+ sigma*Wt) St= sousjacent(mu,sigma,timerange,Wt) plt.subplot(1,2,2) plt.plot(St) plt.title('Realisations du sous-jacent') plt.savefig("realisations_Wt_St.jpg") def delta_stop_loss(Price,Strike): """delta stop-loss de niveau Strike: fonction indicatrice de Price > Strike """ return np.heaviside(Price-Strike,0) K=110 # niveau de stop-loss #argent initial = S0 #Stop loss: on detient 1 actif si Price > Strike, 0 sinon cash = np.zeros_like(St) deltaancien=delta_stop_loss(S0,K) #calcul de delta cash[0,:]=S0 - deltaancien*S0 for jj in range(N): cash[jj+1,:]= cash[jj,:]*np.exp(taux_r*dt)# capitalisation #calcul du nouveau delta deltanouveau = delta_stop_loss(St[jj+1,:],K) cash[jj+1,:]= cash[jj+1,:]- (deltanouveau-deltaancien)*St[jj+1,:] #prix de la prise en compte du delta hedging # t -> t + dt : ajustement de porfef. de replication, capitalisation cash deltaancien=deltanouveau cash[-1,:] += deltanouveau*St[-1,:]#cash obtenu par la vente du portef de couverture # histogramme du cash plt.figure(2) plt.hist(cash[-1,:] - np.maximum(St[-1,:],K),density=True)