#!/usr/bin/env python # coding: utf-8 # 在该 notebook,我们将介绍 xalpha 2020 引入的全新特性,及使用的典型范式,以期用户对 xalpha 的基本工作流有一个大致而全新的认识 # ## 基本设定 # In[1]: import xalpha as xa # 我们总是推荐用 xa.meth 的方式来调用 xalpha 中的函数, # import xalpha from meth 强烈不建议使用,可能导致部分运行时动态调整功能和设定失效 # In[2]: xa.set_backend(backend="csv", path="../../../lof/data", precached="20170101") # 通过上述命令,我们设定了 xalpha 的全局本地缓存,可以将利用到的金融数据日线全部缓存到本地文件夹 path 中,并以 csv 文件的形式存在。 # 该缓存也支持数据库后端,backend="sql". # 同时 precached 命令告诉缓存引擎,无论抓取的数据需要多少,都至少先将 20170101 至今的数据爬取并缓存到本地。 # In[3]: import logging logger = logging.getLogger("xalpha") logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) logger.addHandler(ch) # 我们接下来设定 xalpha 的日志输出,上述设定表示打印 xalpha 所有 DEBUG 级别以上的日志,同时打印到 jupyter notebook 里, # 这些内容详细记录了网络连接等 debug 信息。 # ## 使用日线和实时获取器 # In[16]: # 我们可以通过 get_daily 来获取几乎一切内容的日线信息 # 下边并未有 log,显示我们的缓存后端本来就有该文件 xa.get_daily("USD/CNY", start="20190101", end="20190113") # In[15]: # 对与人民币美元中间价的获取,log 显示了更新,和爬取到 20170101 的过程 xa.get_daily("SGD/CNY", start="20200301") # 对于彭博数据的爬取,可能需要设定网络代理, xalpha 支持 http 和 socks 代理,并可以运行时随时设定随时取消。 # In[14]: xa.set_proxy("socks5://127.0.0.1:1080") # 设置本地 socks 代理 df = xa.get_daily("BB-ZGLD:SW", prev=20) # 抓取数据 xa.set_proxy() # 取消代理 df # In[17]: # 获取英为数据 xa.get_daily("commodities/crude-oil", prev=10) # In[18]: # 获取 FT 数据 xa.get_daily("FTC-WTI+Crude+Oil", prev=10) # In[19]: # 获取标普各种指数数据 xa.get_daily("SP5475707.2", prev=10) # In[20]: # 获取雅虎数据 xa.get_daily("YH-CSGOLD.SW", prev=8) # In[6]: # 获取美股数据 xa.get_daily("LK", prev=5) # In[7]: # 获取 A 股数据 xa.get_daily("SH600000", prev=5) # In[8]: # 获取港股数据 xa.get_daily("HK00700", prev=5) # In[9]: # 获取基金数据 xa.get_daily("F501018", prev=5) # 我们也可以通过 get_rt 获取实时数据,通过 get_bar 获取分钟线小时线等数据,以下是一些例子 # In[3]: xa.get_rt("PDD") # In[4]: xa.get_rt("SH501018") # 请注意第二次请求已经不需要去要雪球 token 了,因为已缓存 # In[7]: xa.get_rt("FT-INX:IOM") # 请注意 FT 的实时数据存在延迟! # In[8]: xa.get_rt("INA-currencies/usd-cnh") # 从 app 源获取英为实时数据 # In[9]: xa.get_rt("SH600000", double_check=True) # 获取 A 股数据,并经过新浪源的双重校验 # In[10]: xa.get_bar("indices/germany-30", interval=3600) # 获取小时线数据 # 下面简单演示对于承载数据的 pd.DataFrame 的简单处理和可视化 # In[13]: df = xa.get_daily("USD/CNY", prev=20) df[df["date"] == "2020-04-02"].iloc[0]["close"] # In[15]: get_ipython().run_line_magic('', 'matplotlib notebook') df.plot(x="date", y="close") # In[18]: df[df["close"] > 7.08] # In[19]: df.sort_values("close") # In[20]: df["close"].pct_change() # ## 使用对比类 # In[21]: c = xa.Compare(("commodities/crude-oil", "USD"), "F501018", "F160216", start="20190101") c.v() # In[22]: c.corr() # 打印关联系数 # ## 使用聚宽数据 # In[ ]: # 使用聚宽数据需要激活数据源,如果之前没有激活的话 user = "jquser" passw = "jqpassw" xa.provider.set_jq_data(user, passw) # In[4]: df = xa.get_daily("mcm-MAC_SALE_RETAIL_MONTH", start="20180301") # 获取宏观数据,商品零售总额 df # In[9]: get_ipython().run_line_magic('matplotlib', 'notebook') df.plot(x="date", y="retail_sin") # In[17]: df = xa.get_daily("mcd-MAC_LEND_RATE", start="2018-01-01") df = df[(df["currency_name"] == "人民币") & (df["market_id"] == 5) & (df["term_id"] == 20)] get_ipython().run_line_magic('matplotlib', 'notebook') df.plot(x="date", y="interest_rate") # In[21]: # 指数成分股和权重 xa.get_daily("iw-SH000050", start="20200331", end="20200405") # In[23]: # 场内基金份额 df = xa.get_daily("fs-SZ161129", start="20200201") df.plot(x="date", y="shares") # 根据实际权重的指数估值分析 # In[25]: h = xa.PEBHistory("SH000050", start="2013-01-01") # In[26]: h.summary() # In[27]: h.v("pb") # In[28]: # 指数成份股总盈利和总净资产 df = xa.get_daily("teb-SH000050", start="20180101") # In[29]: df.plot(x="date", y="e") # In[30]: df.plot(x="date", y="b") # In[31]: df["roe"] = df["e"] / df["b"] df.plot(x="date", y="roe") # ## 预测 QDII 净值 # In[32]: p = xa.QDIIPredict("SH501018") # In[33]: p.get_t1() # ## 一些更炫酷的可视化 # In[5]: df = xa.get_daily("LK") # In[5]: xa.set_display("notebook") df # In[6]: df.v_kline() # In[ ]: