MonteCarlo Simulation

Bonjour à tous,

Je dois réaliser une simulation MonteCarlo sur VBA et pour ca j'ai une UDF de 7 paramètres dont un optionnel.

J'utilise une boucle "for ... next" et je voudrais inclure une condition if selon la valeur de mon paramètre optionnel. Comment faire svp ?

Bonjour et

Donne une valeur par défaut à ton paramètre optionnel et teste ensuite la valeur dans ta boucle.

Bonjour,

Merci pour votre réponse. J'ai donné une valeur à mon paramètre optionnel mais je voulais donner les conditions si jamais la valeur du paramètre optionnel est différente de la valeur par défaut.

16mc-simulation.xlsm (24.20 Ko)

Je ne suis pas sûr d'avoir bien compris ... voici quand même :

Option Explicit

Function MCOptionPrice(price As Double, _
                    Strike As Double, _
                    rate As Double, _
                    volatility As Double, _
                    expiry As Double, _
                    nbIterations As Long, _
                    Optional optionType As String = "call") As Variant

    Dim i As Long
    Dim random As Double, futureprice As Double

    For i = 1 To nbIterations
        random = Application.WorksheetFunction.NormSInv(Rnd())
        futureprice = price * Exp((rate - volatility * volatility / 2) * expiry + random * volatility * Sqr(expiry))

        MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(futureprice - Strike, 0)

        Select Case optionType
            Case "call"
                MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(futureprice - Strike, 0)
            Case "put"
                MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(Strike - futureprice, 0)
            Case "Wrong option type"

        End Select

    Next i

    MCOptionPrice = MCOptionPrice * Exp(-rate * expiry) / nbIterations

End Function

Merci beaucoup pour votre aide.

En faite le problème c'est que la formule de ma fonction dépend d'un des paramètres (en l'occurence celui qui est optionnel).

Par défaut (si paramètre optionnel non utilisé)

MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(futureprice - Strike, 0)

Si optiontype = "call" alors

MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(futureprice - Strike, 0)

Si optiontype = "put" alors

MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(Strike - futureprice, 0)

Si optiontype = autre chose que "put" ou "call"

MCOptionPrice = "Wrong option type"

Et je ne sais pas comment inclure ces conditions dans mon code et qu'il soit fonctionnel

Merci bcp @Steelson

variante

Option Explicit

Function MCOptionPrice(price As Double, _
                    Strike As Double, _
                    rate As Double, _
                    volatility As Double, _
                    expiry As Double, _
                    nbIterations As Long, _
                    Optional optionType As String = "call") As Variant

    Dim i As Long
    Dim random As Double, futureprice As Double

    For i = 1 To nbIterations
        random = Application.WorksheetFunction.NormSInv(Rnd())
        futureprice = price * Exp((rate - volatility * volatility / 2) * expiry + random * volatility * Sqr(expiry))

        MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(futureprice - Strike, 0)

        Select Case optionType
            Case "call"
                MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(futureprice - Strike, 0)
            Case "put"
                MCOptionPrice = MCOptionPrice + Application.WorksheetFunction.Max(Strike - futureprice, 0)
            Case Else

        End Select

    Next i

    MCOptionPrice = MCOptionPrice * Exp(-rate * expiry) / nbIterations

End Function
Rechercher des sujets similaires à "montecarlo simulation"