快速开始

xalpha 可以用来对场外基金和指数进行方便的追踪和研究, 同时可以实现投资情况的汇总管理与数据分析,并且支持一些简单的基金购买策略回测。

本文仅简述最基本的模块使用的一小部分,关于更多的函数和用法尤其是可视化的部分,请参考具体示例 具体示例。 关于数据结构和内部的模块设计,请参考高级用法 高级用法

基金和指数的信息

使用 xalpha.info.fundinfo 来获取场外基金的基本信息和历史每日净值情况。 其中净值以 pandas.DataFrame 的格式存储。

Note

基金信息只支持按净值法结算的场外基金,也即货币基金不被支持。货币基金需额外使用 xalpha.info.mfundinfo 类。

代码示例:

>>> import xalpha as xa
>>> zzyl = xa.fundinfo('000968')
>>> zzyl
广发养老指数A
>>> zzyl.info()
fund name: 广发养老指数A
fund code: 000968
fund purchase fee: 0.12%
fund redemption fee info: ['小于7天', '1.50%', '大于等于7天,小于1年', '0.50%', '大于等于1年,小于2年', '0.30%', '大于等于2年', '0.00%']
>>> zzyl.price[zzyl.price['date']<='2015-02-27']
comment date    netvalue        totvalue
0       0       2015-02-13      1.0000  1.0000
1       0       2015-02-17      1.0000  1.0000
2       0       2015-02-27      1.0123  1.0123

使用 xalpha.info.indexinfo 来获取相应指数的每日净值情况。

Note

indexinfo() 对应的指数代码为7位数,其中后六位是正常的指数代码,第一位用来标记市场,0是沪市,1是深市。

代码示例:

>>> zzyli = xa.indexinfo('1399812')
>>> zzyli
养老产业
>>> zzyli.price[zzyli.price['date']=='2018-08-01']
        comment date    netvalue        totvalue
1       0       2018-08-01      7.603842        7524.4807

Note

对应的 indexinfo().price 表中,netvalue 栏为以初始日归一化后的净值,而 totvalue 栏则是真实的指数值。

单一标的交易处理

使用 xalpha.trade.trade 来处理交易情况。 为了生成交易,需要提供标的类 xalpha.info 和交易账单 status table。 账单的具体的数据结构请参考高级用法 高级用法

代码示例:

>>> yyws = xa.fundinfo('001180') # 交易标的信息
>>> statb = xa.record(path).status # path位置的交易账单csv
>>> yyws_t = xa.trade(yyws, statb)
>>> yyws_t.dailyreport()
{'currentshare': 630.39,
 'currentvalue': 504.12,
 'date': datetime.datetime(2018, 8, 5, 0, 0),
 'originalvalue': 523.86,
 'returnrate': -3.7682,
 'unitcost': 0.831,
 'unitvalue': 0.79969999999999997}
>>> yyws_t.xirrrate('2018-08-01')
-0.01764033506484772

基金投资组合的管理分析

使用 xalpha.multiple.mul 可以将多个基金交易类归总,或者根据 status 表格上记录的基金代码自动汇总。 如果选择 xalpha.multiple.mulfix 归总交易情况的话,则所有交易视作封闭系统,资金进出由虚拟的货币基金调节。 代码示例:

>>> invclose = xa.mulfix(yyws_t, totmoney = 6000)
>>> invclose.combsummary()
        基金代码    基金名称                    基金成本    基金收益率   基金现值
0       001180  广发医药卫生联接A       523.86  -3.7682 504.12
1       mf              货币基金                    5476.15 7.3475  5878.51
2       xxxxxx  总计                              6000.01 6.3770  6382.63
>>> invopen = xa.mul(status=xa.record(path).status)
>>> invopen.combsummary('2018-07-01').iloc[-1]
基金代码      xxxxxx
基金名称          总计
基金成本     2379.52
基金收益率    -4.2559
基金现值     2278.25
Name: 5, dtype: object
>>> invopen.xirrrate('2018-07-01')
-0.05594572489624858

基金交易策略与回测

通过额外导入 policy 模块,使用 xalpha.policy.policy 的子类,进行按一定策略的模拟交易的 status 表格生成, 从而可以进行相关的交易分析,起到策略回测比较的作用。对应类的 self.status 属性即为相应策略的 status 交易表格, 可以用于上述的交易分析使用。 代码示例:

>>> st = xa.policy.buyandhold(yyws,'2016-01-01') # buy and hold from 2016-01-01, 且始终分红再投入
>>> st2 = xa.policy.scheduled(yyws, totmoney = 1000, times=pd.date_range('2016-01-01','2018-06-01',freq='W-THU')) # 定投 status 的生成:从2016-01-01 到 2018-06-01 每周四进行定额定投 1000 元。

交易策略的监视和定时提醒

使用 xalpha.realtime.review 可以实现策略的监测和邮件的发送,具体使用可以查看 示例

通用日线和实时数据获取器

使用 xalpha.universal.get_daily(),给定一个代码,直接返回日线数据的 DataFrame。覆盖范围包括沪深市场的股票,基金,ETF,LOF,可转债 债券;香港市场的股票,指数;美国市场的股票,指数,ETF;人民币兑外币的中间价数据;和其他在 investing.com 上可以访问的金融产品的日线数据。 以及可以从标普,ft 和彭博网站找到的标的数据。及以聚宽为数据源的指数估值数据,基金份额数据,指数总盈利总资产数据和宏观经济数据。

使用 xalpha.universal.get_rt(),给定一个代码,直接返回实时数据 json。覆盖范围包括沪深市场的股票,场内基金,ETF,LOF,可转债 债券;香港市场的股票,指数;美国市场的股票,指数,ETF;和其他在 investing.com 上可以访问的金融产品的日线数据。

使用 xalpha.universal.get_bar(),给定一个代码,直接返回相应标的的分钟线,5分钟线,小时线,周线等不同频率的近期分时数据。

代码示例:

>>> xa.get_daily("EUR/CNY", prev=5) # 人民币中间价数据
        date   close
4 2020-03-30  7.8288
3 2020-03-31  7.8088
2 2020-04-01  7.8090
1 2020-04-02  7.7678
0 2020-04-03  7.7081
>>> xa.get_daily("currencies/usd-cnh") # 英为离岸人民币
     date    open   close    high     low percent
260 2019-04-05  6.7167  6.7122  6.7194  6.7033  -0.07%
259 2019-04-08  6.7100  6.7173  6.7278  6.7082   0.08%
258 2019-04-09  6.7172  6.7195  6.7241  6.7127   0.03%
257 2019-04-10  6.7188  6.7187  6.7270  6.7164  -0.01%
..         ...     ...     ...     ...     ...     ...
3   2020-03-31  7.1133  7.0940  7.1177  7.0796  -0.29%
2   2020-04-01  7.0932  7.1230  7.1336  7.0772   0.41%
1   2020-04-02  7.1216  7.0929  7.1422  7.0846  -0.42%
0   2020-04-03  7.0919  7.1108  7.1197  7.0857   0.25%
>>> xa.get_daily("FT-ZGLD:SWX:CHF", start="2020-03-01") # ft.com 基金数据
         date    open   close    high     low
24 2020-03-02  470.10  465.30  472.05  463.75
23 2020-03-03  465.95  477.20  477.85  465.30
22 2020-03-04  477.05  478.00  480.85  475.35
21 2020-03-05  476.75  479.15  481.30  476.75
..         ...     ...     ...     ...     ...
3  2020-03-31  475.70  474.00  475.70  469.80
2  2020-04-01  466.90  468.10  470.80  464.10
1  2020-04-02  468.45  476.75  479.80  467.40
0  2020-04-03  477.80  481.00  483.00  477.55
>>> xa.get_daily("HK00700", prev=5, end="2018-08-08") # 雪球港股数据
          date      open     close      high       low  percent
198 2018-08-03  347.2475  348.8432  353.6300  345.6519     1.39
199 2018-08-06  356.8213  352.0344  356.8213  349.0426     0.91
200 2018-08-07  354.0289  356.0235  357.4196  347.6464     1.13
201 2018-08-08  365.5972  363.0043  365.5972  359.6136     1.96
>>> xa.get_daily("SH000050", prev=10) # 雪球A股指数数据
         date       open    close       high        low  percent
3  2020-03-25  2203.7900  2206.63  2216.0700  2188.3800     2.41
4  2020-03-26  2187.4600  2193.85  2208.5900  2179.9800    -0.58
5  2020-03-27  2219.5900  2203.25  2232.4400  2202.3000     0.43
6  2020-03-30  2172.8685  2188.88  2196.6724  2168.4372    -0.65
7  2020-03-31  2207.6900  2176.42  2208.7200  2173.4300    -0.57
8  2020-04-01  2170.1100  2171.34  2203.6400  2168.4400    -0.23
9  2020-04-02  2160.1300  2204.57  2204.5700  2159.0300     1.53
10 2020-04-03  2197.7113  2195.55  2210.2124  2188.8462    -0.41
>>> xa.get_bar("LK", interval=3600, prev=12) # 雪球美股小时线数据
                  date    open  high   low   close    volume  turnoverrate  percent
0  2020-04-03 00:30:00  7.3001  7.60  6.71  7.0497  30253047         12.58    -3.23
1  2020-04-03 01:30:00  7.0500  7.20  6.51  6.5450  17016394          7.09    -7.16
2  2020-04-03 02:30:00  6.5499  6.83  6.06  6.3700  16905661          7.03    -2.67
3  2020-04-03 03:30:00  6.3900  6.78  6.04  6.2750  13580987          5.65    -1.49
4  2020-04-03 04:00:00  6.2701  6.50  6.15  6.4000  14765141          6.08     1.99
5  2020-04-03 22:30:00  7.0500  7.35  6.10  6.2400  38361837         15.24    -2.50
6  2020-04-03 23:30:00  6.2388  6.24  5.42  5.5844  20746500          8.23   -10.51
7  2020-04-04 00:30:00  5.5898  5.75  5.52  5.7200   9299638          3.70     2.43
8  2020-04-04 01:30:00  5.7200  5.93  5.55  5.6150   6926332          2.75    -1.84
9  2020-04-04 02:30:00  5.6200  5.72  5.52  5.6250   4374535          1.74     0.18
10 2020-04-04 03:30:00  5.6300  5.84  5.54  5.6550   5066923          2.01     0.53
11 2020-04-04 04:00:00  5.6599  5.69  5.28  5.3800  10524216          4.15    -4.86
>>> xa.get_bar("commodities/brent-oil", interval=60) # 英为油价分钟线
                  date  close
0  2020-04-04 04:36:00  34.87
1  2020-04-04 04:37:00  34.87
2  2020-04-04 04:38:00  34.92
3  2020-04-04 04:39:00  34.93
4  2020-04-04 04:40:00  34.95
5  2020-04-04 04:41:00  34.98
6  2020-04-04 04:42:00  34.96
7  2020-04-04 04:43:00  34.96
8  2020-04-04 04:44:00  34.93
9  2020-04-04 04:45:00  34.96
10 2020-04-04 04:46:00  34.98
11 2020-04-04 04:47:00  34.91
12 2020-04-04 04:48:00  34.95
13 2020-04-04 04:49:00  34.94
14 2020-04-04 04:50:00  34.98
15 2020-04-04 04:51:00  34.95
16 2020-04-04 04:52:00  34.87
17 2020-04-04 04:53:00  34.83
18 2020-04-04 04:54:00  34.78
19 2020-04-04 04:55:00  34.84
20 2020-04-04 04:56:00  34.80
21 2020-04-04 04:57:00  34.77
22 2020-04-04 04:58:00  34.83
23 2020-04-04 04:59:00  34.83
>>> xa.get_rt("SH501018") # 实时行情数据
{'name': '南方原油LOF', 'current': 0.826, 'percent': -0.48, 'current_ext': None, 'currency': 'CNY', 'market': 'CN'}
>>> xa.get_rt("indices/germany-30") # 海外指数实时数据
{'name': '德国DAX30指数 (GDAXI)', 'current': 9525.77, 'current_ext': None, 'currency': 'EUR', 'percent': -0.47, 'market': 'DE'}

更有趣的是,任何 get_daily 获取的标的,都可以套壳成上边的 info 类,从而进行模拟交易和组合分析,而不管其底层是原油,汇率甚至是 AH 比价。

>>> oil = xa.vinfo("commodities/brent-oil", start="20180101")
>>> oil.info()
fund name: 伦敦布伦特原油期货 - 2020年6月 (LCOM0)
fund code: commodities/brent-oil
fund purchase fee: 0%
# 如上的 oil info 对象也可以进行 trade 交易和 mul 组合分析
>>> oil.max_drawdown()
(Timestamp('2018-10-03 00:00:00'), Timestamp('2020-03-31 00:00:00'), -0.736470042878665)

功能综述

鉴于此页仅涵盖了非常小一部分功能的展示,除了参考其他部分学习外,这里整理出了该模块的基本功能。

  1. 全部基金(包括货币基金)的信息获取:指定一个代码,你就能了解的基金名称,历史单位净值,历史分红送转情况,基金的折扣申购费,基金的不同持仓时长的赎回费等多样的信息。

  2. 全部 A 股指数的信息获取:同样是一个代码,获取指数名称和每日净值。

  3. 所有基金指数数据支持增量更新,csv 文件和数据库 io 的无缝支持

  4. 可以对多只基金和指数同时进行量化分析,给出走势分布和相关性分析。

  5. 虚拟可调的货币基金类型:除了前述的真实货币基金类外,还可以建立虚拟的货币基金类,来模拟理财等的行为,或单纯作为量化的基准,可以实现更灵活的仓位管理。

  6. 只需最简的账单外加一个代码就可以精确模拟一只基金用户的全部交易行为,并可以输出各种量化数据和可视化。

  7. 大量基于回测的量化数据和基于趋势交易的技术面指标工具箱。

  8. 只需一个最简的账单,就可实现多基金投资系统的投资精确模拟,同时提供总金额固定和总金额变动两个选项,可以显示全部基金投资的总结表和多样的持仓与交易量化,包括折线图,河流图,饼图,柱形图等。所有可视化均为可交互的 web 级可视化方案。

  9. 可以非常简便的制定各种基于日期和点数的定投策略,包括变额定投和复杂的网格策略均可以一行完成,并进行详细的回测分析与可视化展示。

  10. 可以基于净值或各种技术指标的交叉,点位设计复杂的交易策略,并回测效果进行定量分析。

  11. 可以根据自定义的策略,建立邮件按时提醒脚本,从此实现按计划买入和对市场的实时监控,尤其适合复杂网格策略的执行,不需要自己再去看盘和计算执行条件和金额。

  12. 使用通用的金融数据日线 API,轻松获取不同数据进行交叉分析, 数据包括但不限于 A 股市场,港股市场和美股市场的指数,基金,股票等标的,A 股的债券和可转债,所有 investing.com, bloomberg.com, spindices.com 上的标的数据,人民币中间价数据,场内基金份额数据。

  13. 获取实时的各地市场股票,基金数据,包括计价货币和实时盘外价格。

  14. 基于指数权重和企业财报,得到的最靠谱的 A 股各指数历史估值情况和实时估值位置总结。

  15. 获取宏观经济数据和计算相应指数的总净资产与总盈利。

  16. QDII 基金的 T-1 日净值预测和 T 日净值实时预测的基础设施。

  17. 获取雪球和英为支持标的的,不同频率的近期分时数据。