3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权交易中,**Delta 对冲(Delta Hedging)**是一种旨在消除标的资产价格微小变动对期权组合价值影响的交易策略。通过使组合的整体 Delta 保持在 0 附近(即 Delta 中性),交易员可以专注于赚取时间价值衰减(Theta)或波动率变化(Vega)的收益。
本文将介绍如何在 PTrade 平台中,利用 Python 编写一个自动化的期权 Delta 动态中性对冲策略。
run_interval 或 handle_data 定时获取期权持仓与标的资产价格。以下是一个在 PTrade 环境下运行的简化版 Delta 动态对冲策略示例。该策略监控期权持仓,并使用标的股票/ETF 进行动态对冲:
import numpy as np
def initialize(context):
# 设定标的资产与期权合约代码
g.underlying = '510050.SS' # 50ETF 标的
g.option_code = '10004001.XSHO' # 示例 50ETF 期权合约代码
# 设定对冲参数
g.delta_threshold = 0.1 # Delta 偏离阈值
g.contract_multiplier = 10000 # 50ETF期权合约乘数为10000
# 设置股票池
set_universe([g.underlying, g.option_code])
# 设定盘中每 60 秒执行一次动态对冲检查
run_interval(context, check_and_hedge, seconds=60)
def before_trading_start(context, data):
g.has_hedged_today = False
def check_and_hedge(context):
# 1. 获取当前持仓信息
opt_position = get_position(g.option_code)
underlying_position = get_position(g.underlying)
opt_amount = opt_position.amount if opt_position else 0
underlying_amount = underlying_position.amount if underlying_position else 0
if opt_amount == 0:
log.info("当前无期权持仓,无需对冲。")
return
# 2. 获取期权的实时 Delta 值
# 提示:实盘中可通过 get_snapshot 或第三方期权定价库计算精确的实时 Delta
# 此处假设通过行情快照或模拟估算获取 Delta,示例假定当前 Delta 为 0.5 (看涨期权)
snapshot = get_snapshot(g.option_code)
if snapshot and g.option_code in snapshot:
# 实际交易中,部分券商柜台快照会提供 delta 字段,若无则需通过 BS 公式自行计算
current_delta = 0.5 # 占位模拟值
else:
current_delta = 0.5
# 3. 计算组合整体 Delta 敞口
# 组合 Delta = 期权张数 * 单张 Delta * 合约乘数 + 标的持股数
portfolio_delta = (opt_amount * current_delta * g.contract_multiplier) + underlying_amount
log.info(f"当前期权持仓: {opt_amount} 张, 标的持仓: {underlying_amount} 股")
log.info(f"当前期权单张 Delta: {current_delta}, 组合整体 Delta 敞口: {portfolio_delta}")
# 4. 判断是否触发对冲阈值
# 换算成标的股票股数:1 个 Delta 相当于 1 股标的
hedge_shares_needed = -portfolio_delta # 需要对冲的标的股数
# 设定最小对冲交易单位(如 100 股)
if abs(hedge_shares_needed) >= 100:
# 规范化为 100 股的整数倍
trade_amount = int(hedge_shares_needed / 100) * 100
if trade_amount != 0:
log.info(f"触发对冲!正在下单对冲标的: {trade_amount} 股")
order(g.underlying, trade_amount)
else:
log.info("Delta 敞口在安全阈值内,无需对冲。")
def handle_data(context, data):
pass
get_snapshot 接口在不同券商环境下返回的期权希腊字母(Greeks)字段可能有所不同。如果柜台不直接提供 delta 字段,建议在策略中引入 scipy 或自定义 Black-Scholes 公式,利用标的价格、行权价、无风险利率、到期时间和隐含波动率(IV)实时计算 Delta。delta_threshold(对冲阈值),避免因微小波动频繁调仓导致“利润被手续费吞噬”。limit_price),务必做好价格精度的四舍五入处理,避免因格式问题导致废单。