交易员Excel小课堂:如何在债券剩余期限后自动显示“休1”/“休2

《交易员Excel小课堂:如何在债券剩余期限后自动显示“休1”/“休2”?》,傻大方资讯编辑整理。我们不生产头条,我们只是社会头条新闻的搬运工!健康摘要: 2018-03-11 都市现场 都市现场 消息来源:都市现场(jxtvdsxc)综合广西新闻 最近,桂林市资源县的一对夫妇在食用了捕捉来的“癞蛤蟆”后中毒,两人立即前往当地的医院就医,妻子中毒严重,经抢救无效不治身亡,丈夫经抢救挽回一命。 田间抓回瘌蛤蟆 一吃即丧命 2月27日晚...


正文开始:

交易员Excel小课堂:如何在债券剩余期限后自动显示“休1”/“休2

来源:

知乎

作者:韩博

原标题:在Excel中实现债券剩余期限后自动显示“休1”/“休2”的方法

在QB中,剩余期限小于一年的债券,如果到期日为假期就会在剩余期限后标注(休1、休2等)。如果在Excel中也能实现这个功能,不仅会提示自己注意,也会在给其他交易对手刷券的时候,提醒对方注意,以免造成不必要的误会。

交易员Excel小课堂:如何在债券剩余期限后自动显示“休1”/“休2

1、首先生成一列交易日序列:

wind选项卡-插入日期,生成日期:

日期为上海交易所的交易日(银行的小伙伴可以选择银行间交易日)

时间设置为从今天起一年的时间,排序选择

降序

插入到一列不会被删除的地方。插入后把第一个单元格的公式中起始日和终止日改为today()和today()+365,保证每天更新。

或者直接在单元格输入下面公式:

=TDays(today(),today()+365,"Order=D")

交易员Excel小课堂:如何在债券剩余期限后自动显示“休1”/“休2

2、在要素表中新建一列字段[休息天数],表示如果到期日为休息日,距下一个交易日的天数

公式为:

=IFNA(OFFSET(Sheet3!$A$1,MATCH([@到期日],Sheet3!$A:$A,-1)-1,0)-[@到期日],0)

其中

Sheet3!$A$1为交易日序列的第一个单元格

Sheet3!$A:$A为该交易日序列

[@到期日]为要素表中从wind读取的到期日,公式为b_info_maturitydate([@债券代码])+0(+0的作为在于将文本格式的日期转为日期格式,这样才能用于后面的匹配)

MATCH的作用是找到到期日在交易日序列中的位置,如果不在序列中,就输出前一个位置(后一交易日所在的位置),OFFSET是找到这一个交易日,再减去到期日,就是休息的天数。

3、在要素表中再新建一列字段,表示剩余期限

公式为:

=b_date([@期限],[@休息天数])

其中:

期限为=b_info_termnote([@债券代码])

休息天数为第二点的算出来的字段

b_date是我写的一个函数,把下面这段代码粘贴到模块中:

Function

b_date

(

termnote

,

Optional

hol

=

0

,

Optional

onlynum

=

False

)

   

'termnote表示wind函数b_info_termnote的取值,hol表示休几,onlynum为可选参数,用于计算到期日为休息日对实际收益率的影响

       

k

=

InStr

(

termnote

,

"+"

)

   

'判断期限是否为含权的特殊期限

   

If

k

=

0

Then

       

d_left

=

termnote

   

Else

       

d_left

=

Left

(

termnote

,

k

-

1

)

       

d_right

=

"+"

&

Right

(

termnote

,

Len

(

termnote

)

-

k

)

   

End

If

       

If

onlynum

=

True

Then

       

b_date

=

d_left

       

Exit

Function

   

End

If

       

'对剩余期限不足一年和超过一年的以不同单位显示,对到期日是否为休息日进行说明

   

If

d_left

>=

1

Then

       

d_left

=

Round

(

d_left

,

2

)

&

"Y"

   

ElseIf

hol

<>

0

Then

       

d_left

=

Round

(

d_left

*

365

,

0

)

&

"D"

&

"(休"

&

hol

&

")"

   

Else

       

d_left

=

Round

(

d_left

*

365

,

0

)

&

"D"

   

End

If

       

b_date

=

d_left

&

d_right

End

Function

这个函数可以提示到期日是否为休息日,也可以将一年内的期限单位转化为天(D),一年以上的单位为年(Y),并且保留合适的小数位,保留含权期限。

最后做出来的效果是

交易员Excel小课堂:如何在债券剩余期限后自动显示“休1”/“休2

另外,也可以再加一列,计算到期日为休息日对实际收益率的影响,公式为:

=[@休息天数]/b_date([@期限],0,TRUE)/365*100*[@中债到期估值]

最后,配合我之前写的生成交易要素,只需一键,就可以一键生成带休的到期日啦!

生成交易要素,只需一键

贴报价是每个交易员最最重要的日常了:在Excel里总结好了报价要素,然后在QQ上贴给broker、交易员或者刷到群里。然而直接复制Excel内容粘贴到QQ里,只能粘贴图片。图片又不便于编辑,整理,甚至有些交易员的QQ无法接受图片。所以就需要先粘贴到文本文档(或Word)中,在从文本文档复制粘贴到QQ中。其实有一个更简单的方法,就可以实现一键复制Excel内容。方法如下:

在Excel中ALT+F11,或者右键工作表标签、点查看代码,或者点工具-宏-visual basic 编辑器 。进入以后插入一个模块,复制下面这段代码,.然后在工作表中插入按钮(开发工具-插入-表单控件-按钮,找不到开发工具?如何打开Excel的“开发工具”),指定paste这个过程(在Excel 中添加代码)。用的时候,先选中需要复制的地方,然后点击这个按钮就可以运行了。

Sub

paste

()

   

Dim

break$

,

r%

,

c%

,

str$

       

break

=

Chr

(

32

)

+

Chr

(

32

)

For

r

=

Selection

.

Row

To

Selection

.

Row

+

Selection

.

Rows

.

Count

-

1

 

For

c

=

Selection

.

Column

To

Selection

.

Column

+

Selection

.

Columns

.

Count

-

1

   

str

=

str

&

Cells

(

r

,

c

).

Text

&

break

 

Next

 

str

=

str

&

Chr

(

13

)

Next

Dim

d

As

New

DataObject

   

Set

d

=

New

DataObject

 

'如果报错,引用中勾选 Microsoft Forms 2.0 Object Liabrary

   

With

d

       

.

SetText

str

'要写入的文本

       

.

PutInClipboard

   

End

With

   

Set

d

=

Nothing

MsgBox

"已经复制"

 

'可以提供一个执行成功的反馈,如果不喜欢可以注释掉这句

End

Sub

第一次使用,需要在代码窗口中,选工具-引用-勾选 Microsoft Forms 2.0 Object Liabrary,否则会报错。保存时注意选择“启用宏的工作簿”,也就是xlsm格式。

END

交易员Excel小课堂:如何在债券剩余期限后自动显示“休1”/“休2