Skip to main content

一种使用 Black、Black-Scholes 和 Black-Scholes-Merton 定价计算隐含波动率和希腊字母的快速矢量化方法。

项目描述

py_vollib_vectorized

介绍

py_vollib_vectorized软件包可以快速轻松地为数千种期权合约定价和计算希腊字母。它建立在py_vollib图书馆之上。导入时会自动打补丁对应的py_vollib函数,支持向量化。然后可以将输入作为浮点数、元组、列表numpy.array、 或传递pandas.Series。对输入执行自动广播。

除了矢量化之外,对 py_vollib 的修改还包括额外的numba加速;因此,numba是必需的。这些加速py_vollib_vectorized为期权合约定价提供了最快的库。

有关更多详细信息,请参阅文档

安装

pip install py_vollib_vectorized

要求

  • 为 Python 3.5+ 编写
  • 需要 py_vollib、numba、numpy、pandas、scipy

代码示例

该库可以以两种方式使用。导入后,它会猴子修补(即替换)py_vollib.

作为一种更通用的替代方案,希望使用专用期权定价 API 的用户可以使用该库提供的实用程序函数。

打补丁py_vollib

# The usual py_vollib syntax

import numpy as np
import pandas as pd

import py_vollib.black_scholes
flag = 'c'  # 'c' for call, 'p' for put
S = 100  # Underlying asset price
K = 90  # Strike
t = 0.5  # (Annualized) time-to-expiration
r = 0.01  # Interest free rate
iv = 0.2  # Implied Volatility

option_price = py_vollib.black_scholes.black_scholes(flag, S, K, t, r, iv)  # 12.111581435

# This library keeps the same syntax, but you can pass as input any iterable of values.
# This includes list, tuple, numpy.array, pd.Series, pd.DataFrame (with only a single column).
# Note that you must pass a value for each contract as *no broadcasting* is done on the inputs.


# Patch the original py_vollib library by importing py_vollib_vectorized
import py_vollib_vectorized  # The same functions now accept vectors as input!

# Note that the input arguments are broadcasted.
# You can specify ints, floats, tuples, lists, numpy arrays or Series.

flag = ['c', 'p']  # 'c' for call, 'p' for put
S = (100, 100)  # Underlying asset prices
K = [90]  # Strikes
t = pd.Series([0.5, 0.6])  # (Annualized) times-to-expiration
r = np.array([0.01])  # Interest free rates
iv = 0.2  # Implied Volatilities

option_price = py_vollib.black_scholes.black_scholes(flag, S, K, t, r, iv, return_as='array')  
# array([12.11158143,  2.02418536])

实用功能

我们还定义了其他实用函数,以在一次调用中获取所有合约价格、隐含波动率和希腊字母。

import pandas as pd
from py_vollib_vectorized import price_dataframe, get_all_greeks

# Using the data above, we can calculate all contracts greeks in a single call
greeks = get_all_greeks(flag, S, K, t, r, iv, model='black_scholes', return_as='dict')

#   {'delta': array([ 0.80263679, -0.21293214]),
#    'gamma': array([0.0196385, 0.01875498]),
#    'theta': array([-0.01263557, -0.00964498]),
#    'rho': array([0.34073321, -0.13994668]),
#    'vega': array([0.19626478, 0.22493816])}

# We can also price a dataframe easily by specifying a dataframe and the corresponding columns

df = pd.DataFrame()
df['Flag'] = ['c', 'p']
df['S'] = 95
df['K'] = [100, 90]
df['T'] = 0.2
df['R'] = 0.2
df['IV'] = 0.2
result = price_dataframe(df, flag_col='Flag', underlying_price_col='S', strike_col='K', annualized_tte_col='T',
                     riskfree_rate_col='R', sigma_col='IV', model='black_scholes', inplace=False)
#   Price       delta       gamma       theta       rho        vega
#   2.895588    0.467506    0.046795    -0.045900   0.083035   0.168926
#   0.611094    -0.136447   0.025739    -0.005335   -0.027151  0.092838

有关更多详细信息,请参阅文档

基准测试

与循环遍历合约或使用内置的 pandas 功能相比,这个库非常节省内存,并且可以快速且很好地扩展到大量合约。

py_vollib_vectorized 库的性能

致谢

这个库优化了py_vollib代码库,它本身建立在 Peter Jäckel 的让我们理性的方法论之上。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

py_vollib_vectorized-0.1.1.tar.gz (26.7 kB 查看哈希

已上传 source

内置分布

py_vollib_vectorized-0.1.1-py3-none-any.whl (30.5 kB 查看哈希

已上传 py3