3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权量化交易中,希腊字母(Greeks)是进行风险管理、对冲和构建波动率交易策略的核心指标。虽然 QMT 平台内置了 ContextInfo.bsm_price 用于计算欧式期权的理论价格,但并未直接提供计算 Delta、Gamma、Vega 等希腊字母的 API。
我们可以利用数值微商法(有限差分法),通过对标的价格 $S$ 和波动率 $\sigma$ 施加微小的扰动 $\Delta S$ 和 $\Delta \sigma$,并调用 ContextInfo.bsm_price 计算扰动后的期权价格,从而近似求得希腊字母的一阶和二阶偏导数。
以下是在 QMT 策略中计算希腊字母的完整 Python 函数实现:
#coding:gbk
import numpy as np
def calculate_greeks(ContextInfo, optionType, S, K, r, sigma, days, dividend=0.0):
"""
使用数值微商法计算期权的 Delta, Gamma 和 Vega
:param optionType: 'C' 认购, 'P' 认沽
:param S: 标的资产当前价格
:param K: 期权行权价
:param r: 无风险利率 (例如 0.03)
:param sigma: 标的年化波动率 (例如 0.23)
:param days: 剩余天数
:param dividend: 分红率
"""
if days <= 0:
return 0.0, 0.0, 0.0
# 设定微小扰动量
dS = 0.001 * S if S > 0 else 0.001
dSigma = 0.0001
# 1. 计算基础理论价
p_base = ContextInfo.bsm_price(optionType, S, K, r, sigma, days, dividend)
# 2. 标的价格扰动后的理论价
p_S_plus = ContextInfo.bsm_price(optionType, S + dS, K, r, sigma, days, dividend)
p_S_minus = ContextInfo.bsm_price(optionType, S - dS, K, r, sigma, days, dividend)
# 3. 波动率扰动后的理论价
p_vol_plus = ContextInfo.bsm_price(optionType, S, K, r, sigma + dSigma, days, dividend)
p_vol_minus = ContextInfo.bsm_price(optionType, S, K, r, sigma - dSigma, days, dividend)
# 4. 数值微分计算希腊字母
delta = (p_S_plus - p_S_minus) / (2 * dS)
gamma = (p_S_plus - 2 * p_base + p_S_minus) / (dS ** 2)
# Vega 通常定义为波动率变动 1% (0.01) 对应的期权价格变化
vega = ((p_vol_plus - p_vol_minus) / (2 * dSigma)) * 0.01
return delta, gamma, vega
def init(ContextInfo):
print("期权希腊字母数值计算初始化...")
def handlebar(ContextInfo):
# 示例:计算标的价格为 3.5 元,行权价为 3.5 元,剩余 15 天,无风险利率 3%,波动率 23% 的平值认购期权希腊字母
S = 3.51
K = 3.5
r = 0.03
sigma = 0.23
days = 15
delta, gamma, vega = calculate_greeks(ContextInfo, 'C', S, K, r, sigma, days)
print(f"标的价格: {S}, 行权价: {K}, 剩余天数: {days}")
print(f"Delta: {delta:.4f}")
print(f"Gamma: {gamma:.4f}")
print(f"Vega (1%): {vega:.4f}")
days 趋近于 0)时,数值微商法可能会因为价格不连续而产生数值不稳定,策略中需对 days <= 0 进行安全过滤。