【机器学习】使用CatBoost库分析股票行情(指标为RSI、Boll、MACD和MA)并输出因子占比分析
文章目录
- 前言
- 一、CatBoost是什么?
- 二、准备工作
- 2.1 MyTT
- 2.2 获取日K数据
- 2.3 安装CatBoost
- 三. 使用CatBoost库分析股票行情(完整源码)
- 总结
前言
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,能不能通过机器学习来分析股票呢?
本文就抛砖引玉介绍一种使用CatBoost分析股票因子的程序。
提示:以下是本篇文章正文内容,下面案例可供参考
一、CatBoost是什么?
CatBoost是一种基于梯度提升决策树(Gradient Boosting Decision Tree, GBDT)算法的机器学习库,由俄罗斯搜索引擎公司Yandex于2017年开发。CatBoost是一种高性能、开源的机器学习框架,可用于分类、回归和排序等任务。
CatBoost的主要优势和特点包括:
高性能:CatBoost使用了一些特殊的技术,如对称树、随机化、数据采样等,以提高模型的训练速度和预测速度。
自适应特征缩放:CatBoost能够自动识别每个特征的类型,并进行相应的特征缩放,从而提高模型的准确性。
支持类别型特征:CatBoost能够自动处理类别型特征,无需进行独热编码等操作。
鲁棒性:CatBoost具有很强的鲁棒性,能够处理缺失值、异常值等问题。
可解释性:CatBoost能够输出每个特征的重要性,从而帮助用户理解模型的决策过程。
支持GPU加速:CatBoost支持GPU加速,可以大幅提高模型的训练速度。
总之,CatBoost是一种强大的机器学习库,具有高性能、自适应特征缩放、支持类别型特征、鲁棒性、可解释性等优势和特点。
二、准备工作
2.1 MyTT
它将通达信,同花顺,文华麦语言等指标公式indicators,最简移植到Python中,核心库单个文件,仅百行代码,实现和转换同花顺通达信所有常见指标,整个包就是一个文件,将其复制到项目目录即可调用,指标可以自行扩展。有些平台不允许安装第三方包,这个就一个文件,复制上去就可以用。而且速度也很快。
下载MyTT文件
访问https://github.com/mpquant/MyTT,下载MyTT文件放到运行Python的目录即可。
2.2 获取日K数据
计算指标,先得有数据,采集数据可考文章《一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)》
https://blog.csdn.net/popboy29/article/details/125815775
2.3 安装CatBoost
建议先安装Anaconda ,因为这里把常用的环境已经安装集成安装好了。
安装成功后,在Anaconda import中使用conda命令进行安装
conda install catboost
运行后结果如下:
(base) C:\Users\Administrator>conda install catboost
Retrieving notices: ...working... done
Collecting package metadata (current_repodata.json): done
Solving environment: done## Package Plan ##environment location: d:\ProgramData\anaconda3added / updated specs:- catboostThe following packages will be downloaded:package | build---------------------------|-----------------boltons-23.0.0 | py310haa95532_0 425 KBboost-cpp-1.73.0 | h2bbff1b_12 16 KBcairo-1.16.0 | haedb8bc_4 1.9 MBcatboost-1.0.6 | py310haa95532_1 30.6 MBconda-23.3.1 | py310haa95532_0 983 KBexpat-2.4.9 | h6c2663c_0 207 KBfont-ttf-dejavu-sans-mono-2.37| hd3eb1b0_0 335 KBfont-ttf-inconsolata-2.001 | hcb22688_0 83 KBfont-ttf-source-code-pro-2.030| hd3eb1b0_0 654 KBfont-ttf-ubuntu-0.83 | h8b1ccd4_0 1.5 MBfontconfig-2.14.1 | hc0defaf_1 198 KBfonts-anaconda-1 | h8fa9717_0 3 KBfonts-conda-ecosystem-1 | hd3eb1b0_0 5 KBfribidi-1.0.10 | h62dcd97_0 63 KBgetopt-win32-0.1 | h2bbff1b_0 19 KBgraphite2-1.3.14 | hd77b12b_1 91 KBgraphviz-2.50.0 | h7eca76f_1 1007 KBgts-0.7.6 | h63ab5a1_3 181 KBharfbuzz-4.3.0 | hb646838_1 855 KBjsonpatch-1.32 | pyhd3eb1b0_0 15 KBjsonpointer-2.1 | pyhd3eb1b0_0 9 KBlibboost-1.73.0 | h6c2663c_12 20.1 MBlibgd-2.3.3 | hd77b12b_2 350 KBpango-1.50.7 | h78c2152_0 279 KBpixman-0.40.0 | h2bbff1b_1 402 KBpoppler-22.12.0 | h268424c_0 2.4 MBpoppler-data-0.4.11 | haa95532_1 432 KBpython-graphviz-0.20.1 | py310haa95532_0 64 KB------------------------------------------------------------Total: 63.1 MBThe following NEW packages will be INSTALLED:boltons pkgs/main/win-64::boltons-23.0.0-py310haa95532_0boost-cpp pkgs/main/win-64::boost-cpp-1.73.0-h2bbff1b_12cairo pkgs/main/win-64::cairo-1.16.0-haedb8bc_4catboost pkgs/main/win-64::catboost-1.0.6-py310haa95532_1expat pkgs/main/win-64::expat-2.4.9-h6c2663c_0font-ttf-dejavu-s~ pkgs/main/noarch::font-ttf-dejavu-sans-mono-2.37-hd3eb1b0_0font-ttf-inconsol~ pkgs/main/noarch::font-ttf-inconsolata-2.001-hcb22688_0font-ttf-source-c~ pkgs/main/noarch::font-ttf-source-code-pro-2.030-hd3eb1b0_0font-ttf-ubuntu pkgs/main/noarch::font-ttf-ubuntu-0.83-h8b1ccd4_0fontconfig pkgs/main/win-64::fontconfig-2.14.1-hc0defaf_1fonts-anaconda pkgs/main/noarch::fonts-anaconda-1-h8fa9717_0fonts-conda-ecosy~ pkgs/main/noarch::fonts-conda-ecosystem-1-hd3eb1b0_0fribidi pkgs/main/win-64::fribidi-1.0.10-h62dcd97_0getopt-win32 pkgs/main/win-64::getopt-win32-0.1-h2bbff1b_0graphite2 pkgs/main/win-64::graphite2-1.3.14-hd77b12b_1graphviz pkgs/main/win-64::graphviz-2.50.0-h7eca76f_1gts pkgs/main/win-64::gts-0.7.6-h63ab5a1_3harfbuzz pkgs/main/win-64::harfbuzz-4.3.0-hb646838_1jsonpatch pkgs/main/noarch::jsonpatch-1.32-pyhd3eb1b0_0jsonpointer pkgs/main/noarch::jsonpointer-2.1-pyhd3eb1b0_0libboost pkgs/main/win-64::libboost-1.73.0-h6c2663c_12libgd pkgs/main/win-64::libgd-2.3.3-hd77b12b_2pango pkgs/main/win-64::pango-1.50.7-h78c2152_0pixman pkgs/main/win-64::pixman-0.40.0-h2bbff1b_1poppler pkgs/main/win-64::poppler-22.12.0-h268424c_0poppler-data pkgs/main/win-64::poppler-data-0.4.11-haa95532_1python-graphviz pkgs/main/win-64::python-graphviz-0.20.1-py310haa95532_0The following packages will be UPDATED:conda 23.1.0-py310haa95532_0 --> 23.3.1-py310haa95532_0Proceed ([y]/n)? ydone(base) C:\Users\Administrator>
三. 使用CatBoost库分析股票行情(完整源码)
# -*- coding: utf-8 -*-
# 以下是使用CatBoost库分析股票行情的Python源码,指标为RSI、Boll、 MACD和MA,并输出因子占比分析的代码:import pandas as pd
import numpy as np
from catboost import CatBoostRegressor, Pool
from Ashare import *
from MyTT import *# 获取股票行情数据
# df = pd.read_csv('stock_data.csv')
df = get_price('sh600258',frequency='1d',count=1000)
df['trade_date'] = df.index
print(df.tail(3))# 计算指标
CLOSE = df['close']
df['RSI'] = RSI(CLOSE)
df['UPPER'], df['MID'], df['LOWER'] = BOLL(CLOSE)
df['DIFF'], df['DEA'], df['MACD'] = MACD(CLOSE,SHORT=12,LONG=26,M=9)
df['MA10'] = MA(CLOSE,10)
df['MA20'] = MA(CLOSE,20)
df['MA60'] = MA(CLOSE,60)# 删除缺失值
df.dropna(inplace=True)# 拆分训练集和测试集
train_size = int(len(df) * 0.8)
train_data = df[:train_size]
test_data = df[train_size:]# 不参与训练、验证和展示的字段
no_train =['trade_date', 'close', 'open', 'high', 'low']# 定义训练集和测试集
train_pool = Pool(train_data.drop(no_train, axis=1), train_data['close'])
test_pool = Pool(test_data.drop(no_train, axis=1), test_data['close'])# 定义CatBoost回归器
model = CatBoostRegressor(iterations=1000, learning_rate=0.05, depth=6, loss_function='RMSE')# 训练模型
model.fit(train_pool)# 输出因子占比分析
feature_importances = model.get_feature_importance()
feature_names = train_data.drop(no_train, axis=1).columns
sorted_idx = feature_importances.argsort()for i in sorted_idx:print(f"{feature_names[i]}: {feature_importances[i]:.3f}")# 预测测试集
predictions = model.predict(test_pool)# 计算误差
mse = np.mean((predictions - test_data['close']) ** 2)
print('均方误差MSE:', mse)
以上代码会输出每个因子的占比分析结果。请注意,这只是一个简单的示例代码,您需要根据您的数据和需求进行修改和调整。
经测试,结果如下:
volume: 0.907
DEA: 2.172
DIFF: 3.081
LOWER: 5.415
MACD: 5.446
MID: 8.423
MA60: 9.331
MA20: 9.746
UPPER: 17.216
RSI: 17.310
MA10: 20.953
均方误差MSE: 0.08222467686549087
总结
经过上面的分析,我们看到均方误差(MSE,结果越小越好)还是挺大的,但10日均线、RSI指标、布林上轨与股票的关联度是比较高的,那么我们对此类行情是不是就可以多关注以下这个指标的演进情况。
另外,对因子的分析多种多样,要分析其关联性,我们也可以修改指标参数、添加或删除训练参数,下面简要说明一下:
- 文中使用的指标都是默认参数,且均改为国内指标。如:
RSI(CLOSE, N=24)
BOLL(CLOSE,N=20, P=2)
MACD(CLOSE,SHORT=12,LONG=26,M=9)
- 增加其它指标和参数,例如:增加KDJ指标,只需要在“指标计算”环节增加如下代码:
df['K'],df['D'],df['J'] = KDJ(CLOSE,HIGH,LOW, N=9,M1=3,M2=3)
- 剔除训练参数,只需要在“不参与训练、验证和展示的字段”的列表里删除相应字段即可。
文章抛砖引玉,欢迎评论区留言一起交流!
【机器学习】使用CatBoost库分析股票行情(指标为RSI、Boll、MACD和MA)并输出因子占比分析相关推荐
- 用python编写能够分析股票行情的程序
首先,你需要获取股票行情数据.这可以通过访问股票交易所的网站或者使用第三方的财经数据提供商的 API 来实现. 然后,你可以使用 Python 的一些科学计算库如 NumPy 和 pandas 来帮助 ...
- Python分析股票行情代码
//导入所需的包 import xxx(所用数据库) import pandas as pd import matplotlib.pylab as plt import statsmodels.api ...
- 【读书笔记】抓取深圳或上海股市,或香港美国等有关股市某时间段内全部股票行情数据,进行主成分分析构造你个人的股市指数
抓取深圳或上海股市,或香港美国等有关股市某时间段内全部股票行情数据,进行主成分分析构造你个人的股市指数,然后分析你的私家指数和该股市常用官方股票指数的相关性,判断主成分分析在构造股市指数上是否可用. ...
- 学会分析股票的基本面!使你顺水长流!
股票应该算是最变幻莫测的物质之一了,作为人造出来的一种信用符号,其本身并不存在更多的意义和属性,对于股票的把握,归根结底还是要回到上市公司去. 我不知道股票基本面分析在一场股灾面前能有多大的抵抗力,因 ...
- Day02| 第四期-阿里巴巴股票行情分析(一)
01 前言 2020年高考的第一天到来了,不晓得你的心情如何,我想我们始终忘不了的是对追梦过程中的努力,希望长大以后 ...
- 使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情、5日均线、10日均线行情并显示
使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情.5日均线.10日均线行情并显示 这个文章其实和我的上一篇文章,https://blog.csdn.net/lost0910 ...
- 搭建系统|“财务数据选股工具”如何与“多维度股票行情分析工具”完成无缝切换...
前言 前几期我们搭建了自定义的量化行情/选股/回测框架: 搭建系统|升级基于财务数据的选股工具!添加上日历和排序功能会更好用 搭建系统|不用数据库选股也行!利用Pandas特性的GUI版基本面选股工具 ...
- 同花顺python_专题研究|量化交易怎么少得了GUI!手把手教你用 Python 打造股票行情分析界面...
开场 Python 的出现可以帮助我们快速解决实际的问题,提高工作效率. 如果给Python 脚本加上一个GUI 的话,不仅可以进一步提升使用效率(不用每次停止运行去修改参数),而且还能把自己程序分享 ...
- Python复盘股票_搭建系统|“财务数据选股工具”如何与“多维度股票行情分析工具”完成无缝切换...
前言 前几期我们搭建了自定义的量化行情/选股/回测框架: 搭建系统|升级基于财务数据的选股工具!添加上日历和排序功能会更好用 搭建系统|不用数据库选股也行!利用Pandas特性的GUI版基本面选股工具 ...
最新文章
- GPU上稀疏矩阵的基本线性代数
- 路由器启动后如何定位IOS?
- 李宏毅机器学习完整笔记发布,AI界「最热视频博主」中文课程笔记全开源
- 点击按钮修改背景颜色及节点操作隔行变色案例
- configure: error: no termcap library found
- 应用程序无法正常启动(0xc000007b)错误的解决
- 南漂DBA——除了996,还可以收获这些...
- Basic Theory of Physically-Based Rendering
- SpringCloud-服务的消费者(rest+ribbon)
- leetcode[206]翻转链表/reverse linked list 链表经典面试题目
- 解决@media screen (自适应)IE浏览器不兼容问题
- BZOJ4170 极光
- SQL不能以实例名连接问题处理
- 两种实现视频倍速播放的方法(视频播放器倍速1.5x/2x)
- 微信小程序创建过程(具体步骤)
- 【校招实习面试实战,身临其境】华为软件开发工程师面试复盘总结
- TIC TAC TOE 井字游戏
- 我的世界服务器怎么发全部消息,我的世界服务器里起床战争怎么向所有人说话...
- TestLink在线Excel用例转换xml
- 矩形波如何傅立叶展开_SolidWorks三维钣金展开放样实例教程