Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выразить значение через Ньютона-Рафсона - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выразить значение через Ньютона-Рафсона (Макросы/Sub)
Выразить значение через Ньютона-Рафсона
mra12101 Дата: Четверг, 05.10.2017, 15:07 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Добрый день!
Прошу помощи в следующем вопросе.
Есть макрос, который считает волатильность по формуле Ньютона на основе формулы Блэка-Шоулза.
Как с помощью формулы Ньютона можно вычислить текущую рыночную цену 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

d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
nd1 = Application.NormSDist(d1)
nd2 = Application.NormSDist(d2)
nnd1 = Application.NormSDist(-d1)
nnd2 = Application.NormSDist(-d2)

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

d1 = (Log(S / K) + (r - q + 0.5 * v ^ 2) * T) / (v * Sqr(T))
d2 = (Log(S / K) + (r - q - 0.5 * v ^ 2) * T) / (v * Sqr(T))
nd1 = Application.NormSDist(d1)
nd2 = Application.NormSDist(d2)
nnd1 = Application.NormSDist(-d1)
nnd2 = Application.NormSDist(-d2)

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]

Автор - mra12101
Дата добавления - 05.10.2017 в 15:07
iMrTidy Дата: Четверг, 05.10.2017, 17:23 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 11 ±
Замечаний: 0% ±

Excel 2010
mra12101, это едва ли вопрос к программистам...Вы хотя бы формулу(ы) дали или ссылочку(ы) на них.


Сообщение отредактировал iMrTidy - Четверг, 05.10.2017, 17:25
 
Ответить
Сообщениеmra12101, это едва ли вопрос к программистам...Вы хотя бы формулу(ы) дали или ссылочку(ы) на них.

Автор - iMrTidy
Дата добавления - 05.10.2017 в 17:23
mra12101 Дата: Воскресенье, 08.10.2017, 12:20 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
mra12101, это едва ли вопрос к программистам...Вы хотя бы формулу(ы) дали или ссылочку(ы) на них.


Спасибо за ответ. Я уже понял, что вопрос поставлен не корректно. Извиняюсь.
Можно теперь другой вопрос: как дополнить этот VBA код, чтобы он мог выводить в ячейку предварительные расчеты, например d1 или nnd1?

И подскажите пожалуйста, какую литературу почитать по ВБА, доступную для понимания.
Спасибо!
 
Ответить
Сообщение
mra12101, это едва ли вопрос к программистам...Вы хотя бы формулу(ы) дали или ссылочку(ы) на них.


Спасибо за ответ. Я уже понял, что вопрос поставлен не корректно. Извиняюсь.
Можно теперь другой вопрос: как дополнить этот VBA код, чтобы он мог выводить в ячейку предварительные расчеты, например d1 или nnd1?

И подскажите пожалуйста, какую литературу почитать по ВБА, доступную для понимания.
Спасибо!

Автор - mra12101
Дата добавления - 08.10.2017 в 12:20
iMrTidy Дата: Воскресенье, 08.10.2017, 15:04 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 11 ±
Замечаний: 0% ±

Excel 2010
mra12101, модераторы не очень любят, когда в одной теме обсуждаются разные вопросы. С другой стороны, вопрос о задании значения ячейке один из базовых и ответ можно найти здесь на форуме. Или если Вы создадите новую тему, то Вам наверняка все распишут в лучшем виде.
С литературой даже не знаю, сходите в ближайший книжный и спросите, что подходит для начинающего. Или может быть коллеги по форуму подскажут?
 
Ответить
Сообщениеmra12101, модераторы не очень любят, когда в одной теме обсуждаются разные вопросы. С другой стороны, вопрос о задании значения ячейке один из базовых и ответ можно найти здесь на форуме. Или если Вы создадите новую тему, то Вам наверняка все распишут в лучшем виде.
С литературой даже не знаю, сходите в ближайший книжный и спросите, что подходит для начинающего. Или может быть коллеги по форуму подскажут?

Автор - iMrTidy
Дата добавления - 08.10.2017 в 15:04
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выразить значение через Ньютона-Рафсона (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!