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