برای دریافت مشاوره با کارشناسان و آموزش مناسب ، با شماره 09177062806 تماس بگیرید

بلک شولز

مدل بلک شولز چیست؟ توضیحی ساده و کاربردی

مدل بلک شولز (Black-Scholes) یکی از معروف‌ترین ابزارهای مالی برای ارزش‌گذاری گزینه‌ها (Options) در بازارهای مالی است. این مدل که در سال ۱۹۷۳ توسط اقتصاددانان فیشر بلک، مایرون شولز و رابرت مرتون توسعه یافت، به سرمایه‌گذاران و تحلیلگران کمک می‌کند تا قیمت منصفانه قراردادهای اختیار معامله را محاسبه کنند. در این مقاله، به زبانی ساده توضیح می‌دهیم که مدل بلک شولز چیست، چگونه کار می‌کند و چرا در دنیای مالی اهمیت دارد.

مدل بلک شولز چیست؟

مدل بلک شولز یک فرمول ریاضی است که برای تعیین قیمت عادلانه قراردادهای اختیار معامله (اختیار خرید یا فروش) استفاده می‌شود. اختیار معامله نوعی ابزار مالی است که به خریدار این حق (نه اجبار) را می‌دهد که دارایی خاصی (مثل سهام) را در زمانی مشخص و با قیمتی از پیش تعیین‌شده بخرد یا بفروشد. این مدل با در نظر گرفتن عوامل مختلف، ارزش این قراردادها را تخمین می‌زند.

عوامل کلیدی در مدل

برای محاسبه قیمت یک اختیار معامله، مدل بلک شولز به عوامل زیر توجه می‌کند:

  1. قیمت فعلی دارایی پایه: ارزش کنونی سهام یا دارایی که قرارداد روی آن نوشته شده است.
  2. قیمت توافقی (Strike Price): قیمتی که در قرارداد برای خرید یا فروش دارایی تعیین شده است.
  3. زمان تا سررسید: مدت زمان باقی‌مانده تا انقضای قرارداد.
  4. نرخ بهره بدون ریسک: نرخ سودی که از سرمایه‌گذاری‌های امن (مثل اوراق قرضه دولتی) به دست می‌آید.
  5. نوسانات بازار (Volatility): میزان تغییرات قیمت دارایی پایه در بازار.

این عوامل با استفاده از فرمول ریاضی بلک شولز ترکیب می‌شوند تا قیمت منصفانه قرارداد محاسبه شود.

کاربردهای مدل بلک شولز

این مدل در حوزه‌های مختلفی از بازارهای مالی کاربرد دارد:

  • ارزش‌گذاری اختیار معامله: کمک به سرمایه‌گذاران برای تصمیم‌گیری در مورد خرید یا فروش قراردادها.
  • مدیریت ریسک: بانک‌ها و مؤسسات مالی از این مدل برای ارزیابی ریسک‌های مرتبط با پرتفوی خود استفاده می‌کنند.
  • توسعه استراتژی‌های معاملاتی: معامله‌گران حرفه‌ای از این مدل برای پیش‌بینی حرکت‌های بازار بهره می‌برند.

مزایا و محدودیت‌های مدل بلک شولز

مزایا:

  • دقت بالا: در بازارهای باثبات، این مدل نتایج قابل اعتمادی ارائه می‌دهد.
  • سادگی استفاده: فرمول آن به‌گونه‌ای طراحی شده که با نرم‌افزارهای مالی به‌راحتی قابل پیاده‌سازی است.
  • پایه علمی قوی: این مدل بر اساس اصول ریاضی و آماری ساخته شده است.

محدودیت‌ها:

  • فرضیات غیرواقعی: مدل فرض می‌کند که بازارها همیشه کارآمد هستند و نوسانات ثابت می‌مانند، که در دنیای واقعی همیشه صادق نیست.
  • عدم انعطاف در بازارهای ناپایدار: در شرایط بحران مالی، دقت مدل ممکن است کاهش یابد.

چرا مدل بلک شولز مهم است؟

این مدل انقلابی در بازارهای مالی ایجاد کرد و به توسعه بازارهای مشتقه (Derivatives) کمک زیادی کرد. این مدل نه‌تنها به سرمایه‌گذاران امکان داد تا تصمیمات آگاهانه‌تری بگیرند، بلکه پایه‌ای برای ابزارهای مالی پیچیده‌تر شد. مایرون شولز و رابرت مرتون به خاطر این کار در سال ۱۹۹۷ برنده جایزه نوبل اقتصاد شدند.

چگونه از این مدل استفاده کنیم؟

اگر به دنیای سرمایه‌گذاری علاقه‌مند هستید، نیازی نیست خودتان فرمول بلک شولز را محاسبه کنید! امروزه نرم‌افزارهای مالی و پلتفرم‌های معاملاتی مثل آپشن ویو  این محاسبات را به‌صورت خودکار انجام می‌دهند. بااین‌حال، درک مفاهیم پایه این مدل به شما کمک می‌کند تا استراتژی‌های بهتری برای معاملات خود طراحی کنید.

جمع‌بندی

مدل بلک شولز یکی از ابزارهای کلیدی در دنیای مالی است که به ارزش‌گذاری دقیق‌تر قراردادهای اختیار معامله کمک می‌کند. این مدل با در نظر گرفتن عواملی مثل قیمت دارایی، زمان و نوسانات بازار، به سرمایه‌گذاران و تحلیلگران امکان می‌دهد تصمیمات هوشمندانه‌تری بگیرند. اگرچه این مدل محدودیت‌هایی دارد، اما همچنان یکی از پایه‌های اصلی تحلیل مالی مدرن محسوب می‌شود.

برای کسب اطلاعات بیشتر در مورد ابزارهای مالی و استراتژی‌های سرمایه‌گذاری، مقالات دیگر ما را دنبال کنید!

کد BS به زبان VBA

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

 

کد BS به زبان c#

 

using System;



namespace BlackScholes
{
    /// <summary>
    /// Summary description for BlackSholes.
    /// </summary>
    public class BlackSholes
    {
        public BlackSholes()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        /* The Black and Scholes (1973) Stock option formula
         * C# Implementation
         * uses the C# Math.PI field rather than a constant as in the C++ implementaion
         * the value of Pi is 3.14159265358979323846
    
         	S= Stock price
            X=Strike price
            T=Years to maturity
            r= Risk-free rate
            v=Volatility
        */
        public double BlackScholes(string CallPutFlag, double S, double X, 
            double T, double r, double v)
        {
            double d1 = 0.0;
            double d2 = 0.0;
            double dBlackScholes = 0.0;
            
            d1 = (Math.Log(S / X) + (r + v * v / 2.0) * T) / (v * Math.Sqrt(T));
            d2 = d1 - v * Math.Sqrt(T);
            if (CallPutFlag == "c")
            {				
                dBlackScholes = S * CND(d1) - X * Math.Exp(-r * T) * CND(d2);
            }
            else if (CallPutFlag == "p") 
            {
                dBlackScholes = X * Math.Exp(-r * T) * CND(-d2) - S * CND(-d1);				
            }
            return dBlackScholes;
        }
        public double CND(double X)
        {
            double L = 0.0;
            double K = 0.0;
            double dCND = 0.0;
            const double a1 = 0.31938153; 
            const double a2 = -0.356563782; 
            const double a3 = 1.781477937;
            const double a4 = -1.821255978;
            const double a5 = 1.330274429;
            L = Math.Abs(X);
            K = 1.0 / (1.0 + 0.2316419 * L);
            dCND = 1.0 - 1.0 / Math.Sqrt(2 * Convert.ToDouble(Math.PI.ToString())) * 
                Math.Exp(-L * L / 2.0) * (a1 * K + a2 * K  * K + a3 * Math.Pow(K, 3.0) + 
                a4 * Math.Pow(K, 4.0) + a5 * Math.Pow(K, 5.0));
            
            if (X < 0) 
            {
                return 1.0 - dCND;
            }
            else
            {
                return dCND;
            }
        }
    }
}

 

4.4/5 - (5 امتیاز)