飞道的博客

量化交易 实战之金融时间序列分析 Part 1

249人阅读  评论(0)

概述

时间序列分析 (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

获取股票数据

需求

  • 沪深300 (选10只)
  • 分析区间 2019-01-01 到 2021-01-01
  • 以时间为索引
  • 绘制各个指标的走势情况

函数

index_components - 获取指数成分股列表

获取每一指数的股票构成列表, 也支持指数的历史构成查询。

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

get_price - 合约历史数据

获取指定合约或合约列表的历史行情(包含起止日期,日线或分钟线),不能在’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  


统计分析

需求

  1. 数据中各项指标统计结果 (保留两位小数)
  2. 使用 aggregate 方法将多种统计指标汇总

函数

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 

序列变化情况计算

需求

  1. 计算每一天各项指标的差异值(后一天减去前一天结果)
  2. 计算pct_change:增长率也就是 (后一个值-前一个值)/前一个值)
  3. 计算平均计算pct_change指标
  4. 绘图观察哪个指标平均增长率最高
  5. 计算连续时间的增长率(其中需要计算今天价格和昨天价格的差异)
  6. 看看各个指标最初的1块钱相当于现在的多少

函数

pd.pct_change()

表示当前元素与先前元素的相差百分比. 指定 periods=n, 表示当前元素与先前 n 个元素的相差百分比.

DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)

pd.shift()

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  



转载:https://blog.csdn.net/weixin_46274168/article/details/115558690
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场