黄金交叉
“黄金交叉” (Golden Cross),就是指上升中的短期移动平均线由下而上穿过上升的长期移动平均线的交叉,这个时候压力线被向上突破,表示股价将继续上涨,行情看好。均线黄金交叉指股价向上突破压力。一般实线表示长期移动平均线,虚线表示短期移动平均线,短期移动平均线和长期移动平均线形成两个交点。
时间序列重采样
需求
- 以星期为单位重构时间序列
- 不同指定标签的含义
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()
输出结果:
时间窗口
需求
- 以 20 为长度制作窗口序列
- 统计窗口各个常用指标结果
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。 |
axis | int、字符串,默认为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
股票序列分析策略
需求
- 短期平均计算
- 长期平均计算
- 黄金交叉与死亡交叉绘图展示
代码
# 这里我们以洋河股份和伊利股份为例
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
回归分析
需求
- 洋河和伊利之间的关系
- 绘图展示他们之间的变化情况
- 回归与相关系数计算
- 随着年份的变化,计算相关系数的变化情况,并展示
代码
# 取出数据
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)
)
输出结果:
构建回归方程
需求
- 去除空置
- 构建回归 (seaborn)
代码
import seaborn as sns
# 去除空值
rets.dropna(inplace=True)
# 画图
sns.regplot(x= "600887.XSHG", y= "600597.XSHG", data=rets)
输出结果:
相关系数
需求
- 分析区间 2019-01-01 到 2021-01-01
- 计算伊利股份和蒙牛股份在分析区间内的相关性
代码
# 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
查看评论