咱们今天不聊那些让人头秃的希腊字母推导,直接聊点干货。很多拿着股票或者ETF的朋友,都有一个共同的烦恼:手里有货,心里发慌。涨了嫌卖早了,跌了又心疼得不行。这时候,期权里的“卖出认购期权”(Short Call)就像是一剂“止痛药”兼“增厚收益”的神器。
你可能听过“备兑开仓”,觉得就是把票拿着,再卖个Call,稳稳吃权利金。这没错,但如果你想把这一招玩出花来,甚至用价差策略进一步优化成本,那你得往下读。我会用大白话,加上真实的代码和策略逻辑,带你把这套组合拳打顺。
为什么要卖认购期权?先搞清楚你在“卖”什么
别被“卖出”这个词吓到了。你卖出的不是一个复杂的金融衍生品,本质上,你在卖一个“承诺在未来某个时间,以某个价格把票卖给别人的权利”。
如果对方不行权(股价没涨过行权价),你就白赚了这笔权利金(Premium)。 如果对方行权了(股价大涨),你就得按约定价格把票卖给他。
所以,卖认购期权的核心逻辑是:我愿意放弃一部分潜在的超额收益,换取确定的现金流和下跌缓冲。
这就好比你是房东,房子租出去了,收租金(权利金)。租客说:“我要买这房子,但我现在不付全款,我先给你一笔定金,约定半年后按这个价买。”
- 如果半年后房价没涨,租客不买了,定金你留着,房子还是你的。
- 如果房价暴涨,租客按约定价买了,你得把房子给他,但你多赚了那笔定金,弥补了“卖便宜了”的遗憾。
第一招:备兑开仓(Covered Call)—— 最经典的“收租”策略
这是最基础、也是最安全的策略。你手里已经持有现货(比如10000股的沪深300ETF,或者1000手的某只股票),同时卖出同等数量的认购期权。
实战场景
假设你持有10000股贵州茅台,当前股价1800元。你觉得未来一个月股价会横盘或者小涨,不太可能暴涨。你担心股价下跌,又舍不得卖。
操作步骤:
- 卖出10张茅台认购期权(1张对应1000股,刚好覆盖你的持仓)。
- 行权价(Strike Price)选1850元。
- 到期时间选1个月后。
- 收到权利金:假设每张合约权利金是20元,那你收到10 * 1000 * 20 = 200,000元。
两种结局:
结局A:股价跌到1750元 你的股票亏了50元/股,总共亏50万。 但期权买方不会行权(因为市场价1750低于行权价1850),期权作废。 你白赚了20万权利金。 净亏损:30万。 相比不做期权,少亏了20万。这就是“缓冲垫”的作用。
结局B:股价涨到2000元 你的股票账面赚了200元/股,总共赚200万。 但买方会行权,你得按1850元的价格卖出10000股。 股票收益:(1850 - 1800) * 10000 = 50万。 加上权利金20万。 总收益:70万。 虽然你少赚了(如果没卖期权,能赚200万+20万权利金=220万),但你稳稳落袋了70万,而且不用天天盯盘担惊受怕。
Python代码模拟备兑开仓收益
光说不练假把式。我们来写个小脚本,模拟一下不同股价下的盈亏。
import numpy as np
import matplotlib.pyplot as plt
def covered_call_pnl(stock_price, strike_price, premium_per_share, shares):
"""
计算备兑开仓的盈亏
:param stock_price: 到期时股价
:param strike_price: 期权行权价
:param premium_per_share: 每股权利金
:param shares: 持股数量
:return: 盈亏金额
"""
# 股票盈亏
stock_pnl = (stock_price - strike_price) * shares # 假设初始成本为行权价,方便对比
# 期权部分盈亏
# 如果股价 > 行权价,期权被行权,卖方亏损(股票被低价卖出的机会成本)+ 权利金收入
# 如果股价 <= 行权价,期权作废,卖方赚权利金
option_pnl = premium_per_share * shares
if stock_price > strike_price:
# 被行权,实际股票卖出价为strike_price,但市场价值是stock_price
# 这里我们简化计算:股票部分按(strike_price - initial_cost)算,加上权利金
# 更直观的是:总收益 = (strike_price - initial_cost) * shares + premium * shares
total_pnl = (strike_price - strike_price) * shares + option_pnl # 初始成本用strike_price作为基准,盈亏从0开始算
# 修正:为了更清晰,我们假设初始买入价就是strike_price
# 那么股票盈亏 = strike_price - strike_price = 0
# 总盈亏 = 权利金 - (被行权时的机会成本?不,备兑开仓在行权时,股票按strike卖出)
# 正确逻辑:
# 如果股价 > strike: 股票以strike卖出,收益 (strike - cost) * shares + premium * shares
# 如果股价 <= strike: 股票保留,收益 (stock_price - cost) * shares + premium * shares
pass
# 让我们重新定义,更通用的盈亏计算
cost_basis = strike_price # 假设初始成本等于行权价
if stock_price <= strike_price:
pnl = (stock_price - cost_basis) * shares + premium_per_share * shares
else:
pnl = (strike_price - cost_basis) * shares + premium_per_share * shares
return pnl
# 参数
strike = 1850
premium = 20
shares = 10000
# 股价范围
prices = np.linspace(1600, 2100, 100)
pnls = [covered_call_pnl(p, strike, premium, shares) for p in prices]
plt.figure(figsize=(10, 6))
plt.plot(prices, pnls, label='Covered Call P/L', color='blue')
plt.axhline(0, color='black', linestyle='--', alpha=0.5)
plt.xlabel('Stock Price at Expiration')
plt.ylabel('Profit/Loss')
plt.title('Covered Call Strategy Payoff Diagram')
plt.legend()
plt.grid(True)
plt.show()
你看,这个图形就像是一个“天花板”。股价超过1850后,收益就不再增长了,而是被封顶在 (1850 - 成本) * 数量 + 权利金。但这个天花板之上,是你确定的安全垫。
第二招:现货套保 —— 当你是个“空头”思维者
有时候,你并不持有现货,或者你持有现货,但你担心市场大跌,又舍不得割肉。这时候,卖出认购期权可以作为对冲工具吗?
严格来说,卖出认购期权(Short Call)不是对冲下跌风险的,那是买入看跌期权(Long Put)的事。
但是!有一种情况,你可以用“现货+卖出认购”来模拟一个“牛市价差”的效果,或者在震荡市中增强收益。
这里我要纠正一个常见的误区:很多新手以为卖Call能对冲跌,其实不能。
- 你持有现货,卖Call。如果股价暴跌,你的股票亏钱,期权端虽然赚了权利金,但权利金是有限的(最多赚这么多),而股票亏损是无限的(理论上跌到0)。
- 所以,卖Call不能对冲下跌风险,它只能减少下跌的损失(因为权利金抵消了一部分亏损)。
真正的“现货套保”思维是: 如果你认为市场即将大跌,你应该买入Put(Long Put)或者卖出期货。 但如果你只是认为市场横盘或微涨,那么卖出Call是最好的策略。
第三招:价差组合策略 —— 进阶玩家的“降本增效”
当你卖出认购期权时,你担心股价暴涨,被迫以低价卖出股票,踏空了后面的大涨。这时候,价差策略(Spread) 就派上用场了。
牛市看跌期权价差(Bull Put Spread)vs 熊市看涨价差(Bear Call Spread)
我们要讲的是 熊市看涨价差(Bear Call Spread),也叫贷方价差(Credit Spread)。
场景: 你持有10000股茅台(1800元),你卖出了10张行权价1850的Call(收到权利金20万)。 但你担心,万一茅台突然利好消息,股价冲到2000元,你只能1850卖出,太亏了,错过了150元的涨幅。
解决方案:买入更高行权价的Call,构成价差。
操作步骤:
- 卖出 10张行权价1850的Call(收到权利金20元/股)。
- 买入 10张行权价1900的Call(支付权利金10元/股)。
结果:
- 净权利金收入:20 - 10 = 10元/股(10万)。
- 最大收益:10万(权利金净收入)。
- 最大亏损:如果股价暴涨到2000,你卖出的1850 Call被行权,你被迫1850卖出股票;但你买入的1900 Call也生效,你有权以1900买回股票(或平仓)。 实际上,这锁定了你的卖出价格区间。你最多赚1850,最少也保住1900的买入权(如果股票被行权,你可以用1900买回,相当于你实际卖出价格是1850,但你支付了10元权利金,所以净成本是1840)。
等等,这个逻辑有点绕。让我换个更清晰的解释:
熊市看涨价差(Bear Call Spread)的本质是:你卖出低价Call,买入高价Call,降低成本,同时限制 upside 风险。
对于现货持有人来说,这相当于“锁定最低卖出价”。
- 如果股价 < 1850:两个期权都作废,你白赚10万权利金,股票还在手里。
- 如果股价 1850 ~ 1900:你卖出的1850 Call被行权,股票以1850卖出;你买入的1900 Call作废。净收益 = (1850 - 成本) * 数量 + 10万权利金。
- 如果股价 > 1900:你卖出的1850 Call被行权,股票以1850卖出;但你买入的1900 Call可以抵消这部分亏损(你可以用1900买回股票,或者平仓期权)。最终效果是,你相当于以1850卖出股票,但你的权利金成本是0(20-10),所以净收益比单纯卖Call少,但你保留了股价在1850-1900之间的全部上涨收益,并且避免了股价暴涨时被“按死在低位”的尴尬。
为什么要这么做? 因为单纯卖Call,如果股价暴涨,你会有巨大的机会成本。而价差策略,是用“少赚一点”(权利金净收入减少),来换取“心态平稳”。你不再担心踏空,因为你的风险被锁定了。
代码模拟价差策略
def bear_call_spread_pnl(stock_price, short_strike, long_strike, short_premium, long_premium, shares):
"""
熊市看涨价差(贷方价差)盈亏计算
:param stock_price: 到期股价
:param short_strike: 卖出的Call行权价(较低)
:param long_strike: 买入的Call行权价(较高)
:param short_premium: 卖出Call的权利金
:param long_premium: 买入Call的权利金
:param shares: 股票数量
:return: 期权端盈亏(不含现货)
"""
net_premium = (short_premium - long_premium) * shares # 净权利金收入
if stock_price <= short_strike:
# 两个期权都作废,净赚权利金
pnl = net_premium
elif short_strike < stock_price <= long_strike:
# 卖出的Call被行权,亏损 (stock_price - short_strike) * shares
# 买入的Call作废
option_pnl = -(stock_price - short_strike) * shares
pnl = option_pnl + net_premium
else:
# 两个期权都被行权
# 卖出Call亏损 (long_strike - short_strike) * shares ? 不,是 (stock_price - short_strike) - (stock_price - long_strike) = long_strike - short_strike
# 实际上,价差的最大亏损是 (long_strike - short_strike - net_premium) * shares
# 这里我们计算期权端盈亏
short_call_pnl = -(stock_price - short_strike) * shares
long_call_pnl = (stock_price - long_strike) * shares - long_premium * shares # 买入Call的权利金已付
# 更简单的方式:
# 如果股价 > long_strike,两个期权都行权,净盈亏 = net_premium - (long_strike - short_strike) * shares
pnl = net_premium - (long_strike - short_strike) * shares
return pnl
# 参数
short_strike = 1850
long_strike = 1900
short_premium = 20
long_premium = 10
shares = 10000
prices = np.linspace(1600, 2100, 100)
pnls = [bear_call_spread_pnl(p, short_strike, long_strike, short_premium, long_premium, shares) for p in prices]
plt.figure(figsize=(10, 6))
plt.plot(prices, pnls, label='Bear Call Spread (Option P/L)', color='green')
plt.axhline(0, color='black', linestyle='--', alpha=0.5)
plt.xlabel('Stock Price at Expiration')
plt.ylabel('Profit/Loss (Options Only)')
plt.title('Bear Call Spread Payoff')
plt.legend()
plt.grid(True)
plt.show()
你看,这个图形的收益是封顶的,但亏损也是封顶的。这比单纯卖Call(亏损无限)要安全得多。
实战中的“坑”与“技巧”
1. 流动性是生命线
不要随便卖那些交易量很小的期权合约。你买的时候容易,卖的时候可能滑点巨大。一定要选近月、高成交量、高持仓量的合约。比如沪深300ETF期权(510300对应的期权),流动性非常好。
2. 波动率(IV)是个双刃剑
卖出期权,你是卖方,你喜欢波动率下降。
- 如果市场恐慌,IV飙升,你卖Call可能很便宜(权利金低)。
- 如果市场平静,IV低位,你卖Call权利金也低。 最佳时机是在IV处于历史高位时卖出,或者预期IV会下降时卖出。
3. 移仓换月(Rolling)
如果你卖出的Call快要到期了,股价接近行权价,你又不想股票被卖出,怎么办? 移仓!
- 买入平仓当前的Short Call。
- 卖出下一个月的、更高行权价的Call。 这样你就把行权压力推迟了,还多赚了一层权利金差价。
4. 不要过度乐观
很多人卖Call,觉得“不会涨的”,结果涨疯了。这时候要么被行权,要么高价买回平仓,亏钱。记住,卖Call是有风险的,务必设置止损或改用价差策略。
总结:如何选择适合你的策略?
- 如果你是保守型投资者,想稳定收租,且能承受股价小幅下跌:用备兑开仓(Covered Call)。简单、直接、有效。
- 如果你是稳健型投资者,担心股价暴涨踏空,又想收权利金:用熊市看涨价差(Bear Call Spread)。锁定风险,心态更好。
- 如果你是激进型投资者,认为市场会大跌:别卖Call,去买Put或者卖空期货。卖Call在下跌市场中是“接飞刀”。
最后,我想说,期权不是赌博,它是风险管理工具。卖出认购期权,本质上是在卖“确定性”——用确定性的权利金,换不确定性的股价上涨。搞清楚你的风险承受能力,选择合适的策略,才能在市场中游刃有余。
希望这篇长文能帮你把卖出认购期权的逻辑捋清楚。如果有具体的代码问题或者策略细节,欢迎继续讨论!
