马尔可夫链模型实际运用(以金融领域为例)(超详细代码)(代码片段)

漩涡脆波波 漩涡脆波波     2023-03-03     229

关键词:

运用马尔可夫链模型进行量化金融分析

文章目录

1 介绍马尔可夫模型


2 数据格式与处理

数据来源于锐思数据库平安银行2021年1月1日至7月1日股票收盘价数据,共119条,部分数据及数据格式如下:

这119天平安银行股票的日收盘价的均值为22.51标准差为1.44
根据均值-标准差分级法对平安银行的股票日收盘价进行状态划分,如下图所示:

根据得到的状态分级表,对2021年1月1日至2021年7月1日期间的119条平安银行股票的日收盘价序列进行状态划分结果如下图:

根据天数-状态等级图进一步得到转频数矩阵转移概率矩阵为:


由一步转移频数矩阵可以得到边际概率值为:p1=20/119,p2=21/119,p3=35/119,p4=25/119,p5=18/119。统计量的值,如下表:

3 预测结果

通过查看数据可得,7月1日的收盘价为23.2,处于稳定区间,设其状态N为:[0,0,1,0,0]
根据状态转移概率矩阵于7月1日状态矩阵预测2021年7月2日平安银行收盘价状态矩阵为:
[0,0.212,0.588,0.2,0.158]
可得,7月2日股票处于稳定状态得概率大于50%,预测7月2日平安银行股票收盘价处于稳定状态,即在[21.78,23,22)区间内。

4 结果检验

通过在锐思数据库中查看2021年平安银行7月2日得股票收盘价可知,该天得收盘价为21.8,处于稳定状态,表明预测成功。

5 代码(含标注)

import math
import numpy as np
import pandas as pd
import xlwt

data=pd.read_csv('lh期末.csv',encoding='gbk')
dadie=0
xiadie=0
wending=0
shangzhang=0
dazhang=0
a=[]
b=[]
c=[]
d=[]
e=[]
#print(data)
counter=np.array(data)
# print(list(counter[:,1]))
set=list(counter[:,1])
#按照范围将数据分段并统计不同分段的数的个数
# 第一天 平稳 2
# 第二天 大跌 3
# 第三天 平稳 4
# 第四天 平稳 5
# 第五天 上涨 6
for i in set:
    if 0<i<21.06:
        dadie=dadie+1
        a.append(i)
    elif 21.06<=i<21.78:
        xiadie=xiadie+1
        b.append(i)
    elif 21.78<=i<23.22:
        wending=wending+1
        c.append(i)
    elif 23.22<=i<23.94:
        shangzhang=shangzhang+1
        d.append(i)
    elif i>=23.29:
        dazhang=dazhang+1
        e.append(i)
print("******************不同状态的数量*********************")
print("大跌个数为:",dadie)
print("下跌个数为:",xiadie)
print("稳定的个数为:",wending)
print("上涨的个数为:",shangzhang)
print("大涨的个数为:",dazhang)
# print(a)
# print(b)
# print(c)
# print(d)
# print(e)
#将不同数据原始数据里的是数据转换成等级
# for i in range(len(set)):
#     if set[i]in a:
#         set[i]=1
#     elif set[i] in b:
#         set[i]=2
#     elif set[i] in c:
#         set[i]=3
#     elif set[i] in d:
#         set[i]=4
#     elif set[i] in e:
#         set[i]=5
#print(set)
#print(n)
#将数据变成数据类型为[什么类型,第几天]
# set1=[]
# for i in range(len(set)):
#     set1.append([i+1,set[i]])
# print(set1)
#制作1-119的数组
# hhh=[]
# for i in range(1,120):
#     hhh.append(i)
# print(hhh)

#*********************************************************画图**************************************
# pyplot 是专门用来画图的存在于matplotlib里面的函数
# from matplotlib import pyplot as plt
#
# # 设置图片大小
# fig = plt.figure(figsize= (20,8),dpi = 80) # plt.figure用来设置图像大小,dpi参数调节图片清晰度
# x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 5, 5, 5, 5, 5, 4, 5, 4, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 4, 4, 4, 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3]
# y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119]
#  # x,y一起组成了要绘制图形的图标
#
# # 绘图
# # plot中参数的含义分别是横轴值,纵轴值,线的形状,颜色,透明度,线的宽度和标签
# plt.plot(x, y, 'ro-', color='black', alpha=1, linewidth=1)  # 传入x,y绘制出折线图
# plt.xlabel('x轴数字')
# plt.ylabel('y轴数字')
# # 设置x轴刻度
# plt.xticks(x) # 设置x轴刻度 可以以plt.xticks(range(2,26))的样式来调节x刻度参数
# # 另一种一列表的形式来传递步长
# # _xtick_labels = [i/2 for i in range(4,49)]
# # plt.xticks(_xtick_labels)   同时也可以在这一步里面设置步长plt.xticks(_xtick_labels[::3])
# # 传y的时候 plt.yticks(range(min(y),max(y)+1)) +1以免最后一个取不到 直接最大值最小值 刻度不均匀,range无意义
# # 保存图片
# plt.savefig("./sig_size.png")  # 保存图片 要在绘制之后保存 plt.savefig保存图片 保存为svg这种矢量图,放大不会有锯齿
#
# # 展示图形
# plt.show()  # 在执行程序的同时显示出图形

#******************************************将数据导出为文件
# import openpyxl
# data = ... #此处是要写入的数据
# wb = openpyxl.Workbook()
# ws = wb.create_sheet("test")

#写数据函数cell,cell中column和row至少为1
# for i in range(1,len(set1)):
#     for j in range(1,2):
#         ws.cell(row=i, column = j, value = set1[i][j])
# import xlwt
# import xlrd
# #xlwt,xlrd是python将数据导入excel表格使用的库
#
# wb = xlwt.Workbook()
# # 添加一个表
# ws = wb.add_sheet('test')

#添加数据使用.write函数(横坐标,纵坐标,内容)注意横纵坐标从0开始,横纵坐标即对于excel而言
##################################################将数据导出为excel#########################
# for i in range(len(set1)):
#     for j in range(0,2):
#         ws.write(i,  j,  set1[i][j])
#例:ws.write(0, 0, '股票编号')
#   ws.write(0, 0, a),a是变量

#将数据导出,保存格式为xxx.xls。其中xxx与上文表名同步
#注意此处一定要保存为.xls形式,如果是xlsx会打不开
# wb.save('succees.xls')
################################求转移矩阵和转移概率矩阵##################


# 转移频数矩阵
a = np.mat([[10,6,0,0,0],
            [10,8,7,5,3],
            [0,7,20,7,0],
            [0,0,3,5,7],
            [0,0,3,8,8]
            ])
# print(np.sum(a[0,:])) #计算行的和
# print(np.sum(a[:,0])) #计算列的和
# print(a[1,1])
#计算状态转移概率
sum=[]
for i in range(len(a)):
    sum.append(np.sum(a[i,:]))
print("*********************行的和**********")
print(sum)
gaiv=[]
juzhen=[]
for i in range(len(sum)):
    隐马尔可夫模型

第10章隐马尔可夫模型隐马尔可夫模型(hiddenMarkovmodel,HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。10.1隐马尔可夫模型的基本概念定义10.1(隐马尔可夫模型)隐马尔可夫... 查看详情

Python中的渠道归因(马尔可夫链模型)

】Python中的渠道归因(马尔可夫链模型)【英文标题】:ChannelAttribution(MarkovChainModel)inPython【发布时间】:2018-08-1307:27:52【问题描述】:如何在Python中进行渠道归因(马尔可夫链模型)?就像我们在R中有“ChannelAttribution”包。【... 查看详情

ml-13-1隐马尔科夫模型hmm

【ML-13-1】隐马尔科夫模型HMM【ML-13-2】隐马尔科夫模型HMM--前向后向算法【ML-13-3】隐马尔科夫模型HMM--Baum-Welch(鲍姆-韦尔奇)【ML-13-4】隐马尔科夫模型HMM--预测问题Viterbi(维特比)算法目录基础知识-马尔可夫链HMM... 查看详情

简单易懂的隐马尔可夫模型(hmm)讲解(代码片段)

学习目标:了解什么是马尔科夫链知道什么是HMM模型知道前向后向算法评估观察序列概率知道维特比算法解码隐藏状态序列了解鲍姆-韦尔奇算法知道HMM模型API的使用一、马尔科夫链在机器学习算法中,马尔可夫链(Markovcha... 查看详情

马尔科夫链和隐马尔可夫模型(转载)

马尔可夫模型是由AndreiA.Markov于1913年提出的?? 设 SS是一个由有限个状态组成的集合S={1,2,3,…,n?1,n}S={1,2,3,…,n?1,n}随机序列 XX 在 tt时刻所处的状态为 qtqt,其中 qt∈Sqt∈S,若有:P(qt=j|qt?1=i,qt?2=k,?)=P(qt=j|qt?... 查看详情

01隐马尔可夫模型-马尔可夫链、hmm参数和性质

...,在上一时刻之前的任何状态都和我无关。我们称其符合马尔可夫性质。下面是理论化的阐述:设X(t),t∈T是一个随机过程,E为其状态空间,若对于任意的t1<t2<...<tn<t,任意的x1,x2,...,xn,x∈E,随机变量X(t)在已知变量X(t1)=x... 查看详情

隐马尔可夫模型——马尔可夫模型(转载)

...tml 阅读目录简介数学描述例子应用领域回到顶部简介马尔可夫模型(MarkovModel)描述了一类随机变量随时间而变化的随机函数。考察一个状态序列(此时随机变量为状态值),这些状态并不是相互独立的,每个状态的值依赖于... 查看详情

机器学习hmm模型

目录1马尔科夫链1.1简介1.2经典举例1.3小结2HMM简介2.1简单案例2.2案例进阶2.2.1问题阐述2.2.2问题解决3HMM模型基础3.1什么样的问题需要HMM模型3.2HMM模型的定义3.3一个HMM模型实例3.4HMM观测序列的生成3.5HMM模型的三个基本问题4前向后向... 查看详情

隐马尔可夫模型

   隐马尔可夫模型   隐马尔可夫模型(HiddenMarkovModel,HMM)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的... 查看详情

马尔可夫链和有限状态机一样吗?

】马尔可夫链和有限状态机一样吗?【英文标题】:IsaMarkovchainthesameasafinitestatemachine?【发布时间】:2011-06-2007:11:06【问题描述】:有限状态机只是马尔可夫链的实现吗?两者有什么区别?【问题讨论】:你可能认为马尔可夫链... 查看详情

机器学习——隐马尔可夫模型

目录:  隐马尔可夫模型  Viterbi算法(必须掌握)简述:普通领域不常用,自然语言与金融领域用的比较多,总共涉及到概率问题,求参数问题,取范围问题。用到的知识点有全概率公式,条件概率公式,边缘概率公式,... 查看详情

隐马尔可夫(hmm)模型

隐马尔可夫(HMM)模型  隐马尔可夫模型,是一种概率图模型,一种著名的有向图模型,一种判别式模型。主要用于时许数据建模,在语音识别、自然语言处理等领域广泛应用。  概率图模型分为两类,一类:使用有向无环... 查看详情

一文搞定hmm(隐马尔可夫)(代码片段)

HMM(隐马尔可夫)学习目标1.自动机2.马尔可夫链和马尔可夫假设3.隐马尔可夫模型3.1马尔科夫模型中的三个问题:3.2似然度问题:3.3解码问题4.案例4.1如何对句子进行分词4.2统计概率4.3使用viterbi算法进行解码学习... 查看详情

pgm:无向图模型:马尔可夫网

http://blog.csdn.net/pipisorry/article/details/52489321马尔可夫网马尔可夫网在计算机视觉领域通常称为马尔可夫随机场(Markovrandomfields,MRF)。马尔可夫网是刻画X上联合分布的一种方法。与贝叶斯网一样,马尔可夫网可以视为定义了一系列由... 查看详情

马尔可夫决策过程mdp

 1.马尔可夫模型的几类子模型  马尔科夫链(MarkovChain),了解机器学习的也都知道隐马尔可夫模型(HiddenMarkovModel,HMM)。它们具有的一个共同性质就是马尔可夫性(无后效性),也就是指系统的下个状态只与当前状态信息有关,... 查看详情

隐马尔科夫模型(hmm)

参考技术A隐马尔可夫模型(HiddenMarkovModel),简称HMM,是一种基于概率统计的模型,是一种结构最简单的动态贝叶斯网,是一种重要的有向图模型。它用来描述一个含有隐含未知参数的马尔可夫过程(MarkovProcess)。其难点是从可观察... 查看详情

马尔科夫链markovchains

...//setosa.io/ev/markov-chains/   ============================马尔可夫链(Markovchain),又称离散时间马尔可夫链(discrete-timeMarkovchain),因俄国数学家安德烈·马尔可夫(俄语:АндрейАндреевичМарков)得名,为状态... 查看详情

蒙特卡罗方法生成指定状态空间下对应长度的马尔可夫链--matlab源程序(代码片段)

MCMC方法生成指定状态空间下对应长度的马尔可夫链马尔可夫链生成马尔可夫链的蒙特卡罗方法(MCMC方法)代码实现输出示例附马尔可夫链定义:生成马尔可夫链的蒙特卡罗方法(MCMC方法)详细原理可参考百度百科:马尔科夫... 查看详情