⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 black_scholes_imp_vol_bisect.cc

📁 Financial Recipes
💻 CC
字号:
#include <cmath>#include "fin_recipes.h"double option_price_implied_volatility_call_black_scholes_bisections(double S,								     double X,								     double r,								     double time,								     double option_price){    double sigma_low=0.0001; // check for arbitrage violations:     double price = option_price_call_black_scholes(S,X,r,sigma_low,time);        if (price>option_price) return 0.0;  // if price at almost zero volatility greater than price, return 0      // simple binomial search for the implied volatility.    // relies on the value of the option increasing in volatility    const double ACCURACY = 1.0e-5; // make this smaller for higher accuracy    const int MAX_ITERATIONS = 100;    const double HIGH_VALUE = 1e10;    const double ERROR = -1e40;      // want to bracket sigma. first find a maximum sigma by finding a sigma    // with a estimated price higher than the actual price.    double sigma_high=0.3;    price = option_price_call_black_scholes(S,X,r,sigma_high,time);    while (price < option_price) {  	sigma_high = 2.0 * sigma_high; // keep doubling.	price = option_price_call_black_scholes(S,X,r,sigma_high,time);	if (sigma_high>HIGH_VALUE) return ERROR; // panic, something wrong.    };    for (int i=0;i<MAX_ITERATIONS;i++){	double sigma = (sigma_low+sigma_high)*0.5;	price = option_price_call_black_scholes(S,X,r,sigma,time);	double test =  (price-option_price);	if (fabs(test)<ACCURACY) { return sigma; };	if (test < 0.0) { sigma_low = sigma; }	else { sigma_high = sigma; }    };    return ERROR;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -