当前位置:主页 > 查看内容

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

发布时间:2021-06-15 00:00| 位朋友查看

简介:实战之金融时间序列分析 Part 2 黄金交叉 时间序列重采样 需求 resample 函数 代码 时间窗口 需求 rolling 函数 代码 股票序列分析策略 需求 代码 回归分析 需求 代码 构建回归方程 需求 代码 相关系数 需求 代码 黄金交叉 “黄金交叉” (Golden Cross)就是……

黄金交叉

“黄金交叉” (Golden Cross),就是指上升中的短期移动平均线由下而上穿过上升的长期移动平均线的交叉,这个时候压力线被向上突破,表示股价将继续上涨,行情看好。均线黄金交叉指股价向上突破压力。一般实线表示长期移动平均线,虚线表示短期移动平均线,短期移动平均线和长期移动平均线形成两个交点。
在这里插入图片描述

时间序列重采样

需求

  1. 以星期为单位重构时间序列
  2. 不同指定标签的含义

resample 函数

Pandas 中的 resample (重新采样) 是对原样本重新处理的一个方法.是一个对常规时间序列数据重新采样和频率转换的便捷的方法. 在DataFrame 的时间分布式有时候是不均匀的. 然而当我们在做金融时间序列分析时是需要时间均匀间隔的数据的.

格式:

DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind=None, loffset=None, limit=None, base=0)

代码

# 频率为1周, 取最后的值
data.resample("1w").last().head() 

输出结果:
在这里插入图片描述

时间窗口

需求

  1. 以 20 为长度制作窗口序列
  2. 统计窗口各个常用指标结果

rolling 函数

格式:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
参数内容
window表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是 offset 类型,表示时间窗的大小。
min_periods每个窗口最少包含的观测值数量,小于这个值的窗口结果为 NA。值可以是int,默认None。offset情况下,默认为1。
center把窗口的标签设置为居中。布尔型,默认 False,居右。
win_type窗口的类型。截取窗的各种函数。字符串类型,默认为 None。
axisint、字符串,默认为0,即对列进行计算
closed定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。

代码

# 去除na
data_new = data.copy().dropna()

# 用第一只股票
stock =  stock_list[0]

# 窗口为20天
windows = 20

data_new['min'] = data_new[stock].rolling(window=windows).min()  # 最小值
data_new['max'] = data_new[stock].rolling(window=windows).max()  # 最大值
data_new['mean'] = data_new[stock].rolling(window=windows).mean()  # 平均值
data_new['std'] = data_new[stock].rolling(window=windows).std()  # 标准差

# 调试输出
print(data_new.tail())

输出结果:

            601766.XSHG  601155.XSHG  600482.XSHG  002456.XSHE  600763.XSHG  \
date                                                                          
2020-12-25         5.37        33.94        17.55        13.83       269.08   
2020-12-28         5.32        33.81        17.48        13.05       269.13   
2020-12-29         5.32        34.31        17.28        13.10       274.20   
2020-12-30         5.27        33.80        17.43        12.83       275.16   
2020-12-31         5.31        34.83        17.92        13.18       276.52   

            002460.XSHE  601877.XSHG  601988.XSHG  601390.XSHG  300408.XSHE  \
date                                                                          
2020-12-25       108.88        38.53         3.18         5.30        35.99   
2020-12-28       107.01        37.50         3.17         5.21        36.10   
2020-12-29        96.31        36.97         3.17         5.22        35.88   
2020-12-30       101.00        36.92         3.17         5.22        37.05   
2020-12-31       101.20        39.16         3.18         5.27        37.25   

             min   max    mean       std  
date                                      
2020-12-25  5.29  5.78  5.4880  0.142075  
2020-12-28  5.21  5.78  5.4660  0.149540  
2020-12-29  5.21  5.78  5.4425  0.149416  
2020-12-30  5.21  5.71  5.4145  0.134574  
2020-12-31  5.21  5.65  5.3925  0.118760  

股票序列分析策略

需求

  1. 短期平均计算
  2. 长期平均计算
  3. 黄金交叉与死亡交叉绘图展示

代码

# 这里我们以洋河股份和伊利股份为例
data = get_price(["600887.XSHG"], start_date=start_date, end_date=end_date,fields="close", expect_df=True)
print(data.head())

# 短期平均 (7天)
data["7_day_moving_average"] = data["close"].rolling(window=7).mean()

# 长期平均 (50天)
data["50_day_moving_average"] = data["close"].rolling(window=50).mean()

# 调试输出
print(data.tail().round(2))

# 画图
data[60:].plot(figsize=(16,12))

# 标记黄金交叉和死亡交叉位置
data["positions"] = np.where(data["7_day_moving_average"] > data["50_day_moving_average"], 1, -1)

# 画图
data[60:].plot(figsize=(16,12), secondary_y="positions")

输出结果:

                            close
order_book_id date               
600887.XSHG   2019-01-02  21.3696
              2019-01-03  21.1985
              2019-01-04  21.4076
              2019-01-07  21.6453
              2019-01-08  21.4837
                          close  7_day_moving_average  50_day_moving_average
order_book_id date                                                          
600887.XSHG   2020-12-25  40.00                 40.94                  39.83
              2020-12-28  41.89                 41.02                  39.86
              2020-12-29  41.87                 41.19                  39.87
              2020-12-30  43.96                 41.54                  39.91
              2020-12-31  44.37                 42.02                  39.96

在这里插入图片描述
在这里插入图片描述

回归分析

需求

  1. 洋河和伊利之间的关系
  2. 绘图展示他们之间的变化情况
  3. 回归与相关系数计算
  4. 随着年份的变化,计算相关系数的变化情况,并展示

代码

# 取出数据
data = get_price(["600887.XSHG","600597.XSHG"], start_date=start_date, end_date=end_date,fields="close")
print(data.head())


# 画图 (子图)
data.plot(subplots=True)

# 画图 (合并)
data.plot(secondary_y="002304.XSHE")

# 获得连续增长率
rets = np.log(data/data.shift(1))

# 调试输出
rets.head()

pd.plotting.scatter_matrix(rets,
                           alpha = 0.2,
                           diagonal='hist',
                           hist_kwds={'bins':50},
                           figsize=(10,6)
)

pd.plotting.scatter_matrix(rets,
                           alpha = 0.2,
                           diagonal='kde',
                           figsize=(10,6)
)

输出结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构建回归方程

需求

  1. 去除空置
  2. 构建回归 (seaborn)

代码

import seaborn as sns

# 去除空值
rets.dropna(inplace=True)

# 画图
sns.regplot(x= "600887.XSHG", y= "600597.XSHG", data=rets) 

输出结果:
在这里插入图片描述

相关系数

需求

  1. 分析区间 2019-01-01 到 2021-01-01
  2. 计算伊利股份和蒙牛股份在分析区间内的相关性

代码

# 30天平均值 
YILI = rets["600887.XSHG"].rolling(window=30)  # 伊利
MENGNIU = rets["600597.XSHG"].rolling(window=30)  # 蒙牛

# 画出相关性图
YILI.corr(MENGNIU).plot(figsize=(10,6))

输出结果:
在这里插入图片描述

;原文链接:https://blog.csdn.net/weixin_46274168/article/details/115564315
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐