时间序列分析 (time series analysis) 是量化投资中的一门基本技术. 时间序列是指在一定时间内按时间顺序测量的某个变量的取值序列. 时间序列分析就是使用统计的手段对这个序列的过去进行分析. 以此对该变量的变化特征性建模, 并对未来进行预测.
我们将继续使用 RiceQuant 的投资研究平台进行分析.
网址:https://www.ricequant.com/quant/notebook
具体的平台介绍可以参考: https://iamarookie.blog.csdn.net/article/details/114958524
没有看过的同学可以自行翻一下专栏别的文章:
https://blog.csdn.net/weixin_46274168/category_10961128.html
获取每一指数的股票构成列表, 也支持指数的历史构成查询。
index_components(order_book_id, date=None, start_date, end_date, market='cn')
参数:
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 指数代码,传入 order_book_id,例如’000001.XSHG’。 |
date | str, datetime.date, datetime.datetime, pandas Timestamp | 查询日期,默认为最新记录日期 |
start_date | str, datetime.date, datetime.datetime, pandas Timestamp | 指定开始日期,不能和 date 同时指定 |
end_date | str, datetime.date, datetime.datetime, pandas Timestamp | 指定结束日期, 需和 start_date 同时指定并且应当不小于开始日期 |
market | str | 默认是中国市场(‘cn’),目前仅支持中国市场 |
返回:
构成该指数股票的 order_book_id list
获取指定合约或合约列表的历史行情(包含起止日期,日线或分钟线),不能在’handle_bar’函数中进行调用。
get_price(order_book_ids, start_date, end_date=None, frequency='1d', fields=None, adjust_type='pre', skip_suspended=False,expect_df=False)
参数:
参数 | 类型 | 说明 |
---|---|---|
order_book_ids | str OR str list | 合约代码,合约代码,可传入 order_book_id, order_book_id list |
start_date | str, datetime.date, datetime.datetime, pandasTimestamp | 开始日期,用户必须指定 |
end_date | str, datetime.date, datetime.datetime, pandasTimestamp | 结束日期,默认为策略当前日期前一天 |
frequency | str | 历史数据的频率。 现在支持日/分钟级别的历史数据,默认为’1d’。使用者可自由选取不同频率,例如’5m’代表 5 分钟线 |
fields | str OR str list | 返回字段名称 |
adjust_type | str | 权息修复方案。前复权 - pre,后复权 - post,不复权 - none。 |
skip_suspended | bool | 是否跳过停牌数据。默认为 False,不跳过,用停牌前数据进行补齐。True 则为跳过停牌期。注意,当设置为 True 时,函数 order_book_id 只支持单个合约传入 |
expect_df | bool | 默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe |
# 定义分析时间段
start_date = "2019-01-01" # 开始日期
end_date = "2021-01-01" # 结束日期
# 获取沪深300股票
stock_list = index_components("000300.XSHG")
# 取前10个
stock_list = stock_list[:10] # 切片
print(stock_list) # 调试输出
# 获取价格数据 (收盘价)
data = get_price(stock_list, start_date=start_date, end_date=end_date,fields="close")
print(data.head()) # 调试输出
# 绘制各个指标的走势情况
data.plot(figsize=(10, 12), subplots=True) # 子图
data.plot(figsize=(16, 12))
输出结果:
data.plot(figsize=(16, 12))
['601390.XSHG', '002958.XSHE', '300142.XSHE', '601788.XSHG', '600999.XSHG', '002179.XSHE', '002508.XSHE', '600031.XSHG', '002032.XSHE', '002456.XSHE']
002179.XSHE 601390.XSHG 002508.XSHE 601788.XSHG 600031.XSHG \
date
2019-01-02 25.9121 6.5340 19.0277 8.6610 7.7510
2019-01-03 26.2175 6.5815 18.9417 8.8392 7.6355
2019-01-04 26.3474 6.6671 19.4771 9.6410 7.7703
2019-01-07 27.3860 6.6956 19.6684 9.5915 7.8377
2019-01-08 27.4013 6.7052 19.7066 9.5816 7.7991
600999.XSHG 002958.XSHE 002032.XSHE 300142.XSHE 002456.XSHE
date
2019-01-02 10.7152 NaN 50.1480 18.4021 9.1656
2019-01-03 10.8199 NaN 46.3313 17.8929 8.6963
2019-01-04 11.5364 NaN 48.2589 18.0527 8.8960
2019-01-07 11.3914 NaN 49.2035 18.6118 9.0158
2019-01-08 11.2787 NaN 49.1553 18.5819 9.0857
aggregate:使用指定 axis 上的一个或多个操作聚合.
DataFrame.aggregate(func, axis=0, *args, **kwargs)
print(data.info())
print(data.describe().round(2))
# 调试输出平均数
print(data.mean())
# 汇总
print(data.aggregate([min, max, np.mean, np.std, np.median]))
输出结果:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 487 entries, 2019-01-02 to 2020-12-31
Data columns (total 10 columns):
002179.XSHE 487 non-null float64
601390.XSHG 487 non-null float64
002508.XSHE 487 non-null float64
601788.XSHG 487 non-null float64
600031.XSHG 487 non-null float64
600999.XSHG 487 non-null float64
002958.XSHE 433 non-null float64
002032.XSHE 487 non-null float64
300142.XSHE 487 non-null float64
002456.XSHE 487 non-null float64
dtypes: float64(10)
memory usage: 41.9 KB
None
002179.XSHE 601390.XSHG 002508.XSHE 601788.XSHG 600031.XSHG \
count 487.00 487.00 487.00 487.00 487.00
mean 39.81 5.82 30.88 14.13 17.15
std 9.31 0.56 5.64 4.64 6.00
min 25.91 4.85 18.94 8.66 7.64
25% 33.68 5.43 26.29 11.11 12.71
50% 38.27 5.67 30.68 11.71 15.61
75% 42.85 6.16 33.98 17.40 20.17
max 78.29 7.27 43.99 29.99 34.98
600999.XSHG 002958.XSHE 002032.XSHE 300142.XSHE 002456.XSHE
count 487.00 433.00 487.00 487.00 487.00
mean 15.81 5.83 70.01 35.89 13.81
std 3.56 1.15 7.57 14.24 3.54
min 10.72 3.97 46.33 17.89 7.59
25% 13.52 5.14 66.64 27.18 11.15
50% 14.30 5.69 70.66 30.14 14.44
75% 19.94 6.26 74.21 43.49 16.06
max 24.42 9.91 85.70 91.76 23.32
002179.XSHE 39.805091
601390.XSHG 5.823683
002508.XSHE 30.882818
601788.XSHG 14.125659
600031.XSHG 17.147733
600999.XSHG 15.812086
002958.XSHE 5.828605
002032.XSHE 70.010184
300142.XSHE 35.894527
002456.XSHE 13.811878
dtype: float64
002179.XSHE 601390.XSHG 002508.XSHE 601788.XSHG 600031.XSHG \
min 25.912100 4.852000 18.941700 8.661000 7.635500
max 78.290000 7.266300 43.990000 29.987300 34.980000
mean 39.805091 5.823683 30.882818 14.125659 17.147733
std 9.306263 0.561201 5.644749 4.639231 6.002176
median 38.274500 5.667200 30.682500 11.713300 15.610100
600999.XSHG 002958.XSHE 002032.XSHE 300142.XSHE 002456.XSHE
min 10.715200 3.965400 46.331300 17.892900 7.588100
max 24.422700 9.909100 85.700000 91.764200 23.318700
mean 15.812086 5.828605 70.010184 35.894527 13.811878
std 3.556864 1.147390 7.565533 14.236502 3.538181
median 14.301800 5.690000 70.660000 30.138200 14.440000
表示当前元素与先前元素的相差百分比. 指定 periods=n, 表示当前元素与先前 n 个元素的相差百分比.
DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)
pd.shift() : 列进行平移变换 (shift).
DataFrame.shift(periods=1, freq=None, axis=0)
# 1. 计算每一天的差异值 (后一天减去前一天结果)
print(data.diff().head())
# 2. 计算增长率
pct_change = data.pct_change()
print(pct_change.head().round(2))
# 3. 计算平均增长率
pct_change_mean = data.diff().mean()
print(pct_change_mean)
# 4. 绘图观察哪个指标平均增长率最高
data.pct_change().mean().plot(kind='bar',figsize=(10,6))
# 往后挪一位
data.shift(1).head()
# 5. 计算连续时间增长率
rets = np.log(data/data.shift(1))
print(rets.head().round(2))
# 6. 看看各个指标最初的1块钱相当于现在的多少
rets.cumsum().apply(np.exp).plot(figsize = (16, 12))
输出结果:
002179.XSHE 601390.XSHG 002508.XSHE 601788.XSHG 600031.XSHG \
date
2019-01-02 NaN NaN NaN NaN NaN
2019-01-03 0.3054 0.0475 -0.0860 0.1782 -0.1155
2019-01-04 0.1299 0.0856 0.5354 0.8018 0.1348
2019-01-07 1.0386 0.0285 0.1913 -0.0495 0.0674
2019-01-08 0.0153 0.0096 0.0382 -0.0099 -0.0386
600999.XSHG 002958.XSHE 002032.XSHE 300142.XSHE 002456.XSHE
date
2019-01-02 NaN NaN NaN NaN NaN
2019-01-03 0.1047 NaN -3.8167 -0.5092 -0.4693
2019-01-04 0.7165 NaN 1.9276 0.1598 0.1997
2019-01-07 -0.1450 NaN 0.9446 0.5591 0.1198
2019-01-08 -0.1127 NaN -0.0482 -0.0299 0.0699
002179.XSHE 601390.XSHG 002508.XSHE 601788.XSHG 600031.XSHG \
date
2019-01-02 NaN NaN NaN NaN NaN
2019-01-03 0.01 0.01 -0.00 0.02 -0.01
2019-01-04 0.00 0.01 0.03 0.09 0.02
2019-01-07 0.04 0.00 0.01 -0.01 0.01
2019-01-08 0.00 0.00 0.00 -0.00 -0.00
600999.XSHG 002958.XSHE 002032.XSHE 300142.XSHE 002456.XSHE
date
2019-01-02 NaN NaN NaN NaN NaN
2019-01-03 0.01 NaN -0.08 -0.03 -0.05
2019-01-04 0.07 NaN 0.04 0.01 0.02
2019-01-07 -0.01 NaN 0.02 0.03 0.01
2019-01-08 -0.01 NaN -0.00 -0.00 0.01
002179.XSHE 0.107773
601390.XSHG -0.002601
002508.XSHE 0.044758
601788.XSHG 0.020286
600031.XSHG 0.056027
600999.XSHG 0.025977
002958.XSHE -0.000729
002032.XSHE 0.057288
300142.XSHE 0.041477
002456.XSHE 0.008260
dtype: float64
002179.XSHE 601390.XSHG 002508.XSHE 601788.XSHG 600031.XSHG \
date
2019-01-02 NaN NaN NaN NaN NaN
2019-01-03 0.01 0.01 -0.00 0.02 -0.02
2019-01-04 0.00 0.01 0.03 0.09 0.02
2019-01-07 0.04 0.00 0.01 -0.01 0.01
2019-01-08 0.00 0.00 0.00 -0.00 -0.00
600999.XSHG 002958.XSHE 002032.XSHE 300142.XSHE 002456.XSHE
date
2019-01-02 NaN NaN NaN NaN NaN
2019-01-03 0.01 NaN -0.08 -0.03 -0.05
2019-01-04 0.06 NaN 0.04 0.01 0.02
2019-01-07 -0.01 NaN 0.02 0.03 0.01
2019-01-08 -0.01 NaN -0.00 -0.00 0.01
基于Node.js平台的Express教程 Express 简介 什么是 Express Express 能做什么 E...
下面是ajax代码和Controller层代码,期初以为是后台程序写错了。 $("#sourcefile...
Zypper是SuSE Linux中用于安装,更新,删除软件,管理存储库,执行各种查询操作...
本文实例总结了jsp和servlet中实现页面跳转的方式。分享给大家供大家参考,具体...
** 1、最小化安装 ** (1)打开VMware (2)文件 - - - 新建虚拟机 (3)直接点击下一...
1、首先去官网下载FCKeditor2.6.5 多国语言版。http://ckeditor.com/download,...
《核工程 数字化仪控 核安全核动力》 EnzoReventon 核电站数字化仪控系统与传统...
//js正则实现用户输入银行卡号的控制及格式化 script language="javascript" typ...
近期知晓云的版本更新通知频率低于去年,但我们的产品经理和工程师一直在努力地...
XML/HTML Code 复制内容到剪贴板 div class = centent style = width:200px;floa...