(1)
Function putoption(S, u, d, r, K, t, n) ' ' Macro1 Macro ' u = (u - 1) / (n * t) + 1 d = (d - 1) / (n * t) + 1 r = (r - 1) / (n * t) + 1 p = (r - d) / (u - d) num = Application.WorksheetFunction.Round(t * n, 0) pop = 0 For i = 0 To num pop = pop + Kumiawase(num, i) * p ^ (num - i) * (1 - p) ^ i * Application.WorksheetFunction.Max(K - S * u ^ (num - i) * d ^ i, 0) Next i 'putoption = p ^ (num - i) * (1 - p) ^ i * Application.WorksheetFunction.Max(K - S * u ^ (num - i) * d ^ i, 0) putoption = pop / r ^ num ' End Function |
・if文
Function Kumiawase(n, i) Kumiawase = 1 If i > 0 Then Kumiawase = (n - i + 1) / i * Kumiawase(n, i - 1) End If End Function |
・PCPのプログラム
Function PCP(S, C, K, r, t) PCP = C - S + K * Exp(-r * t) End Function |
(2)IVを求める
・コールオプション
Function calloption(S, u, d, r, K, t, n) ' ' Macro1 Macro ' u = (u - 1) / (n * t) + 1 d = (d - 1) / (n * t) + 1 r = (r - 1) / (n * t) + 1 p = (r - d) / (u - d) num = t * n C = 0 For i = 0 To num C = C + Kumiawase(num, i) * p ^ (num - i) * (1 - p) ^ i * Application.WorksheetFunction.Max(S * u ^ (num - i) * d ^ i - K, 0) Next i calloption = C / r ^ num ' End Function |
・最小化よりIVを求める
Function calloption(S, u, d, r, K, t, n) のうちuをセルより導出する。 例:Function calloption(S, B14, d, r, K, t, n) →A14に「=(Function calloption(S, B14, d, r, K, t, n)-市場価格の値)^2」を入力 →B14には適当な値を入れる →solverでA14を最小化するB14を求める。 →IV |
・プットの場合も同様に、
Function putoption(S, u, d, r, K, t, n) のうちuをセルより導出する。 例:Function putoption(S, B14, d, r, K, t, n) →A14に「=(putoption(S, B14, d, r, K, t, n)-市場価格の値)^2」を入力 →B14には適当な値を入れる →solverでA14を最小化するB14を求める。 →IV
|