نویسنده
- 05 مرداد، 1401
- 6 دقیقه زمان مطالعه
- 7448 نفر
- 41
کد VBA بلک شولز
کد VBA بلک شولز
کد VBA بلک شولز : مدل بلک-شولز که به مدل بلک شولز مرتون (BSM) نیز معروف است، یکی از مفاهیم مهم در نظریه مالی مدرن است. این معادله ریاضی ارزش نظری مشتقات را بر اساس سایر ابزارهای سرمایه گذاری با در نظر گرفتن تأثیر زمان و سایر عوامل ریسک تخمین می زند. در سال 1973 توسعه یافت و هنوز به عنوان یکی از بهترین روش ها برای قیمت گذاری قرارداد اختیار معامله در نظر گرفته می شود.
مدل بلک شولز، با نام مستعار مدل بلک شولز مرتون (BSM)، یک معادله دیفرانسیل است که به طور گسترده برای قیمت گذاری قراردادهای اختیار معامله استفاده می شود.
مدل بلک شولز به پنج متغیر ورودی نیاز دارد: قیمت اعمال اختیار، قیمت فعلی سهام، زمان تا انقضا، نرخ بدون ریسک و نوسانات.
اگرچه معمولاً دقیق است، اما مدل بلک شولز مفروضات خاصی را ایجاد می کند که می تواند منجر به پیش بینی هایی شود که از نتایج دنیای واقعی متفاوت باشد.
مدل استاندارد BSM فقط برای قیمت گذاری آپشن های اروپایی استفاده می شود، زیرا در نظر نمی گیرد که گزینه های آمریکایی می توانند قبل از تاریخ انقضا اعمال شوند
فرضیات بلک شولز
هیچ سود سهامی در طول عمر اختیار معامله پرداخت نمی شود.
بازارها تصادفی هستند (یعنی حرکات بازار قابل پیش بینی نیست).
هیچ هزینه معامله ای در خرید اختیار وجود ندارد.
نرخ بدون ریسک و نوسانات دارایی پایه مشخص و ثابت است.
بازده دارایی پایه معمولاً توزیع می شود.
این اختیار اروپایی است و فقط در انقضا قابل استفاده است.
: Guide
Stock : قیمت سهم پایه
Exercise : قیمت اعمال
Time : زمان باقی مانده تا سررسید
Interest : سود بانکی یا انتظار بازدهی
Divyield : سود تقسیمی
Sigma : نوسان پذیری
Function dOne(stock, exercise, Time, _
interest, divyield, sigma)
dOne = (Log(stock / exercise) + _
(interest - divyield) * Time) / _
(sigma * Sqr(Time)) + 0.5 * sigma * _
Sqr(Time)
End Function
Function dTwo(stock, exercise, Time, _
interest, divyield, sigma)
dTwo = dOne(stock, exercise, Time, _
interest, divyield, sigma) - sigma * _
Sqr(Time)
End Function
Function BSMertonCall(stock, exercise, Time, _
interest, divyield, sigma)
BSMertonCall = stock * Exp(-divyield * _
Time) * Application.NormSDist _
(dOne(stock, exercise, Time, _
interest, divyield, sigma)) - exercise * _
Exp(-Time * interest) * Application.NormSDist _
(dTwo(stock, exercise, Time, interest, _
divyield, sigma))
End Function
'Put pricing function uses put-call
'parity theorem
Function BSMertonPut(stock, exercise, Time, _
interest, divyield, sigma)
BSMertonPut = BSMertonCall(stock, exercise, _
Time, interest, divyield, sigma) + _
exercise * Exp(-interest * Time) - _
stock * Exp(-divyield * Time)
End Function
'The standard normal probability density,
'this is N'(x)
Function normaldf(X)
normaldf = Exp(-X ^ 2 / 2) / _
(Sqr(2 * Application.Pi()))
End Function
Function DeltaCall(stock, exercise, Time, _
interest, divyield, sigma)
DeltaCall = Exp(-divyield * Time) * _
Application.NormSDist(dOne(stock, exercise, _
Time, interest, divyield, sigma))
End Function
Function DeltaPut(stock, exercise, Time, _
interest, divyield, sigma)
DeltaPut = -Exp(-divyield * Time) * _
Application.NormSDist(-dOne(stock, _
exercise, Time, interest, divyield, _
sigma))
End Function
Function OptionGamma(stock, exercise, Time, _
interest, divyield, sigma)
temp = dOne(stock, exercise, Time, _
interest, divyield, sigma)
OptionGamma = Exp(-divyield * Time) * _
Application.Norm_S_Dist(temp, 0) / _
(stock * sigma * Sqr(Time))
End Function
Function Vega(stock, exercise, Time, _
interest, divyield, sigma)
Vega = stock * Sqr(Time) * _
normaldf(dOne(stock, exercise, _
Time, interest, divyield, sigma)) _
* Exp(-divyield * Time)
End Function
Function ThetaCall(stock, exercise, Time, interest, divyield, sigma)
ThetaCall = -stock * normaldf _
(dOne(stock, exercise, Time, _
interest, divyield, sigma)) * _
sigma * Exp(-divyield * Time) / _
(2 * Sqr(Time)) + divyield * stock * _
Application.NormSDist(dOne(stock, _
exercise, Time, interest, _
divyield, sigma)) * Exp(-divyield * Time) _
- interest * exercise * Exp(-interest * _
Time) * Application.NormSDist _
(dTwo(stock, exercise, Time, _
interest, divyield, sigma))
End Function
Function ThetaPut(stock, exercise, Time, _
interest, divyield, sigma)
ThetaPut = -stock * normaldf _
(dOne(stock, exercise, _
Time, interest, divyield, sigma)) * _
sigma * Exp(-divyield * Time) / _
(2 * Sqr(Time)) - divyield * stock _
* Application.NormSDist(-dOne(stock, _
exercise, Time, interest, divyield, _
sigma)) * Exp(-divyield * Time) _
+ interest * exercise * Exp _
(-interest * Time) * Application.NormSDist _
(-dTwo(stock, exercise, Time, _
interest, divyield, sigma))
End Function
Function RhoCall(stock, exercise, Time, _
interest, divyield, sigma)
RhoCall = exercise * Time * _
Exp(-interest * Time) * _
Application.NormSDist(dTwo _
(stock, exercise, Time, interest, _
divyield, sigma))
End Function
Function RhoPut(stock, exercise, Time, _
interest, divyield, sigma)
RhoPut = -exercise * Time * _
Exp(-interest * Time) * _
Application.NormSDist(-dTwo _
(stock, exercise, Time, interest, _
divyield, sigma))
End Function
دیدگاه کاربران
هنوز دیدگاهی ثبت نشده است.