from S import *
from Prix_en_zero import *
from Prix import *
from Couverture import *

def defaut_de_couverture(N,K,r,a,b,cours):
    Valeur=np.zeros(N+1)
    Defaut=np.zeros(N+1)

  # A l'instant 0
    S_0 = cours[0]
    V_0 = Prix(0,N,K,r,a,b,S_0)
    Valeur[0] = V_0

    # calcul de la couverture entre 0 et 1 
    H = Couverture(1,N,K,r,a,b,S_0)
    SoHo = V_0 - H * S_0 # condition d'autofinancement

    for n in range(1,N):#n=1:N-1
        #on est en n
        S_n = cours[n]
 
        # nouvelle valeur du portefeuille en n
        #A COMPLETER
        V = H * S_n + SoHo * ????? 
        # calcul de la nouvelle couverture entre n et n+1
        H = Couverture(n+1,N,K,r,a,b,S_n)
        # autofinancement
        #A COMPLETER
        SoHo   = ?????
  
        Valeur[n] = V
        Defaut[n] = V-Prix(n+1,N,K,r,a,b,S_n)
    # on est en N
    S_N  = cours[N]
    V    = H * S_N + SoHo * (1+r)
    res  = V - payoff(cours[N],K)

    Valeur[N] = V
    Defaut[N] = res
  
    cours_final = cours[N]
    valeur_finale = V
    
    return cours_final, valeur_finale

q=20
valeur=np.zeros(q)
cours=np.zeros(q)
v_payoff=np.zeros(q)
for i in range(q):
    cours[i],valeur[i] = defaut_de_couverture(N,K,r,a,b,S(N,0.5,a,b,S0))
    v_payoff[i]=payoff(cours[i],K)


defautCouverture=np.linalg.norm(v_payoff-valeur)
print('defautCouverture: ', defautCouverture)

plt.figure()
plt.scatter(cours,valeur)
plt.show()
