殊途同归
构造两个组合。A:买入一份看涨期权,并把行权价的现值 K * exp(-rT) 存入银行(或买无风险债券)。B:买入一份看跌期权,并买入股票。到期时,若股价高于 K,A 是看涨期权的 S - K 加银行的 K,即 S;B 是股票 S 加一份一文不值的看跌期权,即 S。若股价低于 K,看涨期权作废,A 只有银行的 K,B 是看跌期权的 K - S 加股票 S,即 K。两种情况下两个组合到期时价值相同,所以今天的成本也必须相同。
C + K * exp(-r*T) = P + S so P = C - S + K * exp(-r*T)
import math
spot, strike, rate, t = 100, 100, 0.05, 1
pv_strike = strike * math.exp(-rate * t) # what must be put in the bank today to own K at expiry
print(round(pv_strike, 4)) # 95.1229
call = 10.4506 # a call price we observe
put = call - spot + pv_strike # the parity relation
print(round(put, 4)) # 5.5735
print(round(put + spot - pv_strike, 4)) # 10.4506 and back to the call平价被打破时:套利
如果市场报价不满足这个关系,就存在无风险利润。定义偏差 (C - P) - (S - K e^(-rT))。偏差为正,说明相对于看跌期权,看涨期权太贵了:卖出看涨、买入看跌、买入股票,并借入行权价的现值。这个组合期初不花钱,无论股价如何到期时都不需支付,并把偏差在今天收入囊中。偏差为负则每一条腿反向操作。真实市场有成本和买卖价差,所以小偏差无法交易,这就是容差的含义。
def parity_gap(call, put, spot, strike, rate, t):
return (call - put) - (spot - strike * math.exp(-rate * t))
print(round(parity_gap(11.0, put, 100, 100, 0.05, 1), 4)) # 0.5494 the call at 11.00 is too expensive: sell it
print(round(parity_gap(call, put, 100, 100, 0.05, 1), 4)) # 0.0 consistent prices: nothing to do
def arbitrage_action(call, put, spot, strike, rate, t, tolerance=0.01):
gap = parity_gap(call, put, spot, strike, rate, t)
if gap > tolerance:
return "sell call, buy put, buy stock"
if gap < -tolerance:
return "buy call, sell put, sell stock"
return "none"
print(arbitrage_action(11.0, put, 100, 100, 0.05, 1)) # sell call, buy put, buy stock# The package of the arbitrage, at today's prices: sell the call at 11, buy the put, buy the stock, borrow the strike's present value
cash_today = 11.0 - put - 100 + 100 * math.exp(-0.05 * 1)
print(round(cash_today, 4)) # 0.5494 you are paid the gap now and owe nothing at expiry# A call minus a put is a synthetic forward: it behaves like the stock bought with borrowed money
print(round(10.4506 - put, 4), round(100 - pv_strike, 4)) # 4.8771 4.8771平价与模型无关看跌-看涨平价不需要关于股价如何变动或波动率的任何假设,只需要无套利和欧式行权(不能提前行权)。这使它成为强有力的检验:违反平价的定价模型一定是错的。美式期权和股息会改变这一关系,使其只以不等式成立,所以在使用前要先从现价中减去股息的现值。
C + K * exp(-rT) = P + S:看涨加债券等于看跌加股票,所以P = C - S + K * exp(-rT)。- 偏差
(C - P) - (S - K e^(-rT))为正:卖看涨、买看跌和股票;为负:反向操作。 - 平价与模型无关,可用来检验任何定价模型;有股息或提前行权时变成不等式。
下一节:布莱克-斯科尔斯公式,看涨与看跌期权价格的闭式解。
实验:评分内容
- 用
parity_put_price由看涨价格推出看跌价格25 分 - 用
parity_call_price由看跌价格推出看涨价格25 分 - 用
parity_gap衡量价格偏离平价多远25 分 - 用
arbitrage_action给出无风险交易25 分