创建第一个可视化模块:A股统计性分析

新手专区
可视化模块
标签: #<Tag:0x00007f609848a468> #<Tag:0x00007f609848a210>

(sszy) #1

新手学习第二弹: 创建第一个可视化模块学习过程分享。

BigQuant 将复杂的算法和逻辑代码封装为简单易用的模块。模块支持一致的命名约定、版本控制和缓存/增量计算等功能。同时,BigQuant开放模块平台,用户可以开发自己的模块,在平台上使用、分享并获得收益。

每次都调用代码进行分析比较麻烦,如果将代码封装成一个可视化模块,之后就可以直接使用模块,方便快捷。
本文以创建模块“hist_return_of_industry”为例,分享如何创建一个可视化模块。

新建可视化模块

在新建一个空白可视化策略之后,点击页面左侧的“自定义模块”,将“自定义python模块”拖入中间的策略编辑区域。
单击“自定义python模块”,可以发现页面右侧出现了“属性”栏,对于模块的修改就在这个区域进行。

编辑可视化模块

观察“属性”区域,可以发现有主函数后处理函数模块输入端模块参数模块输出端可供填写,有“启用缓存加速”可供勾选。下面将简单介绍这些功能

  • 主函数: 主函数是模块的主体部分,必须填写,是Python 代码入口函数。主函数的计算结果会默认缓存。
  • 后处理函数:选填。后处理函数的输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。后处理函数的输出不会被缓存。
  • 模块输入端:选填。输入模块的数据
  • 模块参数:选填。如果填写参数,建议函数需要用的局部变量都通过参数传入,不推荐使用全局变量,否则在只是全局变量值更新时,模块仍然返回旧的缓存数据
  • 模块输出端:选填。模块输出的数据

编辑主函数

此模块的目的是为了画出申万一级行业一段时间内收益率直方图,大致可以分为两部分:(1)计算行业收益率 (2)画出直方图
由于画图会占用比较多的缓存,所以考虑到提高模块计算效率,将计算收益率部分放在主函数(默认缓存),将画图部分分配到后处理函数
下面,先观察主函数。


自定义模块中有主函数示例,input_1/2/3为输入端,data_1/2/3为输出端,想要输出的数据可以通过DataSource.write_df()写入一个变量,将这个变量作为data_1/2/3输出。
如果函数没有输出,就直接return Outputs(data_1=None, data_2=None, data_3=None)

开始编辑主函数,将下述代码放入主函数

主函数代码
# Python 代码入口函数
def bigquant_run(start_date,end_date):
    import pandas as pd
    import numpy as np

    index_price = DataSource('bar1d_index_CN_STOCK_A').read(start_date=start_date, end_date=end_date,fields=['close']) #指数行情数据
    #行业列表
    codelist = DataSource('basic_info_IndustrySw').read(start_date = '2019-01-02')
    codelist['instrument'] = 'SW' + codelist['code'] + '.HIX'
    # 计算收益率
    def caclu_ret(tmp):
        tmp['ret'] = tmp['close'] / tmp['close'].tolist()[0] - 1
        return tmp 

    ret_df = index_price.groupby('instrument').apply(caclu_ret)
    last_date = ret_df.date.max().strftime('%Y-%m-%d')
    ret_df.set_index('date', inplace=True)
    last_date_ret_df = ret_df.ix[last_date]
    rate = pd.merge(last_date_ret_df, codelist, on=['instrument']).drop(columns = ['industry_sw_level','code','close','instrument'])
    rate = rate.set_index('name')

    ds = DataSource.write_df(rate)
    
    return Outputs(data_1=ds)

此主函数没有输入数据,但是有‘start_date’和‘end_date’两个参数输入,最后输出ds这个代表各行业收益率的数据。如何编辑输入参数将在下文进一步解释。

编辑后处理函数

后处理函数的目的是为了绘制直方图,所以将主函数输出的data_1数据储存在df里,然后用df画图。

后处理函数的输入是主函数的输出,可以在这里对数据做处理,或者返回更友好的outputs数据格式。此函数输出不会被缓存

编辑输入参数

模块参数部分是一个字典,(key)对应着参数(value)对应着默认参数值

勾选启用缓存加速

勾选了启用缓存加速后,主函数的输出就会被默认缓存,再次运行模块能大幅加速。

运行或保存模块

%E4%BF%9D%E5%AD%98
右击模块,可以运行选中模块或者保存模块。
我们保存模块,可以选择“新建模块”或“升级已有模块”,如果是创建就选择新建。
然后对新建的模块命名:

模块命名

最后创建模块,可以选择是否公布源代码。

模块创建

至此,一个可视化模块就创建完毕了。

查看模块版本或者源代码

查看模块版本:
M.hist_return_of_industry.m_get_version

查看模块源代码
print(M.hist_return_of_industry.v1.m_sourcecode[0][1])

最后,附上此可视化模块的策略源代码。
https://i.bigquant.com/user/sszy/lab/share/0322%2F%E7%94%B3%E4%B8%87%E4%B8%80%E7%BA%A7%E8%A1%8C%E4%B8%9A2019%E5%B9%B4%E6%83%85%E5%86%B5%E7%BB%9F%E8%AE%A1.ipynb