导航
符号表
符号 | 含义 |
---|---|
T T T | 远期到期的时间 |
t t t | 当前时刻 |
T − t T-t T−t | 权利期 |
c c c | 时远期标的资产在 t t t时刻的价格 |
S T S_T ST | 远期标的资产在 T T T时刻的价格 |
K K K | 远期交割的价格 |
f f f | t t t时刻,远期多头价值 |
F F F | t t t时刻的远期价格 |
r r r | 无风险利率 |
基本假设
- 没有交易费用和税收,无摩擦市场
- 市场参与者可以以相同的 r r r借入和贷出资金
- 无违约风险
- 允许卖空
- 套利出现时,市场参与者将自动进行套利
远期定价
远期是在将来某一确定时间,按照事先约定好的价格买卖某种标的资产的合约,远期中约定的未来买卖的资产价格称为交割价格,购买标的资产的一方称为远期的多头(long position),出售标的资产的一方称为远期的空头(short position).
当信息对称时,并且多空对未来的预期相同,双方所选择的交割价格应使远期的价值在合约签订时为0,使这个远期合约价值为0的交割价格称为远期价格.
无收益证券的远期
使用无套利组合复制的方法定价,考虑两种组合
组合A:一个价值为
f
f
f的远期多头加上一笔
K
e
−
r
(
T
−
t
)
Ke^{-r(T-t)}
Ke−r(T−t)的现金
组合B:价值为
S
S
S的单位标的证券
在时间
t
t
t持有远期,并以利率
r
r
r贷出资金,在时间
T
T
T,远期行权,以价格
K
K
K买入价值为
S
S
S的标的,因此在整个权利期,以下等式成立
f
+
K
e
−
r
(
T
−
t
)
=
S
f+Ke^{-r(T-t)}=S
f+Ke−r(T−t)=S
可以计算出远期的价值为
f
=
S
−
K
e
−
r
(
T
−
t
)
f=S-Ke^{-r(T-t)}
f=S−Ke−r(T−t)
根据远期价格的定义,远期价格等于合约规定的交割价格
K
K
K,且使该合约本身的价值为0,所以远期价格
F
F
F值为当
f
=
0
f=0
f=0时的
K
K
K值
F
=
S
e
r
(
T
−
t
)
F=Se^{r(T-t)}
F=Ser(T−t)
案例
考虑一个6个月的远期多头,标的资产时1年期贴现债券,远期的交割价格为 950 950 950,设6个月无风险利率为 6 % 6\% 6%,债券现价为 930 930 930,求远期价值和远期价格
解析
根据远期合约的计算公式
合约价值
f
=
S
−
K
e
−
r
(
Δ
t
)
=
930
−
950
∗
e
−
0.03
f=S-Ke^{-r(\Delta t)}=930-950*e^{-0.03}
f=S−Ke−r(Δt)=930−950∗e−0.03
合约价格
F
=
S
e
r
Δ
t
=
930
∗
e
0.03
F=Se^{r\Delta t}=930*e^{0.03}
F=SerΔt=930∗e0.03
代码
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#include<cassert>
#include<iomanip>
#include<random>
#include<map>
using namespace std;
int forward(const double& dt, const double &K, const double& S, const double &r){
double f=S-K*exp(-r*dt);
double F=S*exp(r*dt);
cout<<"f= "<<f<<endl;
cout<<"F= "<<F<<endl;
return 0;
}
int main(){
const double dt=0.5;
const double K=950;
const double S=930;
const double r=0.06;
forward(dt, K, S, r);
return 0;
}
支付已知现金收益证券的远期
这类远期标的资产为投资者提供了完全可预测的现金收益,如固定附息的债券和固定股利的优先股,若远期在有效期内可获得现金收益的现值为
I
I
I,贴现率为无风险利率
r
r
r,标的资产现价为
S
S
S,则在无套利条件下,远期价格
F
F
F为
F
=
(
S
−
I
)
e
r
(
T
−
t
)
F=(S-I)e^{r(T-t)}
F=(S−I)er(T−t)
使用无套利组合进行资产复制
组合A:一个价值为
f
f
f的远期多头加上一笔数额为
K
e
−
r
(
T
−
t
)
Ke^{-r(T-t)}
Ke−r(T−t)的现金
组合B:价值为
S
S
S的单位标的资产加上无风险利率
r
r
r借入的金额
I
I
I
在T时刻,组合A支付
K
K
K,行权获得资产,组合B与单位资产价值相同,因此组合A和组合B的价值再
t
∼
T
t\sim T
t∼T任何时刻均相同. 在
t
t
t时刻
f
+
K
e
−
r
(
T
−
t
)
=
S
−
I
f+Ke^{-r(T-t)}=S-I
f+Ke−r(T−t)=S−I
远期价值为
f
=
S
−
I
−
K
e
−
r
(
T
−
t
)
f=S-I-Ke^{-r(T-t)}
f=S−I−Ke−r(T−t)
远期价格为
F
=
(
S
−
I
)
e
r
(
T
−
t
)
F=(S-I)e^{r(T-t)}
F=(S−I)er(T−t)
案例
5年期的债券,价格为900,假设该债券的1年期远期的交割价格为910元,在6个月后和12个月后,预计会收到60元的利息,第二个付息日在交割日之前,已知6个月和12个月的无风险利率分别是 9 % 9\% 9%和 10 % 10\% 10%,求远期的价值和价格.
解析
可以得到
K
=
910
K=910
K=910,
S
=
900
S=900
S=900,
Δ
t
=
1
\Delta t=1
Δt=1,
r
1
=
0.09
,
I
1
=
60
r_1=0.09, I_1=60
r1=0.09,I1=60,
r
2
=
0.09
,
I
2
=
60
r_2=0.09, I_2=60
r2=0.09,I2=60
I
=
I
1
∗
e
−
r
1
∗
0.5
+
I
2
∗
e
−
r
2
∗
1
=
60
×
(
e
−
0.045
+
e
−
0.1
)
I=I_1*e^{-r_1*0.5}+I_2*e^{-r_2*1}=60\times(e^{-0.045}+e^{-0.1})
I=I1∗e−r1∗0.5+I2∗e−r2∗1=60×(e−0.045+e−0.1)
根据公式计算出远期的价值
f
f
f为
f
=
S
−
I
−
K
e
−
r
(
Δ
t
)
=
900
−
I
−
910
∗
e
−
0.1
f=S-I-Ke^{-r(\Delta t)}=900-I-910*e^{-0.1}
f=S−I−Ke−r(Δt)=900−I−910∗e−0.1
远期的价格
F
F
F为
F
=
(
S
−
I
)
e
0.1
=
(
910
−
I
)
e
0.1
F=(S-I)e^{0.1}=(910-I)e^{0.1}
F=(S−I)e0.1=(910−I)e0.1
代码
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#include<cassert>
#include<iomanip>
#include<random>
#include<map>
using namespace std;
void forwardI(const double& dt, const double &K, const double& S, const double &r, const double& I){
double f=(S-I)-K*exp(-r*dt);
double F=(S-I)*exp(r*dt);
cout<<"f= "<<f<<endl;
cout<<"F= "<<F<<endl;
}
int main(){
const double dt=1;
const double K=910;
const double S=900;
const double r1=0.09;
const double r2=0.1;
const double t1=0.5;
const double t2=1;
const double c=60;
const double I=c*(exp(-r1*t1)+exp(-r2*t2));
forwardI(dt, K, S, r2, I);
return 0;
}
支付已知红利证券远期
这类远期的标的资产支付已知红利率,即证券价格百分比的收益率为已知,构造两个组合进行无套利复制
组合A:一份价值为
f
f
f的远期合约,以无风险利率
r
r
r贷出现金
K
e
r
(
T
−
t
)
Ke^{r(T-t)}
Ker(T−t)
组合B:
e
−
q
(
T
−
t
)
e^{-q(T-t)}
e−q(T−t)数量的标的资产并且红利收益继续投入该资产
可以知道在
T
T
T时刻,A,B的价值均为一份标的资产,因此在
t
∼
T
t\sim T
t∼T中任意时刻,组合价值相等.
在
t
t
t时刻,可以推出
f
+
K
e
−
r
(
T
−
t
)
=
S
e
−
q
(
T
−
t
)
f+Ke^{-r(T-t)}=Se^{-q(T-t)}
f+Ke−r(T−t)=Se−q(T−t)
远期价值
f
f
f为
f
=
S
e
−
q
(
T
−
t
)
−
K
e
−
r
(
T
−
t
)
f=Se^{-q(T-t)}-Ke^{-r(T-t)}
f=Se−q(T−t)−Ke−r(T−t)
远期价格
F
F
F为
F
=
S
e
(
r
−
q
)
(
T
−
t
)
F=Se^{(r-q)(T-t)}
F=Se(r−q)(T−t)
案例
一个6个月远期,标的资产提供年利率为 4 % 4\% 4%的连续红利收益率,设无风险利率 r r r为 10 % 10\% 10%,股价为 25 25 25元,交割价格为 27 27 27元,计算远期的价值和价格.
解析
可以得到
r
=
10
%
,
q
=
4
%
,
S
=
25
,
K
=
27
,
Δ
t
=
0.5
r=10\%, q=4\%, S=25, K=27, \Delta t=0.5
r=10%,q=4%,S=25,K=27,Δt=0.5, 根据公式可以计算出
远期价值
f
=
S
e
−
q
Δ
t
−
K
e
−
r
Δ
t
=
25
e
−
0.04
∗
0.5
−
27
e
−
0.1
∗
0.5
f=Se^{-q\Delta t}-Ke^{-r\Delta t}=25e^{-0.04*0.5}-27e^{-0.1*0.5}
f=Se−qΔt−Ke−rΔt=25e−0.04∗0.5−27e−0.1∗0.5
远期价格
F
=
S
e
(
r
−
q
)
Δ
t
F=Se^{(r-q)\Delta t}
F=Se(r−q)Δt
代码
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#include<cassert>
#include<iomanip>
#include<random>
#include<map>
using namespace std;
void forwardQ(const double& dt, const double &K, const double& S, const double &r, const double& q){
double f=S*exp(-q*dt)-K*exp(-r*dt);
double F=S*exp((r-q)*dt);
cout<<"f= "<<f<<endl;
cout<<"F= "<<F<<endl;
}
int main(){
const double dt=0.5;
const double K=27;
const double S=25;
const double r=0.1;
const double q=0.04;
forwardQ(dt, K, S, r, q);
return 0;
}
期货定价
期货和远期的主要区别
- 期货是高度标准化的合约,对于交割月份、交割品种、交割数量和特征都有统一的规定,而远期的条款比较灵活,可以根据双方需求协商.
- 期货只能在交易所中进行交易,远期一般在场外交易
- 期货的违约风险较小
- 期货可以以平仓,现金交割后者实物交割履行合约
金融期货是指协议双方约定在将来某个交易日按照约定的条件买入或卖出一定标准数量的某种金融资产的协议,主要包括外汇期货,股指期货和利率期货.
外汇期货
外汇期货是以汇率为标的资产的期货,令
S
S
S表示以美元表示的1单位外汇的即期价格,
K
K
K是期货的交割价格,
r
f
r_f
rf是外汇的无风险利率,外汇期货的价值和价格可以通过两个组合构造出.
组合
A
A
A:一个价值为
f
f
f的期货多头加上金额为
K
e
−
r
(
T
−
t
)
Ke^{-r(T-t)}
Ke−r(T−t)的现金
组合
B
B
B:一笔金额为
e
−
r
f
(
T
−
t
)
e^{-r_f(T-t)}
e−rf(T−t)的外汇
在到期日
T
T
T时,组合
A
A
A和组合
B
B
B的价值等于1单位的外汇,所以在
t
∼
T
t\sim T
t∼T任意时刻两个组合的价值应该相等.
f
+
K
e
−
r
(
T
−
t
)
=
S
e
−
r
f
(
T
−
t
)
f+Ke^{-r(T-t)}=Se^{-r_f(T-t)}
f+Ke−r(T−t)=Se−rf(T−t)
期货价值
f
f
f为
f
=
S
e
−
r
f
(
T
−
t
)
−
K
e
−
r
(
T
−
t
)
f=Se^{-r_f(T-t)}-Ke^{-r(T-t)}
f=Se−rf(T−t)−Ke−r(T−t)
期货价格
F
F
F为
F
=
S
e
(
r
−
r
f
)
(
T
−
t
)
F=Se^{(r-r_f)(T-t)}
F=Se(r−rf)(T−t)
案例
考虑外汇期货,其标的资产价格为 100 100 100,交割价格为 99 99 99,本国无风险利率 r f = 10 % r_f=10\% rf=10%,外汇无风险利率 r = 0.2 % r=0.2\% r=0.2%,到期时间为 6 6 6个月,计算外汇期货的价值和价格.
解析
可以得到
S
=
100
,
K
=
99
,
r
f
=
10
%
,
r
=
0.2
%
,
Δ
t
=
0.5
S=100, K=99, r_f=10\%, r=0.2\%, \Delta t=0.5
S=100,K=99,rf=10%,r=0.2%,Δt=0.5,根据公式得到
远期价值
f
f
f为
f
=
100
e
−
0.1
∗
0.5
−
99
e
−
0.002
∗
0.5
f=100e^{-0.1*0.5}-99e^{-0.002*0.5}
f=100e−0.1∗0.5−99e−0.002∗0.5
远期价格
F
F
F为
F
=
100
e
−
(
0.1
−
0.002
)
∗
0.5
F=100e^{-(0.1-0.002)*0.5}
F=100e−(0.1−0.002)∗0.5
代码
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#include<cassert>
#include<iomanip>
#include<random>
#include<map>
using namespace std;
void forwardQ(const double& dt, const double &K, const double& S, const double &r, const double& rf){
double f=S*exp(-rf*dt)-K*exp(-r*dt);
double F=S*exp((r-rf)*dt);
cout<<"f= "<<f<<endl;
cout<<"F= "<<F<<endl;
}
int main(){
const double dt=0.5;
const double K=99;
const double S=100;
const double r=0.1;
const double rf=0.002;
forwardQ(dt, K, S, r, rf);
return 0;
}
股指期货
股指期货是以某种股票价格指数为标的资产的期货合约,股票价格指数可以看做是支付已知红利率
q
q
q的证券,假设红利率是连续支付的,则股指期货价格为
F
=
S
e
(
r
−
q
)
(
T
−
t
)
F=Se^{(r-q)(T-t)}
F=Se(r−q)(T−t)
利率期货
利率其后是依赖于利率水平变化的期货,最普遍是中长期国债期货,短期国债期货和欧洲美元期货.
中长期国债期货
中长期国债期货可以看做是支付已知现金收益的期货,可以计算出期货的价格为
F
=
(
S
−
I
)
e
r
(
T
−
t
)
F=(S-I)e^{r(T-t)}
F=(S−I)er(T−t)
短期国债期货
短期国债也称为贴现债券,在其存续期间一般不支付利息,在到期日投资者收到债券的面值,设当前为0时刻,期货的到期期限是
T
T
T年,作为标的资产的短期国债面值为
V
0
V_0
V0,到期期限为
T
′
T'
T′,
T
T
T与
T
T
T之间间隔
90
90
90天,无风险利率分别为
r
r
r和
r
′
r'
r′.
可以得到短期国债的现值
V
′
V'
V′为
V
′
=
V
0
e
−
r
′
T
′
V'=V_0e^{-r'T'}
V′=V0e−r′T′
短期国债不支付利息,因此短期国债的价格为
F
=
V
′
e
r
T
=
V
0
e
r
T
−
r
′
T
′
F=V'e^{rT}=V_0e^{rT-r'T'}
F=V′erT=V0erT−r′T′
定义远期利率
r
^
\hat{r}
r^
r
^
=
r
′
T
′
−
r
T
T
′
−
T
\hat{r}=\frac{r'T'-rT}{T'-T}
r^=T′−Tr′T′−rT
可以得到
F
F
F的表达式为
F
=
V
0
e
−
r
^
(
T
′
−
T
)
F=V_0e^{-\hat{r}(T'-T)}
F=V0e−r^(T′−T)
案例
假设
140
140
140天期的年利率是
8
%
8\%
8%,
230
230
230天期的年利率是
8.25
%
8.25\%
8.25%,求
140
140
140天期,面值是
100
100
100的短期国债期货价格.
计算远期利率
r
^
\hat{r}
r^为
r
^
=
r
′
T
′
−
r
T
T
′
−
T
=
0.0825
∗
230
−
0.08
∗
140
230
−
140
\hat{r}=\frac{r'T'-rT}{T'-T}=\frac{0.0825*230-0.08*140}{230-140}
r^=T′−Tr′T′−rT=230−1400.0825∗230−0.08∗140
短期国债价格
F
F
F为
F
=
e
−
r
^
(
T
′
−
T
)
=
e
−
r
^
∗
(
230
−
140
)
/
365
F=e^{-\hat{r}(T'-T)}=e^{-\hat{r}*(230-140)/365}
F=e−r^(T′−T)=e−r^∗(230−140)/365
计算代码如下
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#include<cassert>
#include<iomanip>
#include<random>
#include<map>
using namespace std;
void bond_fu(const double& d1, const double& d2, const double &V, const double& r1, const double &r2){
double rhat=(r1*d1-r2*d2)/(d1-d2);
double F=V*exp(-rhat*(d1-d2)/365);
cout<<"F= "<<F<<endl;
}
int main(){
const double d1=230;
const double r1=0.0825;
const double d2=140;
const double r2=0.08;
const double V=100;
bond_fu(d1, d2, V, r1, r2);
return 0;
}
互换定价
金融互换(financial swaps)是两个或两个当事人按照商定的时间交换一系列现金流合约.
利率互换
利率互换是双方同意在未来一定时间内根据货币约定的名义本金交换利息的合约,其中一方现金流根据浮动利率计息,另一方现金流根据固定利率计息,利率互换定价有两种算法:
- 将利率互换看做债券多头与债券空头的组合
- 将利率互换看做一系列远期组合
考虑一家公司与金融机构之间的互换,可以将互换看做金融机构出售给该公司一定数额的浮动利率债券,同时从该公司购买同等数额的固定利率债券的行为. 假设现在为
0
0
0时刻,金融机构在未来的
t
i
(
1
<
i
<
n
)
t_i(1<i<n)
ti(1<i<n)时刻收取的固定收入为
k
k
k,同时以浮动利率支付.
V
=
B
1
−
B
2
V=B_1-B_2
V=B1−B2
B
1
B_1
B1是互换中固定利率债券的价值,根据公式计算
B
1
B_1
B1的价值为
B
1
=
∑
i
=
1
T
k
e
−
r
i
t
i
+
Q
e
−
r
T
T
B_1=\sum_{i=1}^Tke^{-r_it_i}+Qe^{-r_TT}
B1=i=1∑Tke−riti+Qe−rTT
B
2
B_2
B2是互换中浮动利率的债券价值,债券在付息后等于面值
Q
Q
Q,在支付利息的瞬间,
B
2
=
Q
+
k
∗
B_2=Q+k^*
B2=Q+k∗
B
2
=
(
Q
+
k
∗
)
e
−
r
∗
t
∗
B_2=(Q+k^*)e^{-r^*t^*}
B2=(Q+k∗)e−r∗t∗
案例
利率互换条款,金融机构支付6个月其的LIBOR,收取每年 8 % 8\% 8%利息,名义本金为1亿,该互换还有1.25年时间到期,按照连续复利计算的3个月,6个月和15个月相关贴现率分别是 10.0 % 10.0\% 10.0%, 10.5 % 10.5\% 10.5%, 11.0 % 11.0\% 11.0%,上一支付日对应的LIBOR为 10.2 % 10.2\% 10.2%,计算互换的价值.
解析
可以计算出互换参数
k
=
0.08
∗
100
∗
0.5
=
4
k
∗
=
0.102
∗
100
∗
0.5
=
5.1
r
∗
=
0.1
t
∗
=
0.25
Q
=
100
T
=
1.25
\begin{aligned} &k=0.08*100*0.5=4\\ &k^*=0.102*100*0.5=5.1\\ &r^*=0.1\\ &t^*=0.25\\ &Q=100\\ &T=1.25 \end{aligned}
k=0.08∗100∗0.5=4k∗=0.102∗100∗0.5=5.1r∗=0.1t∗=0.25Q=100T=1.25
固定利率端
B
1
B_1
B1
B
1
=
∑
i
=
1
T
k
e
−
r
i
t
i
+
Q
−
r
T
T
B_1=\sum_{i=1}^Tke^{-r_it_i}+Q^{-r_TT}
B1=i=1∑Tke−riti+Q−rTT
浮动利率端
B
2
B_2
B2
B
2
=
(
Q
+
k
∗
)
e
−
r
∗
t
∗
B_2=(Q+k^*)e^{-r^*t^*}
B2=(Q+k∗)e−r∗t∗
互换价值
V
V
V
V
=
B
1
−
B
2
V=B_1-B_2
V=B1−B2
货币互换
货币互换是将一种货币的本金和固定利息与另一种货币的等价本金和固定利息进行交换的合约。和利率互换类似,在没有违约风险时,货币互换可以分解为两种债券组合.
定义
V
s
w
a
p
V_{swap}
Vswap为收入美元并支付外币的货币互换价值,则有
V
s
w
a
p
=
B
D
−
S
0
B
F
V_{swap}=B_D-S_0B_F
Vswap=BD−S0BF
其中,
B
F
B_F
BF为互换中外汇现金流所对应的债券,并以外币计量的价值;
B
D
B_D
BD为互换中本国货币的现金流对应的债券,并以美元计量的债券,
S
0
S_0
S0为即期利率,类似可定义收入外币并支付美元的货币互换价值
V
s
w
a
p
=
S
0
B
F
−
B
D
V_{swap}=S_0B_F-B_D
Vswap=S0BF−BD
案例
设日元和美元的利率期限结构为水平,日元以年利率 4 % 4\% 4%,美元以年利率 9 % 9\% 9%,一家金融机构进行互换,它每年以日元收取年利率 5 % 5\% 5%的利息,以美元支付年利率 8 % 8\% 8%的利息,两种货币本金为120000万日元和1000万美元,互换期为3年,汇率为1美元=110日元,求互换价值.
解析
分析可知互换参数如下
y
1
=
0.04
y
2
=
0.09
r
1
=
0.05
r
2
=
0.08
Q
1
=
1200
Q
2
=
10
S
0
=
1
/
110
\begin{aligned} &y_1=0.04\\ &y_2=0.09\\ &r_1=0.05\\ &r_2=0.08\\ &Q_1=1200\\ &Q_2=10 \\ &S_0=1/110 \end{aligned}
y1=0.04y2=0.09r1=0.05r2=0.08Q1=1200Q2=10S0=1/110
可以计算出互换价值为
B
F
=
0.05
∗
1200
∗
(
e
−
0.04
+
e
−
0.04
∗
2
+
e
−
0.04
∗
3
)
+
1200
∗
e
−
0.04
∗
3
B
D
=
0.08
∗
10
∗
(
e
−
0.09
+
e
−
0.09
∗
2
+
e
−
0.09
∗
3
)
V
s
w
a
p
=
S
0
B
F
−
B
D
\begin{aligned} &B_F=0.05*1200*(e^{-0.04}+e^{-0.04*2}+e^{-0.04*3})+1200*e^{-0.04*3}\\ &B_D=0.08*10*(e^{-0.09}+e^{-0.09*2}+e^{-0.09*3})\\ &V_{swap}=S_0B_F-B_D \end{aligned}
BF=0.05∗1200∗(e−0.04+e−0.04∗2+e−0.04∗3)+1200∗e−0.04∗3BD=0.08∗10∗(e−0.09+e−0.09∗2+e−0.09∗3)Vswap=S0BF−BD