快速绘制国债利率期限结构曲线

快速绘制国债利率期限结构曲线

昨天发现了这个shell命令:cn-treasury-curve,开始以为是个Python的包,今天仔细学习才发现是个shell命令,可以自动获取并整理好一个国债利率期限结构的数据集。于是突发奇想想写个Stata命令。

cn-treasury-curve命令

安装

在终端使用pip即可安装:

1
pip install cn-treasury_curve

安装好之后还可以查看这个命令的位置:

1
which cn-treasury_curve

使用

在终端运行下面的命令即可获取一个存放在工作目录下的csv文件。这个文件详细的展示了2002年以来的国债收益率期限结构。

1
cn-treasury-curve -f zipline treasury-curve.csv

打包成Stata命令

下载

经过两个多小时的研究,终于写好了这个Stata命令,点击下面的链接即可下载:
ctbc.ado
ctbc.sthlp
ctbcChina treasury bonds curve的缩写。

用法

Stata
1
ctbc [, p:lot s:tart(string) e:nd(string) res:hape yla:ble(string)]

选项

  • s:tart(string): 指定绘图的起始日期;{p_end}
  • e:nd(string): 指定绘图的截止日期;{p_end}
  • shellp:ath(string):指定”cn-treasury-curve”的位置,默认为”/Users/mr.cheng/anaconda3/bin”。在终端运行”pip install cn-treasury_curve”即可安装”cn-treasury-curve”,再运行”which cn-treasury-curve” 即可显示其路径。关于改shell命令的详细介绍参考https://github.com/rainx/cn_treasury_curve
  • res:hape: 选择该选项时数据会变成长面板;{p_end}
  • p:lot: 指定是否绘图。默认不绘图。
  • yla:ble(string): 自定义ylabel()选项,默认为”0(2)10”

示例

Stata
1
2
3
4
ctbc, p s("20180101") yla(2(1)6)
ctbc, p
ctbc
ctbc, res

ctbc, p的运行结果为:

ctbc, res的运行结果为:

在绘图中使用调色板

这幅图的绘图主题是plotplain,配色正是使用的前一篇博客中介绍的colorscheme命令,具体绘图代码如下:

Stata
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
clear all
!/Users/mr.cheng/anaconda3/bin/cn-treasury-curve -f zipline treasury-curve.csv
import delimited /Users/mr.cheng/Desktop/treasury-curve.csv, varnames(nonames) clear
ren v1 date
ren v2 m1
ren v3 m3
ren v4 m6
ren v5 y1
ren v6 y2
ren v7 y3
ren v8 y5
ren v9 y7
ren v10 y10
ren v11 y20
ren v12 y30
drop in 1
gen date1 = date(date, "YMD")
format date1 %tdCY-N-D
order date1
drop date
ren date1 date
destring, replace
colorscheme 5, palette(Set1)
local c1 = `"`r(colors)'"'
colorscheme 5, palette(Set2)
local c2 = `"`r(colors)'"'
colorscheme 5, palette(Set3)
local c3 = `"`r(colors)'"'
line m1 m3 m6 y1 y2 y3 y5 y7 y10 y20 y30 date, xlabel(,ang(20)) xti("日期") yti("国债收益率") leg(order(1 "1month" ///
2 "3month" ///
3 "6month" ///
4 "1year" ///
5 "2year" ///
6 "3year" ///
7 "5year" ///
8 "7year" ///
9 "10year" ///
10 "20year" ///
11 "30year") pos(1) ring(0) col(3)) ///
lc(`c1' `c2' `c3') lp(solid solid solid solid solid solid solid solid solid solid solid)

评论

程振兴

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

Your browser is out-of-date!

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

×