Добрый день! Прошу помощи в следующем вопросе. Есть макрос, который считает волатильность по формуле Ньютона на основе формулы Блэка-Шоулза. Как с помощью формулы Ньютона можно вычислить текущую рыночную цену S, при уже новой найденной волатильности v Буду очень признателен за помощь! Спасибо!
[vba]
Код
Option Explicit
Function EuropeanOption(CallOrPut, S, K, v, r, T, q) Dim d1 As Double, d2 As Double, nd1 As Double, nd2 As Double Dim nnd1 As Double, nnd2 As Double
If CallOrPut = "Call" Then EuropeanOption = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2 Else EuropeanOption = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2 End If End Function
Function ImpliedVolatility(CallOrPut, S, K, r, T, q, OptionValue, guess) Dim epsilon As Double, dVol As Double, vol_1 As Double Dim i As Integer, maxIter As Integer, Value_1 As Double, vol_2 As Double Dim Value_2 As Double, dx As Double
dVol = 0.00001 epsilon = 0.00001 maxIter = 100 vol_1 = guess i = 1 Do Value_1 = EuropeanOption(CallOrPut, S, K, vol_1, r, T, q) vol_2 = vol_1 - dVol Value_2 = EuropeanOption(CallOrPut, S, K, vol_2, r, T, q) dx = (Value_2 - Value_1) / dVol If Abs(dx) < epsilon Or i = maxIter Then Exit Do vol_1 = vol_1 - (OptionValue - Value_1) / dx i = i + 1 Loop ImpliedVolatility = vol_1 End Function
Sub Vola()
End Sub
[/vba]
Добрый день! Прошу помощи в следующем вопросе. Есть макрос, который считает волатильность по формуле Ньютона на основе формулы Блэка-Шоулза. Как с помощью формулы Ньютона можно вычислить текущую рыночную цену S, при уже новой найденной волатильности v Буду очень признателен за помощь! Спасибо!
[vba]
Код
Option Explicit
Function EuropeanOption(CallOrPut, S, K, v, r, T, q) Dim d1 As Double, d2 As Double, nd1 As Double, nd2 As Double Dim nnd1 As Double, nnd2 As Double
If CallOrPut = "Call" Then EuropeanOption = S * Exp(-q * T) * nd1 - K * Exp(-r * T) * nd2 Else EuropeanOption = -S * Exp(-q * T) * nnd1 + K * Exp(-r * T) * nnd2 End If End Function
Function ImpliedVolatility(CallOrPut, S, K, r, T, q, OptionValue, guess) Dim epsilon As Double, dVol As Double, vol_1 As Double Dim i As Integer, maxIter As Integer, Value_1 As Double, vol_2 As Double Dim Value_2 As Double, dx As Double
dVol = 0.00001 epsilon = 0.00001 maxIter = 100 vol_1 = guess i = 1 Do Value_1 = EuropeanOption(CallOrPut, S, K, vol_1, r, T, q) vol_2 = vol_1 - dVol Value_2 = EuropeanOption(CallOrPut, S, K, vol_2, r, T, q) dx = (Value_2 - Value_1) / dVol If Abs(dx) < epsilon Or i = maxIter Then Exit Do vol_1 = vol_1 - (OptionValue - Value_1) / dx i = i + 1 Loop ImpliedVolatility = vol_1 End Function
mra12101, это едва ли вопрос к программистам...Вы хотя бы формулу(ы) дали или ссылочку(ы) на них.
Спасибо за ответ. Я уже понял, что вопрос поставлен не корректно. Извиняюсь. Можно теперь другой вопрос: как дополнить этот VBA код, чтобы он мог выводить в ячейку предварительные расчеты, например d1 или nnd1?
И подскажите пожалуйста, какую литературу почитать по ВБА, доступную для понимания. Спасибо!
mra12101, это едва ли вопрос к программистам...Вы хотя бы формулу(ы) дали или ссылочку(ы) на них.
Спасибо за ответ. Я уже понял, что вопрос поставлен не корректно. Извиняюсь. Можно теперь другой вопрос: как дополнить этот VBA код, чтобы он мог выводить в ячейку предварительные расчеты, например d1 или nnd1?
И подскажите пожалуйста, какую литературу почитать по ВБА, доступную для понимания. Спасибо!mra12101
mra12101, модераторы не очень любят, когда в одной теме обсуждаются разные вопросы. С другой стороны, вопрос о задании значения ячейке один из базовых и ответ можно найти здесь на форуме. Или если Вы создадите новую тему, то Вам наверняка все распишут в лучшем виде. С литературой даже не знаю, сходите в ближайший книжный и спросите, что подходит для начинающего. Или может быть коллеги по форуму подскажут?
mra12101, модераторы не очень любят, когда в одной теме обсуждаются разные вопросы. С другой стороны, вопрос о задании значения ячейке один из базовых и ответ можно найти здесь на форуме. Или если Вы создадите новую тему, то Вам наверняка все распишут в лучшем виде. С литературой даже не знаю, сходите в ближайший книжный и спросите, что подходит для начинающего. Или может быть коллеги по форуму подскажут?iMrTidy
Вышенаписанное мной не является истиной, но лишь моя точка зрения, которая скорее всего ошибочна.