import xalpha as xa
import pandas as pd
xa.set_display("notebook")
zzhli = xa.indexinfo("0000922")
# 指数注意需要给定的代码为七位,第一位数字代表市场情况,0 代表沪市, 1 代表深市
# 本例即为沪市 000922 的指数获取,对应中证红利指数
# 也可直接 xa.indexinfo("SH000922")
zzhli.price[zzhli.price["date"] >= "2020-04-11"]
# 指数的价格表,数据类型为 pandas.DataFrame, 净值栏为初始值归一化的1的值,总值栏对应指数的真实值,注释栏均为空
zzhli.name, zzhli.code # 指数类的部分属性
('中证红利', '0000922')
zzhli.bcmkset(xa.indexinfo("SH000300"), start="2014-01-01")
# 设定中证红利的比较基准为沪深300指数,以便于接下来更多量化分析
# 同时设定比较分析的区间段是从13年开始的
zzhli.v_netvalue()
# 指数与基准指数的可视化
# 二者都在研究区间的初始日归一
zzhli.alpha(), zzhli.beta() # 计算中证红利指数相对于沪深300的 alpha 和 beta 收益
(0.01574527073375659, 0.9521439752795914)
zzhli.correlation_coefficient("2020-01-01") # 计算两个指数截止2019年底的相关系数
0.9546502342557672
zzhli.algorithm_volatility(), zzhli.benchmark_volatility()
# 计算中证红利和基准沪深300,截止目前的年化波动率
(0.2380163305711998, 0.2387765132801344)
zzhli.total_annualized_returns(), zzhli.benchmark_annualized_returns()
# 计算中证红利和基准沪深300的年化收益率
(0.0956, 0.082)
zzhli.information_ratio("2015-06-01"), zzhli.sharpe("2015-06-01")
# 计算指数截止 2015-06-01 的信息比率和夏普比率
(2.1074014053052625, 3.8186585488765177)
fgzzhl = xa.fundinfo("100032")
fgzzhl.special # 发生分红或折算的细节
fgzzhl.info()
fund name: 富国中证红利指数增强A 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'), Timestamp('2020-02-28 00:00:00')]
fgzzhl.zhesuandate
# 该基金未发生过份额折算
[]
fgzzhl.price[fgzzhl.price["date"].isin(fgzzhl.specialdate)]
# 基金产生分红或折算的日期对应的price表格
# 其中 comment 栏正数表示每份额分红的金额, 负数表示现在每份额折算的份额数,常见于分级连接基金
除了指数类和基金类,为了方便,还准备了虚拟的货币基金类。 需要注意的是真实的货币基金无法用基金类获取,基金类只支持净值法计价的基金。
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 类似
关于本地缓存与增量 IO,推荐新用户直接使用 xa.set_backend()
界面设定,而不再需要向 info obj 传入参数。
set_backend 的支持参数请查阅文档。