Inc Type case Vect double et ref fonction double
c
Bonjour, comment régler le caprice de la fonction d1d2 qui doit assigner deux double à deux cases d'un vecteur,
j'obtiens l'erreur Incompatibilité de types lorsque j'appelle la première case du vecteur fonction d1d2 avec l'instruction d1d2(St, t, K, r, M, sigma)(1, 1) .
Merci pour votre aide.
Function d1d2(St As Double, t As Double, K As Double, r As Double, M As Double, sigma As Double) As Double
ReDim d1d2(1, 2)
d1d2(1, 1) = (WorksheetFunction.Ln(St / K) + (r + 0.5 * WorksheetFunction.Power(sigma, 2)) * (M - t)) / (sigma * WorksheetFunction.Power((M - t), 0.5))
d1d2(1, 2) = d1d2(1, 1) - sigma * WorksheetFunction.Power((M - t), 0.5)
End Function
Function BSCALLPRICE(St As Double, t As Double, K As Double, r As Double, M As Double, sigma As Double) As Double
Ct = St * WorksheetFunction.NormDist(d1d2(St, t, K, r, M, sigma)(1, 1), 0, 1, True) - K * Exp(-r * (M - t)) * WorksheetFunction.NormDist(d1d2(St, t, K, r, M, sigma)(1, 2), 0, 1, True)
End Function
Sub CALLPRICE()
Dim St As Double
Dim t As Double
Dim Ct As Double
Dim K As Double
Dim K2 As Double
Dim r As Double
Dim M As Double
Dim sigma As Double
St=100
t=0
K=100
r=0,02
M=1
sigma=0,15
Ct = BSCALLPRICE(St, t, K, r, M, sigma)
End Sub
c
Lorsque je modifie l'appel de la fonction la ligne suivante
Dim d1d2Vector(1, 2) As Double
d1d2Vector = d1d2(St, t, K, r, M, sigma)
donne l'erreur de compilation: "Impossible d'affecter un tableau"
Function d1d2(St As Double, t As Double, K As Double, r As Double, M As Double, sigma As Double) As Double
ReDim d1d2(1, 2)
d1d2(1, 1) = (WorksheetFunction.Ln(St / K) + (r + 0.5 * WorksheetFunction.Power(sigma, 2)) * (M - t)) / (sigma * WorksheetFunction.Power((M - t), 0.5))
d1d2(1, 2) = d1d2(1, 1) - sigma * WorksheetFunction.Power((M - t), 0.5)
End Function
Function BSCALLPRICE(St As Double, t As Double, K As Double, r As Double, M As Double, sigma As Double) As Double
Dim d1d2Vector(1, 2) As Double
d1d2Vector = d1d2(St, t, K, r, M, sigma)
Ct = St * WorksheetFunction.NormDist(d1d2Vector(1, 1), 0, 1, True) - K * Exp(-r * (M - t)) * WorksheetFunction.NormDist(d1d2(St, t, K, r, M, sigma)(1, 2), 0, 1, True)
End Function
Sub CALLPRICE()
Dim St As Double
Dim t As Double
Dim Ct As Double
Dim Pt As Double
Dim K As Double
Dim K2 As Double
Dim r As Double
Dim M As Double
Dim sigma As Double
St = 100
t = 0
K = 100
r = 0.02
M = 1
sigma = 0.15
Ct = BSCALLPRICE(St, t, K, r, M, sigma)
End Sub
c
Ci joint le fichier xlsm
c
Je m'en suis sorti en définissant le vecteur comme variable globale. Merci.
bonjour,
une proposition de correction
Function d1d2(St As Double, t As Double, K As Double, r As Double, M As Double, sigma As Double) As Variant
Dim vector(1, 2)
vector(1, 1) = (WorksheetFunction.Ln(St / K) + (r + 0.5 * WorksheetFunction.Power(sigma, 2)) * (M - t)) / (sigma * WorksheetFunction.Power((M - t), 0.5))
vector(1, 2) = vector(1, 1) - sigma * WorksheetFunction.Power((M - t), 0.5)
d1d2 = vector
End Function
Function BSCALLPRICE(St As Double, t As Double, K As Double, r As Double, M As Double, sigma As Double) As Double
Ct = St * WorksheetFunction.NormDist(d1d2(St, t, K, r, M, sigma)(1, 1), 0, 1, True) - K * Exp(-r * (M - t)) * WorksheetFunction.NormDist(d1d2(St, t, K, r, M, sigma)(1, 2), 0, 1, True)
End Function
Sub CALLPRICE()
Dim St As Double
Dim t As Double
Dim Ct As Double
Dim K As Double
Dim K2 As Double
Dim r As Double
Dim M As Double
Dim sigma As Double
St = 100
t = 0
K = 100
r = 0.02
M = 1
sigma = 15
Ct = BSCALLPRICE(St, t, K, r, M, sigma)
End Sub