import sys
sys.path.insert(0, "../../")
from pyecharts import online
online()
# 演示必要的准备代码,使用该库时不需重复此单元格命令
import xalpha as xa
import pandas as pd
zzhli = xa.indexinfo('1399922')
# 指数注意需要给定的代码为七位,第一位数字代表市场情况,0 代表沪市, 1 代表深市
# 本例即为深市代码为 399922 的指数获取,对应中证红利指数
zzhli.price[zzhli.price['date']>='2018-08-01']
# 指数的价格表,数据类型为 pandas.DataFrame, 净值栏为初始值归一化的1的值,总值栏对应指数的真实值,注释栏均为空
comment | date | netvalue | totvalue | |
---|---|---|---|---|
3300 | 0 | 2018-08-01 | 4.206851 | 4129.2559 |
3301 | 0 | 2018-08-02 | 4.122989 | 4046.9400 |
3302 | 0 | 2018-08-03 | 4.070295 | 3995.2183 |
3303 | 0 | 2018-08-06 | 4.017390 | 3943.2896 |
3304 | 0 | 2018-08-07 | 4.119750 | 4043.7615 |
3305 | 0 | 2018-08-08 | 4.063663 | 3988.7085 |
zzhli.name, zzhli.code # 指数类的部分属性
('中证红利', '1399922')
zzhli.bcmkset(xa.indexinfo('0000300'),start = '2014-01-01')
# 设定中证红利的比较基准为沪深300指数,以便于接下来更多量化分析
# 同时设定比较分析的区间段是从13年开始的
zzhli.v_netvalue()
# 指数与基准指数的可视化
#二者都在研究区间的初始日归一
zzhli.alpha(), zzhli.beta() # 计算中证红利指数相对于沪深300的 alpha 和 beta 收益
(0.050747854601604941, 0.98038626706999821)
zzhli.correlation_coefficient('2018-01-01') # 计算两个指数截止2017年底的相关系数
0.95681872181058214
zzhli.algorithm_volatility(), zzhli.benchmark_volatility()
# 计算中证红利和基准沪深300,截止目前的年化波动率
(0.24951040441292685, 0.24367852612323274)
zzhli.total_annualized_returns(), zzhli.benchmark_annualized_returns()
# 计算中证红利和基准沪深300的年化收益率
(0.1303, 0.080399999999999999)
zzhli.information_ratio('2015-06-01'), zzhli.sharpe('2015-06-01')
# 计算指数截止 2015-06-01 的信息比率和夏普比率
(2.1074014053052625, 3.8186585488765177)
fgzzhl=xa.fundinfo('100032')
fgzzhl.special # 发生分红或折算的细节
comment | date | netvalue | totvalue | |
---|---|---|---|---|
243 | 0.245 | 2010-01-14 | 1.410 | 1.863 |
488 | 0.130 | 2011-01-19 | 1.151 | 1.718 |
729 | 0.026 | 2012-01-16 | 0.969 | 1.542 |
1458 | 0.056 | 2015-01-20 | 1.385 | 2.073 |
1712 | 0.350 | 2016-02-02 | 1.118 | 2.167 |
1945 | 0.300 | 2017-01-17 | 1.087 | 2.469 |
2191 | 0.188 | 2018-01-18 | 1.215 | 2.825 |
fgzzhl.info()
fund name: 富国中证红利指数增强 fund code: 100032 fund purchase fee: 0.15% fund redemption fee info: ['小于7天', '1.50%', '大于等于7天', '0.50%']
fgzzhl.fenhongdate
# 基金分红日期
[Timestamp('2010-01-14 00:00:00'), Timestamp('2011-01-19 00:00:00'), Timestamp('2012-01-16 00:00:00'), Timestamp('2015-01-20 00:00:00'), Timestamp('2016-02-02 00:00:00'), Timestamp('2017-01-17 00:00:00'), Timestamp('2018-01-18 00:00:00')]
fgzzhl.zhesuandate
# 该基金未发生过份额折算
[]
fgzzhl.price[fgzzhl.price['date'].isin(fgzzhl.specialdate)]
# 基金产生分红或折算的日期对应的price表格
# 其中 comment 栏正数表示每份额分红的金额, 负数表示现在每份额折算的份额数,常见于分级连接基金
comment | date | netvalue | totvalue | |
---|---|---|---|---|
243 | 0.245 | 2010-01-14 | 1.410 | 1.863 |
488 | 0.130 | 2011-01-19 | 1.151 | 1.718 |
729 | 0.026 | 2012-01-16 | 0.969 | 1.542 |
1458 | 0.056 | 2015-01-20 | 1.385 | 2.073 |
1712 | 0.350 | 2016-02-02 | 1.118 | 2.167 |
1945 | 0.300 | 2017-01-17 | 1.087 | 2.469 |
2191 | 0.188 | 2018-01-18 | 1.215 | 2.825 |
除了指数类和基金类,为了方便,还准备了虚拟的货币基金类。 需要注意的是真实的货币基金无法用基金类获取,基金类只支持净值法计价的基金。
vca = xa.cashinfo(interest=0.00012, start='2018-01-01')
# 初始化一个日利率 0.00012,建立于 2018 年的货币基金
vca.price.iloc[-2:-1]
comment | date | netvalue | totvalue | |
---|---|---|---|---|
218 | 0 | 2018-08-07 | 1.026504 | 1.026504 |
vca.code, vca.name
# 虚拟货币基金的代码默认为 mf, 名称为货币基金
('mf', '货币基金')
注意:货币基金类也可以作为基准或是标的,进行同上的量化分析
huobi = xa.mfundinfo('004331') # 拉取真实的货币基金数据
huobi.info()
fund name: 太平日日鑫货币B fund code: 004331 fund purchase fee: 0%
huobi.bcmkset(xa.cashinfo(interest=0.00011),start='2017-05-01') # 和一个虚拟的货币基金比较
huobi.total_annualized_returns() # 该货币基金的平均年化是 4.26%
0.042599999999999999
huobi.correlation_coefficient() # 和一个平稳的虚拟货币基金的关联是 0.95
0.94913838927244121
ioconf={'save':True,'fetch':True,'path':'../../../sknife/dataset/', 'form':'csv'}
# 可以先生成IO的设置字典,save 字段表示每一个info对象会自动将信息本地化,fetch 字段表示初始化时先尝试本地获取,
# path 字段是存储的路径和前缀, form 字段表示存储的格式是 csv
# 指数,基金和货币基金类都可以使用这种增量更新策略来提速
zzhli = xa.indexinfo('1399922', **ioconf) # 如果是 fetch 时还没有存档,会提醒打印消息,之后按原初始化方法获取
no saved copy of this index
zzhli = xa.indexinfo('1399922', **ioconf) # 数据本地化后,对象初始化速度大幅提升
# 需要借助 sqlalchemy 库, 实现方式如下
from sqlalchemy import create_engine
engine = create_engine('mysql://user:pass@host/db_name?charset=utf8')
sqlconf={'save':True,'fetch':True,'path':engine, 'form':'sql'}
zzhli = xa.indexinfo('1399922', **sqlconf) # 设定好 sql 选项后,其他部分均和 csv 类似