======== 快速开始 ======== xalpha 可以用来对场外基金和指数进行方便的追踪和研究, 同时可以实现投资情况的汇总管理与数据分析,并且支持一些简单的基金购买策略回测。 本文仅简述最基本的模块使用的一小部分,关于更多的函数和用法尤其是可视化的部分,请参考具体示例 :ref:`demo`。 关于数据结构和内部的模块设计,请参考高级用法 :ref:`advance`。 基金和指数的信息 ---------------- 使用 :class:`xalpha.info.fundinfo` 来获取场外基金的基本信息和历史每日净值情况。 其中净值以 :class:`pandas.DataFrame` 的格式存储。 .. note:: 基金信息只支持按净值法结算的场外基金,也即货币基金不被支持。货币基金需额外使用 :class:`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 使用 :class:`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 栏则是真实的指数值。 单一标的交易处理 ----------------- 使用 :class:`xalpha.trade.trade` 来处理交易情况。 为了生成交易,需要提供标的类 :class:`xalpha.info` 和交易账单 status table。 账单的具体的数据结构请参考高级用法 :ref:`advance`。 代码示例:: >>> 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 基金投资组合的管理分析 ---------------------- 使用 :class:`xalpha.multiple.mul` 可以将多个基金交易类归总,或者根据 status 表格上记录的基金代码自动汇总。 如果选择 :class:`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 模块,使用 :class:`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 元。 交易策略的监视和定时提醒 -------------------------- 使用 :class:`xalpha.realtime.review` 可以实现策略的监测和邮件的发送,具体使用可以查看 `示例 `_ 通用日线和实时数据获取器 ------------------------- 使用 :func:`xalpha.universal.get_daily`,给定一个代码,直接返回日线数据的 DataFrame。覆盖范围包括沪深市场的股票,基金,ETF,LOF,可转债 债券;香港市场的股票,指数;美国市场的股票,指数,ETF;人民币兑外币的中间价数据;和其他在 investing.com 上可以访问的金融产品的日线数据。 以及可以从标普,ft 和彭博网站找到的标的数据。及以聚宽为数据源的指数估值数据,基金份额数据,指数总盈利总资产数据和宏观经济数据。 使用 :func:`xalpha.universal.get_rt`,给定一个代码,直接返回实时数据 json。覆盖范围包括沪深市场的股票,场内基金,ETF,LOF,可转债 债券;香港市场的股票,指数;美国市场的股票,指数,ETF;和其他在 investing.com 上可以访问的金融产品的日线数据。 使用 :func:`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. 获取雪球和英为支持标的的,不同频率的近期分时数据。