در بازار اختیار معامله یاد بگیر که ضرر نکنی ...سود خودش راهشو پیدا میکنه و وارد میشه
0

بلک شولز

بلک شولز مدل Black-Scholes

 

 

مدل Black-Scholes اولین مدل رایج استفاده شده برای قیمت گذاری آپشن است. این مدل برای محاسبه ارزش نظری آپشن­های اروپایی European-Style از قیمت فعلی سهام، سود سهام مورد انتظار، قیمت انجام گزینه، نرخ بهره مورد انتظار، زمان انقضا استفاده می‌شود.

قیمت‌گذاری آپشن بسیار پیچیده است زیرا به عوامل مختلف بستگی دارد. این فرمول توسط سه اقتصاددان بزرگ، Fischer Black، Myron Scholes و Robert Merton توسعه داده شده است و شاید به‌عنوان بهترین مدل قیمت گذاری موجود در جهان شناخته شود.

این فرمول در مقاله ۱۹۷۳ آن‌ها، به‌عنوان قیمت گذاری آپشن­ها و بدهی‌های شرکت، منتشر شده در مجله Journal of Political Economy منتشر شده است. آقای Black درست دو سال قبل از آنکه Scholes و Merton جایزه‌ی نوبل اقتصاد را به دلیل یافتن روش جدید محاسبه‌ی ارزش مشتقات در سال ۱۹۹۷ را به دست آورند، فوت کرد.

بلک شولز

فرض مدل Black-Scholes بر این است که:

این آپشن از نوع اروپایی است و تنها در زمان انقضای آن قابل اجرا است. در مدت دوره‌ی زمانی این آپشن هیچ سود سهامی پرداخت نمی‌شود.

 بازارها کارآمد هستند (به‌عنوان مثال، حرکت‌های بازار نمی‌توان پیش‌بینی کرد).

 هزینه‌ی معامله‌ای در هنگام خرید آپشن وجود ندارد.

 نرخ ریسک‌پذیری و نوسان دارایی پایه شناخته شده و ثابت است.

 بازده دارایی‌های پایه به‌صورت نرمال توزیع می‌شود.

نکته: در حالی که مدل اصلی Black-Scholes اثرات سود سهام پرداخت شده در طول عمر آپشن را نادیده گرفت، این مدل اغلب برای تعیین سود سهام از طریق تعیین ارزش تاریخی سود سهام پیشین، سازگار است.

فرمول Black-Scholes

فرمول نشان داده شده در شکل زیر، متغیر‌های زیر را در نظر می‌گیرد:

 قیمت پایه در حال حاضر.

 قیمت انجام گزینه آپشن.

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

 نوسانات ضمنی.

 نرخ بهره بدون ریسک.

 

این مدل اساسا به دو بخش تقسیم می‌شود: بخش اول، SN(d1)، تغییر قیمت پایه، افزایش می‌دهد. این بخشی از فرمول نشان دهنده سود مورد انتظار خرید است. بخش دوم، N (d2) Ke-rt، مقدار فعلی پرداخت قیمت اجرا را پس از انقضا فراهم می‌کند به لازم به ذکر است مدل Black-Scholes برای آپشن­های اروپایی مورداستفاده قرار می‌گیرد که می‌توان آن را تنها در روز انقضا مورداستفاده قرار داد. همان‌طور که در معادله نشان داده شده است، مقدار آپشن با در نظر گرفتن تفاوت بین دو بخش محاسبه می‌شود.

 

کد بلک شولز به زبان 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

 

کد بلک شولز به زبان 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;
            }
        }
    }
}