选股策略——对冲策略

更多精彩内容详见个人量化交易专辑索引

投资者为了使收益最大化,会想在股市整体上涨(或高位)时增加仓位,下跌时(或低位)减少仓位,这是一种显而易见的、朴素的想法,属于单边做多策略

姑且不论这种策略的可行性,策略的目的是想规避市场整体下跌风险,赚取市场整体上涨收益,这种整体收益(风险)称为β收益。相对的非整体投资组合收益(风险)称为α收益

而和单边策略对应的对冲策略是指只赚取阿尔法收益规避贝塔收益风险,策略是通过同时做多和做空来实现的:

单边做多时,收益=α+β,当β为负时风险被放大;

单边做空时,收益=α-β,当β为正时风险被放大;

对冲时,收益=(α+β)/2+(α-β)/2=α,可以看到收益和β无关;

国内有些基金名为对冲基金,但国内做空机制不完善,很多时候这些基金中仅仅表达想努力规避贝塔风险的含义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的指数期权多空 call spread或put spread的尾部风险对冲策略: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import yfinance as yf # 获取标的资产价格数据 ticker = '^GSPC' # 标普500指数 data = yf.download(ticker, start='2015-01-01', end='2021-12-31') # 计算历史波动率 data['log_returns'] = np.log(data['Adj Close']/data['Adj Close'].shift(1)) data['volatility'] = data['log_returns'].rolling(window=252).std() * np.sqrt(252) # 模拟期权价格 S = data['Adj Close'].iloc[-1] # 标的资产当前价格 K1 = 3000 # 买入期权执行价格 K2 = 3100 # 卖出期权执行价格 T = 30/365 # 期权到期时间,以年为单位 r = 0.025 # 无风险利率 # 计算期权价格 def option_price(S, K, T, r, sigma, option_type): d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T)) d2 = d1 - sigma*np.sqrt(T) if option_type == 'call': price = S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2) elif option_type == 'put': price = K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1) return price sigma1 = data['volatility'].iloc[-1] # 买入期权波动率 sigma2 = data['volatility'].iloc[-1] + 0.05 # 卖出期权波动率 call_price1 = option_price(S, K1, T, r, sigma1, 'call') # 买入 call 期权价格 call_price2 = option_price(S, K2, T, r, sigma2, 'call') # 卖出 call 期权价格 put_price1 = option_price(S, K1, T, r, sigma1, 'put') # 买入 put 期权价格 put_price2 = option_price(S, K2, T, r, sigma2, 'put') # 卖出 put 期权价格 # 计算总成本和总收益 call_spread_cost = call_price1 - call_price2 # call spread 成本 put_spread_cost = put_price2 - put_price1 # put spread 成本 total_cost = call_spread_cost + put_spread_cost # 总成本 call_spread_profit = max(0, min(S-K1, K2-K1) - call_spread_cost) # call spread 收益 put_spread_profit = max(0, min(K2-K1, K2-S) - put_spread_cost) # put spread 收益 total_profit = call_spread_profit + put_spread_profit - total_cost # 总收益 # 计算 delta 中性对冲策略 # 假设持有 1 unit 的 call spread 和 1 unit 的 put spread call_delta = 0.5 # call spread 的 delta put_delta = -0.5 # put spread 的 delta portfolio_delta = call_delta + put_delta # 组合的 delta # 计算需要卖出的标的资产数量 hedging_volume = portfolio_delta * 100 # 每个期权合约的标的资产数量为 100 hedging_cost = hedging_volume * S # 对冲成本为标的资产价格乘以数量 # 绘制收益图像 S_range = np.arange(2700, 3300, 10) call_spread_payoff = np.piecewise(S_range, [S_range < K1, (S_range >= K1) & (S_range <= K2), S_range > K2], [0, min(S_range-K1, K2-K1), K2-K1]) put_spread_payoff = np.piecewise(S_range, [S_range < K1, (S_range >= K1) & (S_range <= K2), S_range > K2], [K2-K1, max(K2-S_range, K2-K1), 0]) portfolio_payoff = call_spread_payoff + put_spread_payoff - total_cost hedging_payoff = hedging_volume * (S_range - S) - hedging_cost fig, ax = plt.subplots() ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) ax.plot(S_range, portfolio_payoff, linestyle='--', label='portfolio payoff') ax.plot(S_range, hedging_payoff, label='hedging payoff') ax.set_xlabel('标的资产价格') ax.set_ylabel('收益') ax.legend() plt.show() ``` 该策略的基本思路是,通过买入低执行价格的 call 期权和买入高执行价格的 put 期权来建立期权多空 spread,以期望在标的资产价格波动率下降时获得收益。为了对冲组合的尾部风险,我们计算组合的 delta,并根据 delta 中性原则卖出标的资产来对冲组合的 delta。我们还计算了组合的总成本和总收益,并绘制了组合收益和对冲收益的图像,以便更好地理解策略的风险和收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的小白兔奶糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值