基于python的马尔科夫链在股价预测中的应用(基于Tushare)

TushareID:503535

文章目录

  • 前言
  • 一、马尔科夫链是什么
  • 二、代码如下
  • 三、马尔科夫预测模型在股价预测中的应用
    • 1.数据来源及状态划分
    • 2.状态转移概率矩阵 P 及初始状态概率向量
    • 图片
    • 3.模型预测


前言

股市具有着为上市融资,解决企业融资难问题,同时具有价值发现的功能。此时合理地进行股市预测成为一个很有价值的问题。本文通过对应用随机过程的Markov链的学习和研究,利用Markov链建立疫情期间股市预测的模型,根据上证指数从2021年1月到2022年4月的收盘价月度数据,预测2022年5月-7月份的上证指数月度数据。


一、马尔科夫链是什么

马尔科夫预测模型是马尔科夫链在预测领域的一种应用。马尔科夫链是描述一类随机动态系统的模型。它具有无后效性,未来状态仅与现在状态及其转移概率有关。利用马尔科夫链进行预测就是根据系统变量的现在状态及其变化趋势,预测其在未来某一特定时间可能出现的状态,从而为决策提供依据。
设某系统在时刻t=n有k个可能状态,即Xn=1,2,3,…,k(n=0,1,…),ai(n)表示系统在时刻t=n处于状态i的状态概率,即ai(n)=P(Xn=i)。
其中他们的和加起来=1,i=1,2,…,k。
系统在时刻n状态为i,时刻n+1转移到状态j的概率为pij(i,j=1,2,…,k),即pij=P(Xn+1=j|Xn =i),称pij为一步转移概率,P={pij}为一步转移概率矩阵,简称转移概率和转移概率矩阵,其中pij≥0,其中他们的和加起来等于1,i=1,2,…,k。
设系统初始时刻t=0的状态概率向量a(0)=(a1(0),a2(0),…,ak(0)),则系统在时刻t=1的状态概率向量为a(1)=(a1(1),a2(1),…,ak(1))=a(0)P,由此可递推得到马尔科夫预测模型为:a(n)=a(0)Pn
由模型可知,只要已知系统在初始时刻的状态概率向量a(0)和状态概率向量P,即可得到任意时刻系统处于各个状态的概率,从而为决策提供理论依据。

二、代码如下

Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。

import pandas as pd
import tushare as ts
TOKEN = '输入自己的tokenid'
pro = ts.pro_api(token=TOKEN)
#提取上证指数2021到2022年上证的季度数据
df = pro.index_monthly(ts_code='000001.SH', start_date='20210101', end_date='20220519', fields='ts_code,trade_date,open,high,low,close,vol,amount')
#分成6个状态,详细看下文
df_1 = df[(df['close']>= 3000) & (df['close'] < 3100)]
df_1['state'] = 1
df_2 = df[(df['close']>= 3200) & (df['close'] < 3300)]
df_2['state'] = 2
df_3 = df[(df['close']>= 3300) & (df['close'] < 3400)]
df_3['state'] = 3
df_4 = df[(df['close']>= 3400) & (df['close'] < 3500)]
df_4['state'] = 4
df_5 = df[(df['close']>= 3500) & (df['close'] < 3600)]
df_5['state'] = 5
df_6= df[(df['close']>= 3600) & (df['close'] < 3700)]
df_6['state'] = 6
#数据处理
h = pd.concat([df_1, df_2])
h = pd.concat([h,df_3])
h = pd.concat([h,df_4])
h = pd.concat([h,df_5])
h = pd.concat([h,df_6])
df = h
df = df.sort_values(by = 'trade_date')
#求出一步概率矩阵
import numpy as np
p = np.array([[0,0,0,0,0,0],[1,0,0,0,0,0],[0,0,0,0.5,0.5,0],[0,0.25,0,0.25,0.25,0.25],
         [0,0,1/6,1/6,0.5,1/6],[0,0,0.5,0,0.5,0]])
 #定义当前状态
w = [0,0,1,0,0,0]
#预测
#2022年5月的上证指数价格收盘价状态数据
h = np.dot(w,p)
h = np.dot(h,p)
h = np.dot(h,p)
h = np.dot(h,p)
#2022年6月的上证指数价格收盘价状态数据
h = np.dot(w,p)
h = np.dot(h,p)
h = np.dot(h,p)
h = np.dot(h,p)
h = np.dot(h,p)
#2022年7月的上证指数价格收盘价状态数据
h = np.dot(w,p)
h = np.dot(h,p)
h = np.dot(h,p)
h = np.dot(h,p)
h = np.dot(h,p)
h = np.dot(h,p)

三、马尔科夫预测模型在股价预测中的应用

1.数据来源及状态划分

本文中利用Tushare,调取从2021年1月到2022年4月的上证指数月度收盘价数据,这段时间为疫情期间的股价数据。由于数据中没有落在3100到3200的,故分组如下:共有6个状态。上证指数在3000到3100之间的,定义为状态1;上证指数在3200到3300之间的,定义为状态2;上证指数在3300到3400之间的,定义为状态3;上证指数在3400到3500之间的,定义为状态4;上证指数在3500到3600之间的,定义为状态5;上证指数在3600到3700之间的,定义为状态6;数据如表1所示:

表1 上证指数2021年1月到2022年4月的状态数据
ts_code trade_date close state
000001.SH 20210129 3483.069 4
000001.SH 20210226 3509.08 5
000001.SH 20210331 3441.912 4
000001.SH 20210430 3446.856 4
000001.SH 20210531 3615.477 6
000001.SH 20210630 3591.197 5
000001.SH 20210730 3397.357 3
000001.SH 20210831 3543.94 5
000001.SH 20210930 3568.167 5
000001.SH 20211029 3547.336 5
000001.SH 20211130 3563.887 5
000001.SH 20211231 3639.775 6
000001.SH 20220128 3361.44 3
000001.SH 20220228 3462.3064 4
000001.SH 20220331 3252.2029 2
000001.SH 20220429 3047.0624 1

2.状态转移概率矩阵 P 及初始状态概率向量

根据表一所示,一步状态转移概率矩阵为:

基于python的马尔科夫链在股价预测中的应用(基于Tushare)_第1张图片

3.模型预测

令现在状态为2022年1月,则a(0)=[0,0,0,1,0,0],根据一步转移概率矩阵可求得n步转移概率矩阵,现在开始预测2022年5-7月份的上证指数价格收盘价状态数据。
a(4)=a(0)*P4
a(5)=a(0)*P5
a(6)=a(0)*P6
则对应5-7月份的上证价格状态概率向量为:
2022年5月份的上证指数价格状态概率向量为[0.05208333, 0.0390625 , 0.12152778, 0.18663194, 0.37239583, 0.10329861];
2022年6月份的上证指数价格状态概率向量为[0.0390625 , 0.04665799, 0.11371528, 0.16948785, 0.3452691 , 0.10872396];
2022年7月份的上证指数价格状态概率向量为[0.04665799, 0.04237196, 0.11190683, 0.15677445, 0.32622613, 0.09991681]。
由数据可知,下半年大概率开始股市会逐步回暖,回到3300-3700之间。

你可能感兴趣的:(python,概率论,人工智能)