机器学习

07 隐马尔可夫模型 - 案例三 - 股票数据维度信息提取

2018-12-19  本文已影响120人  白尔摩斯

06 隐马尔可夫模型 - 案例二 - GMHMM应用

股票数据维度信息提取案例 - 数据格式

SH600000.txt

常规操作

import numpy as np
from hmmlearn import hmm
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn.metrics.pairwise import pairwise_distances_argmin
import warnings

warnings.filterwarnings("ignore")   # hmmlearn(0.2.0) < sklearn(0.18)

def expand(a, b):
    d = (b - a) * 0.05
    return a-d, b+d

1、 加载数据

0日期 1开盘 2最高 3最低 4收盘 5成交量 6成交额
delimiter: 指定分隔符
skiprows:给定前面多少行数据不进行处理
usecols: 给定第4 5 6 2 3这五列数据进行读入(下标从0开始)

x = np.loadtxt('SH600000.txt', delimiter='\t', skiprows=2, usecols=(4, 5, 6, 2, 3))
close_price = x[:, 0] # 收盘价
volumn = x[:, 1] # 成交量
amount = x[:, 2] # 成交额
amplitude_price = x[:, 3] - x[:, 4] # 每天的最高价与最低价的差
diff_price = np.diff(close_price)   # 涨跌值(每天相对于昨天的涨跌幅)
volumn = volumn[1:]                 # 成交量(今天的成交量)
amount = amount[1:]                 # 成交额(今天的成交额度)
amplitude_price = amplitude_price[1:]   # 每日振幅(今天的振幅)
sample = np.column_stack((diff_price, volumn, amount, amplitude_price))    # 观测值
print("样本量:%d, 特征数目:%d" % sample.shape)
sample

2 模型构建

## 给定隐特征的数目
n = 5
model = hmm.GaussianHMM(n_components=n, covariance_type='full')
model.fit(sample)
y = model.predict_proba(sample) # 获取预测的概率
print(y)
print(model.predict(sample)) # 获取预测状态值

3、画图

t = np.arange(len(diff_price))
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,8), facecolor='w')
plt.subplot(431)
plt.plot(t, diff_price, 'r-')
plt.grid(True)
plt.title(u'涨跌幅')
plt.subplot(432)
plt.plot(t, volumn, 'g-')
plt.grid(True)
plt.title(u'交易量')

# 产生一个颜色
clrs = plt.cm.terrain(np.linspace(0, 0.8, n))
plt.subplot(433)
for i, clr in enumerate(clrs):
    # 画到一张图中
    plt.plot(t, y[:, i], '-', color=clr, alpha=0.7)
plt.title(u'所有组分')
plt.grid(True)

# 分开画
for i, clr in enumerate(clrs):
    plt.subplot(4, 3, i+4)
    plt.plot(t, y[:, i], '-', color=clr)
    plt.title(u'组分%d' % (i+1))
    plt.grid(True)
plt.suptitle(u'SH600000股票:GaussianHMM分解隐变量', fontsize=18)
plt.tight_layout()
plt.subplots_adjust(top=0.9)
plt.show()

展望:

我们假定了内部具有5个我们无法知道的隐含状态的影响;我们观测到的就是股票在今天相当于昨天是涨了还是迭了;

可以深入探讨以下问题:如果现在假定观测到的今天的股票相对于昨天是"涨",那么明天相对于今天是涨的概率是多大,以及明天相对于今天是跌的概率是多少?

PS: 这个案例是在假定了股票的涨跌只和前一天的相关指标有关,和前几天的无关。

上一篇下一篇

猜你喜欢

热点阅读