Penilaian Warrant dengan Monte Carlo

[Rekan-rekan milis,]

terima kasih kepada [rekan milis] yang telah berbaik hati mengijinkan untuk “aduk-aduk” source code dari software-nya. excellent work, lah. saya jadi belajar buanyak dari sini, mengenai model simulasi Monte Carlo (MC) dan terutama programming untuk macro Excel.

saya melihat bahwa walaupun ada pilihan American call/put namun secara fungsional pilihan ini tidak di-support, padahal warrant Indonesia bertipe American: apakah memang model MC pada dasarnya tidak men-support, atau barangkali software ini versi shareware yang fasilitasnya dibatasi [...]? :)

kemudian saya melakukan “aduk-aduk” secara kurang ajar :) yaitu sbb.:

diskretisasi (penggunaan time interval) saya hapus, dengan pertimbangan jika memang European-style saja yang di-support, diskretisasi kan sepertinya tidak diperlukan sehingga bisa dihapus demi komputasi yang lebih efisien. sebagai gantinya NumberOfRuns (sampel) saya tingkatkan dari 25 menjadi 100, dengan waktu komputasi tetap lebih singkat dari versi aslinya. dan Maturity kini tak lagi harus integer.

kemudian saya coba mengganti asumsi distribusi harga saham saat maturity dari normal menjadi lognormal (sebagaimana asumsi yang dipakai oleh model BS [Black-Scholes]). pertimbangannya siapa tahu perbedaan asumsi inilah yang membedakan (secara sangat signifikan) hasil model MC dengan hasil BS.

kemudian agar lebih ringkas dan readable, kode untuk put saya hapus, toh di Indonesia yang ada cuman call warrant. sedangkan penggunaan teknik variabel antithetic tetap dipertahankan.

aduk punya aduk, hasilnya sekarang lebih mendekati hasil BS, tapi mendekatinya masih malu-malu, jadi beda yang signifikan tersebut masih ada. [...]

function monty2(), yang sudah habis diaduk sana sini, saya lampirkan di bawah. mohon komentar.

gimana nih. apakah saya ngaduknya ngawur ataukah memang pada dasarnya nilai yang dihasilkan oleh MC cenderung sangat melecehkan option/warrant (relatif dibanding nilai yang dihasilkan oleh BS)?

saya pribadi sih memihak ke model BS. ntar kalau Mr. Boyle (yang pertama kali menggunakan metode MC untuk penilaian option) ikutan dapat Nobel, baru saya akan agak pikir-pikir untuk memihak ke MC :)


Function monty2(ByVal stock As Double, ByVal Exercise As Double, ByVal _
    Rate As Double, ByVal Volatility As Double, ByVal Maturity As _
    Double, Optional ByVal OptType) As Double

    ' as modified rather heavily by Lucky E. Santoso
   
    Dim NumberOfRuns As Integer
    Dim Antithetic1 As Double
    Dim Antithetic2 As Double
    Dim PriceOfOneRun1 As Double
    Dim PriceOfOneRun2 As Double
    Dim SumOfPrices As Double
    Dim OptionPrice As Double
    Dim R As Double
    Dim SD As Double
    Dim x As Integer
    Dim DoIt As Boolean
   
    DoIt = True
   
    If stock <= 0 Or Exercise <= 0 Or Rate <= 0 Or Volatility <= 0 Or _
        Maturity <= 0 Then DoIt = False
          
    If DoIt = True Then
   
        Rate = Rate / 100
        Volatility = Volatility / 100
        R = (Rate - 0.5 * Volatility ^ 2) * Maturity
        SD = Volatility * Maturity ^ 0.5
        NumberOfRuns = 100
             
        Randomize
       
        SumOfPrices = 0#
               
        For x = 1 To NumberOfRuns
           
            Antithetic1 = Application.NormSInv(Rnd())
            Antithetic2 = -1 * Antithetic1
               
            PriceOfOneRun1 = stock * Exp(R + SD * Antithetic1)
            PriceOfOneRun2 = stock * Exp(R + SD * Antithetic2)
                       
            PriceOfOneRun1 = Application.Max(0, PriceOfOneRun1 - Exercise)
            PriceOfOneRun2 = Application.Max(0, PriceOfOneRun2 - Exercise)
                     
            SumOfPrices = SumOfPrices + PriceOfOneRun1 + PriceOfOneRun2
           
        Next x
       
        OptionPrice = SumOfPrices / (NumberOfRuns * 2) * _
            Exp(-1 * Maturity * Rate)
        monty2 = OptionPrice
       
    Else
   
        monty2 = -1
       
    End If
       
End Function

Leave a Comment

Security Code: