全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 Excel
1037 1
2013-04-08
這是SHEET 1的程式碼

Public Sub jj()

Dim S As Double
Dim K As Double
Dim T As Double
Dim sig As Double
Dim r As Double
Dim y As Double
Dim X As Double
Dim CPrice As Double, PPrice As Double


S = Worksheets("sheet1").Range("B2").Value
K = Worksheets("sheet1").Range("C2").Value
X = Worksheets("sheet1").Range("D2").Value
T = Worksheets("sheet1").Range("E2").Value
sig = Worksheets("sheet1").Range("F2").Value
r = Worksheets("sheet1").Range("G2").Value
y = Worksheets("sheet1").Range("H2").Value

CPrice = CashOrNothing("C", S, K, X, T, sig, r, y)
PPrice = CashOrNothing("P", S, K, X, T, sig, r, y)

Worksheets("sheet1").Range("B7").Value = CPrice
Worksheets("sheet1").Range("C7").Value = PPrice




End Sub




這是MODULE 的程式碼
'// cash or nothing option


Public Function NorPdf(d As Double) As Double
Dim ans As Double

Const pi = 3.14159265358979
ans = Exp(-d * d / 2) / Sqr(2 * pi)
NorPdf = ans

End Function


Public Function NorCdf(d As Double) As Double
Dim ans As Double
Dim g As Double

Const a1 = 0.4361836
Const a2 = -0.1201676
Const a3 = 0.937298

g = 1 / (1 + 0.33267 * d)

If d >= 0 Then
ans = 1 - (a1 * g + a2 * g * g + a3 * g * g * g) * NorPdf(d)
Else
ans = 1 - NorCdf(-d)
End If
NorCdf = ans

End Function



Public Function CashOrNothing(ClassFlag As String, S As Double, K As Double, X As Double, T As Double, r As Double, y As Double, sig As Double) As Double
Dim d As Double
d = (Log(S / K) + (r - y - sig ^ 2 / 2) * T) / (sig * Sqr(T))

If ClassFlag = " C " Then
   CashOrNothing = X * Exp(-r * T) * NorCdf(d)
ElseIf ClassFlag = " P " Then
   CashOrNothing = X * Exp(-r * T) * NorCdf(-d)
End If

    Range("B6").Select
    ActiveCell.FormulaR1C1 = "call"
    Range("C6").Select
    ActiveCell.FormulaR1C1 = "put"
    Range("A7").Select
    ActiveCell.FormulaR1C1 = "premium"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "K"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "X"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "T"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "sig"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "r"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "y"




End Function



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-4-14 17:04:16
我看到在 CashOrNothing()这个函数中的语句:
If ClassFlag = " C " Then
   CashOrNothing = X * Exp(-r * T) * NorCdf(d)
ElseIf ClassFlag = " P " Then
" C " 有空格,大概需要改成"C";" P " 有空格,大概需要改成"P"。改后再试试。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群