四种单一期权+股票对冲交易策略对比

四种单一期权+股票对冲交易策略对比

【摘要】:单一期权+股票交易策略一共有四种,看空的时候有两种,看多的时候也有两种,本文将采用简单的数值模拟和比较静态分析的方法来比较四种策略构建成本

策略一:保护卖权相反部位(看空)

  • 方法:卖出一个 put + 卖出一份股票
  • 构建理由:小幅看空
  • 最大损失:发生在股票大幅上涨的时候。股票部位亏损 $(S_T - S_t)$,put 的买入者不会执行,但是可以赚取权利金,记为 M。总亏损为:
    $$(S_T-S_t-M)$$
  • 最大盈利:发生在股票下跌至执行价格 K 之下时。股票部位赚取$(S_t-S_T)$,卖出 put 赚取权利金 M,这个时候 put 的买方会执行,期权的执行会给带来损失$(K-S_T)$。总盈利为:
    $$(S_t-S_T)+M-(K-S_T)$$$$=(M+S_t-K)$$

策略二:出售备兑买权的相反部位(看空)

  • 方法:买入一个 call + 卖出一份股票
  • 构建理由:大幅看空
  • 最大损失:发生在股票价格上涨超过执行价格时。股票部位损失$(S_T-S_t)$,call 会执行,执行可以赚取$(S_T-K)$,同时亏损权利金 M。总亏损为:$$(S_T-S_t)+M-(S_T-K)$$$$=(M+K-S_t)$$
  • 最大盈利:发生在股票价格大幅下跌的时候。股票部位赚取$(S_t-S_T)$,期权权利金花费 M,call 不会执行。总盈利为::$$(S_t-S_T)-M$$$$=(S_t-S_T-M)$$

策略三:保护卖权(看涨)

  • 方法:买入一个 put + 买入一份股票
  • 构建理由:大幅看涨
  • 最大损失:发生在股票价格下跌至低于执行价格 K 的时候。股票部位损失$(S_t-S_T)$,put 买入花费 M,执行收益为$(K-S_T)$。总亏损为:
    $$(S_t-S_T)+M-(K-S_T)$$$$=(M+S_t-K)$$
  • 最大盈利:发生在股票价格大幅上涨的时候。股票部位赚取$(S_T-S_t)$,put 买入花费 M,不会执行。总收益为:
    $$(S_T-S_t)-M$$$$=(S_T-S_t-M)$$

    策略四:出售备兑买权(看涨)

  • 方法:卖出一个 call + 买入一份股票
  • 构建理由:小幅看涨
  • 最大损失:发生在股票价格大幅下跌的时候。股票部位损失$(S_t-S_T)$,call 的卖出赚取权利金 M,不会被执行。总亏损为:
    $$(S_t-S_T)-M$$$$=(S_t-S_T-M)$$
  • 最大盈利:发生在股票价格上涨超过执行价格 K 的时候。股票部位赚取$(S_T-S_t)$,call 的卖出赚取权利金 M,会被执行,执行亏损$(S_T-K)$。总亏损为:
    $$(S_T-S_t)+M-(S_T-K)$$$$=(M+K-S_t)$$

四种策略的成本比较

  • 假设保证金是期初股价的$\alpha$比例。那么四种策略的成本分别为:
    1. $\alpha*S-P-S$
    2. $C - S$
    3. $P + S$
    4. $\alpha*S-C+S$
      为了比较五种策略的成本,使用 BS 定价公式、下面分别比较不同股价、不同执行价格、不同利率、不同持续期、不同保证金、不同股价波动度共六种因素对上面的几种交易策略成本的影响。
一、期初股价对四种策略的影响
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 当前股价与成本
library(ggplot2)
S = seq(1,100,0.2)
K = 25
r = 0.05
dt = 0.8
sigma = 0.12
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
alpha = 0.3
cost1 = alpha*S - P -S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(S, cost)
plot(df$S, df$cost1, xlab = "Stock price",
ylab = "Initial Cost", type = "l", col=
"black",ylim = c(min(df$cost1,df$cost2,
df$cost3,df$cost4),max(df$cost1,
df$cost2,df$cost3,df$cost4)))
lines(df$S, df$cost2, lty = 1, col = "red")
lines(df$S, df$cost3, lty = 1, col = "green")
lines(df$S, df$cost4, lty = 1, col = "orange")

  • 从上图可以看出,在设定条件下,随着股价从 1 增加到 100 的过程中四种交易策略的成本由大到小排序是:3421->4312->3421
二、执行价格对四种交易策略的期初成本的影响
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 执行价格与成本
library(ggplot2)
S = 25
K = seq(10, 50, 1)
r = 0.05
dt = 0.8
sigma = 0.12
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
alpha = 0.3
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(K, cost)
plot(df$K, df$cost1, xlab = "Strike price", ylab =
"Initial Cost", type = "l", col = "black", ylim =
c(min(df$cost1,df$cost2,df$cost3,df$cost4
),max(df$cost1,df$cost2,df$cost3,df$cost4)))
lines(df$K, df$cost2, lty = 1, col = "red")
lines(df$K, df$cost3, lty = 1, col = "green")
lines(df$K, df$cost4, lty = 1, col = "orange")

  • 从上图可以看出,在设定条件下,随着执行价格从 1 增加到 100 的过程中四种交易策略的成本由大到小排序是:3421->4312->3421
三、保证金占期初股价比例对四种交易策略期初成本的影响
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 保证金占期初股价比例与成本
library(ggplot2)
S = 25
K = 30
r = 0.05
dt = 0.8
sigma = 0.12
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
alpha = seq(0, 1, 0.01)
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(alpha, cost)
plot(alpha, df$cost1, xlab = "alpha", ylab =
"Initial Cost", type = "l", col = "black", ylim =
c(min(df$cost1,df$cost2,df$cost3,df$cost4
),max(df$cost1,df$cost2,df$cost3,df$cost4)))
lines(alpha, df$cost2, lty = 1, col = "red")
lines(alpha, df$cost3, lty = 1, col = "green")
lines(alpha, df$cost4, lty = 1, col = "orange")

  • 从上图可以看出,在设定条件下,随着股价从 1 增加到 100 的过程中四种交易策略的成本由大到小排序是:3421->4312
四、利率对四种策略的期初成本影响
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 利率与成本
library(ggplot2)
# K = 20
S = 25
K = 20
r = seq(0,0.5,0.001)
dt = 0.8
sigma = 0.12
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
alpha = 0.3
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(r, cost)
par(mfrow = c(2,2))
plot(r, df$cost1, xlab = "r", ylab = "Initial Cost",
type = "l", col = "black", ylim = c(min(df$cost1,
df$cost2,df$cost3,df$cost4),max(df$cost1,df$cost2,
df$cost3,df$cost4)))
lines(r, df$cost2, lty = 1, col = "red")
lines(r, df$cost3, lty = 1, col = "green")
lines(r, df$cost4, lty = 1, col = "orange")
title(main = "K = 20")
# K = 30
K = 30
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(r, cost)
plot(r, df$cost1, xlab = "r", ylab = "Initial Cost",
type = "l", col = "black", ylim = c(min(df$cost1,
df$cost2,df$cost3,df$cost4),max(df$cost1,
df$cost2,df$cost3,df$cost4)))
lines(r, df$cost2, lty = 1, col = "red")
lines(r, df$cost3, lty = 1, col = "green")
lines(r, df$cost4, lty = 1, col = "orange")
title(main = "K = 30")
# K = 40
K = 40
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(r, cost)
plot(r, df$cost1, xlab = "r", ylab = "Initial Cost",
type = "l", col = "black", ylim = c(min(df$cost1,
df$cost2,df$cost3,df$cost4),max(df$cost1,
df$cost2,df$cost3,df$cost4)))
lines(r, df$cost2, lty = 1, col = "red")
lines(r, df$cost3, lty = 1, col = "green")
lines(r, df$cost4, lty = 1, col = "orange")
title(main = "K = 35")
# K = 60
K = 60
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(r, cost)
plot(r, df$cost1, xlab = "r", ylab = "Initial Cost",
type = "l", col = "black", ylim = c(min(df$cost1,
df$cost2,df$cost3,df$cost4),max(df$cost1,df$cost2,
df$cost3,df$cost4)))
lines(r, df$cost2, lty = 1, col = "red")
lines(r, df$cost3, lty = 1, col = "green")
lines(r, df$cost4, lty = 1, col = "orange")
title(main = "K = 60")

  • 从图上可以看出,四种交易策略的成本不仅和借贷款的利率有关,还与执行价格相对股票价格的高低有关。
五、持续期对四种策略期初成本的影响
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 持续期与成本
library(ggplot2)
# K = 20
S = 25
K = 20
r = 0.05
dt = seq(1/12, 1, 1/12)
sigma = 0.12
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
alpha = 0.3
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(dt, cost)
par(mfrow = c(2,2))
plot(dt, df$cost1, xlab = "dt", ylab =
"Initial Cost", type = "l", col = "black",
ylim = c(min(df$cost1,df$cost2,df$cost3,
df$cost4),max(df$cost1,df$cost2,df$cost3,df$cost4)))
lines(dt, df$cost2, lty = 1, col = "red")
lines(dt, df$cost3, lty = 1, col = "green")
lines(dt, df$cost4, lty = 1, col = "orange")
title(main = "K = 20")
# K = 30
K = 30
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(dt, cost)
plot(dt, df$cost1, xlab = "dt", ylab =
"Initial Cost", type = "l", col = "black",
ylim = c(min(df$cost1,df$cost2,df$cost3,
df$cost4),max(df$cost1,df$cost2,df$cost3,df$cost4)))
lines(dt, df$cost2, lty = 1, col = "red")
lines(dt, df$cost3, lty = 1, col = "green")
lines(dt, df$cost4, lty = 1, col = "orange")
title(main = "K = 30")
# K = 40
K = 40
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(dt, cost)
plot(dt, df$cost1, xlab = "dt", ylab =
"Initial Cost", type = "l", col = "black",
ylim = c(min(df$cost1,df$cost2,df$cost3,
df$cost4),max(df$cost1,df$cost2,df$cost3,df$cost4)))
lines(dt, df$cost2, lty = 1, col = "red")
lines(dt, df$cost3, lty = 1, col = "green")
lines(dt, df$cost4, lty = 1, col = "orange")
title(main = "K = 35")
# K = 60
K = 60
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(dt, cost)
plot(dt, df$cost1, xlab = "r", ylab =
"Initial Cost", type = "l", col = "black",
ylim = c(min(df$cost1,df$cost2,df$cost3,
df$cost4),max(df$cost1,df$cost2,df$cost3,df$cost4)))
lines(dt, df$cost2, lty = 1, col = "red")
lines(dt, df$cost3, lty = 1, col = "green")
lines(dt, df$cost4, lty = 1, col = "orange")
title(main = "K = 60")

  • 从上图可以看出,持续期对于成本的顺序并没有影响。
六、波动度对四种策略期初成本的影响
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 波动度与成本
library(ggplot2)
S = 25
K = 20
r = 0.05
dt = 0.8
sigma = seq(0, 1, 0.001)
d1 = (log(S/K) + (r+0.5*sigma^2)*dt)/(sigma*sqrt(dt))
d2 = d1 - sigma*sqrt(dt)
C = S*pnorm(d1) - K*exp(-r*dt)*pnorm(d2)
P = C - S + K*exp(-r*dt)
alpha = 0.3
cost1 = alpha*S - P - S
cost2 = C - S
cost3 = P + S
cost4 = alpha*S - C + S
cost = cbind(cost1,cost2,cost3,cost4)
df = data.frame(sigma, cost)
plot(sigma, df$cost1, xlab = "sigma", ylab =
"Initial Cost", type = "l", col = "black",
ylim = c(min(df$cost1,df$cost2,df$cost3,
df$cost4),max(df$cost1,df$cost2,df$cost3,df$cost4)))
lines(sigma, df$cost2, lty = 1, col = "red")
lines(sigma, df$cost3, lty = 1, col = "green")
lines(sigma, df$cost4, lty = 1, col = "orange")

  • 从上图可以看出,在设定条件下,在股价的波动度从 0 增加到 1 的过程中四种交易策略的成本由大到小排序是:3412->4321。
总的来说,看涨策略(第三种和第四种)的期初存在构建成本的问题,而看空策略(第一种和第二种)不存在成本问题,看空策略在构建的时候还会产生剩余资金。从上面的简单模拟可以发现,影响期初成本相对大小的变量有以下三种
  • 构建投资组合时候股价与执行价格的相对大小;
  • 保证金占期初股价的比例;
  • 存贷款的利率大小;
  • 股价的波动度;
    因此只有在上面四种因素确定的时候才能针对具体策略进行构建成本大小的比较
# R

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了570.7k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×