在日常的债券一级和二级交易中,中债估值基本成为了价格的锚,其一举一动都会对个券的收益率产生重大影响。Wind能较为方便的看单个主体的估值,但是要实现非常个性化的筛选较为麻烦,比如时常会有下列需要:


1、  想知道近期3年左右市场上所有AA+城投的估值的分布情况 2、  想知道武汉所有AA+城投2-3年的估值分布情况以及利差 3、  想知道山西煤炭行业1-3年期AAA公募品种的估值情况 今天这篇文件能够智能化实现了这个功能,只要在Excel输入关键字,一按查询就能立即出来想要的结果,具体效果的视频可移步到公众号历史消息。

当然也可以通过VBA实现,每天导出所有存续债,再编写一个自动筛选VBA,只不过需要每天导出并处理Excel,非常消耗wind的提取量,而且会很卡。本文最重要其实还是展示在excel中如何运用python的功能,以往我们都是用python去处理Excel数据,但Excel在数据可视化以及简单的运算方便非常有优势,因此萌生了如何在Excel中去利用python的编程功能,从而能替换需要编写繁琐代码的VBA。

通过python+VBA+Excel工具简单的交互即可,python只需要不到20行代码,VBA只需4行,甚至不用启动python,只需要在Excel中输入关键字,就可以实现一键点击查询。


一、启动宏


如果Excel启动过宏,就跳过此步骤。否则执行下列步骤:

依次点击【文件】—【选项】—【信任中心】—【信任中心设置】—【宏设置】,勾选【启用所有宏】。


二、python安装模块


在pycharm里的settings下找到xlwings模块,并安装。然后在pycharm的console输入:

import xlwings as xw

xw.__path__


会出来如下结果,记住该文件的安装路径,后面会用到。 C:\Users\baoyx\AppData\Local\Programs\Python\Python37\Lib\site-packages\xlwings

python 计算债券YTM excel计算债券_python 计算债券YTM

三、将xlwing引入到Excel中


在第二部分我们输出了一个路径,现在要用上了。

第一步,去该路径下找到名称为addin的文件夹,其中包含一个名为xlwings.xlam的文件,双击它即可,没什么反应是正常现象。

第二步,在该路径下新建一个文件夹,我命名为bao,然后在bao的文件夹里新建一个Excel,我命名为存续债自动,最后保存为xlsm格式(前提是第一部分激活了宏)。



python 计算债券YTM excel计算债券_python 宏定义_02

打开刚刚新建的存续债自动.xlsm文件,按快捷键【Alt+F11】调出VBE(代码编辑器),点击【工具】—【引用】,勾选【xlwings】。


 

python 计算债券YTM excel计算债券_excel宏编程_03


然后返回到Excel当中,发现菜单栏出现了xlwings板块,勾选上RunPython:Use UDF Server。

python 计算债券YTM excel计算债券_python 宏定义_04

接着在上面的interpreter里添加自己的解释器路径(查询方法在之前的文件有写过,在pycharm里依次为【File】—【settings】—【project】—【project interpreter】),将下图蓝框内的路径,添加到上图Excel中的interpreter。



python 计算债券YTM excel计算债券_excel宏编程_05

添加完成之后,python、Excel、VBA之间的交互已经安装好了,这样就可以在VBA中调用python的代码,然后输出到Excel中的表格里。


四、代码编制


我们在第三部分建立了一个名字为bao的文件夹,现在我们需要用上它,为了实现python、VBA和Excel能相互调用,我们把所需的数据文件都放在这个文件夹里。



python 计算债券YTM excel计算债券_python 计算债券YTM_06

用excel通过VBA调用python的逻辑大概是这样的,比如上图中的mydata.xlsx是我的数据(当然数据如果太大可以用mysql),我要在我的Excel宏文件(存续债自动.xlsm)中实现自动化功能,我通过点击该宏文件的命令,去读取python中的代码,python代码再去调取我的数据mydata.xlsx,并返回到我的宏文件(存续债自动.xlsm)。因此这三个文件缺一不可,也最好在同一个文件夹里。


1、mydata.xlsx文件

这是我的数据文件,存储了所有信用债存续债以及他们的相关要素,这个文件可以用python和wind的交互可每日自动更新,具体见python自动更新存续信用债相关信息,本文不再讲述。


2、存续债自动.xlsm

打开该文件,设计查询的格式模板,A列和B列输入下图内容,查询的按钮用控件指定,以后就可以在B1到B6输入关键字即可点击查询,然后结果就会出现在右侧,如此再对数据进行观看和分析就极为方便。



python 计算债券YTM excel计算债券_python 计算债券YTM_07


3 、 python代码编制

我们在pycharm里新建一个hello.py文件,代码编制完成后将该文件移动到bao文件夹里。这个文件非常关键



python 计算债券YTM excel计算债券_excel 宏编程_08

前3句是导入所需模块,第4句以下是自定义的world()函数,第6到11句是获取存续债自动.xlsm中的B1到B6的输入值,第12句是读取数据文件mydata,第13句至15句是筛选符合输入条件的数据(该句代码是核心)


2、VBA代码编制

在存续债自动.xlsm里按ALT+F11进入VBA编辑器,在sheet1编写如下代码,总共只需要4行,前三行的意思是清空D列和M列,主要是每次查询完的结果有可能不能覆盖之前的结果,所以需要在每次查询前清空所有内容。第四句是最为关键的一句话,大致意思是VBA先导入hello.py,然后再调用hello.world()函数。



python 计算债券YTM excel计算债券_python 宏定义_09