量化交易全流程(八)

news2024/11/16 19:43:08

本节目录

随机森林

支持向量机

朴素贝叶斯

神经网络构建

将机器算法融入量化投资领域,不同于一般的量化交易策略,从一类数据中自动分析获得规律,利用规律对未知数据进行预测的算法。

决策树:决策树具有分层或者树状结构,其分支充当节点。我们可以通过遍历这些节点来做出某个决策,这些节点通过数据特征进行参数选择。但是,决策树存在过度拟合的问题。 过度拟合通常在树中添加越来越多的节点来增加树内的特异性以达到某个结论,从而增加树的深度并使其更复杂。

随机森林:是一种基于统计学习理论的机器算法。它可以对投资者自选的各个因子,以机器训练的方式进行自动分析,从而给投资者提供良好的投资建议。是一种使用集成方法的监督分类机器学习算法。 简而言之,随机森林由众多决策树组成,有助于解决决策树过度拟合的问题。 通过从给定数据集中选择随机特征来随机构造这些决策树。随机森林根据从决策树收到的最大投票数得出决策或预测。 通过众多决策树达到最大次数的结果被随机森林视为最终结果。
随机森林的构建:随机森林的构建包括两个方面,分别是数据的随机选取和决策点的随机选取。
1)数据的随机选取
第一,从初始的数据集中采取有放回的抽样方式,构造子数据集,子数据集的数据量和初始数据集相同。需要注意的是,不同子数据集的元素可以重复,同一个子数据集的元素也可以重复。
第二,利用子数据集来构造子决策树,将子数据集放到每个子决策树中,每个子决策树输出一个结果。
第三,如果有新的数据需要通过随机森林得到分类结果,可以通过对子决策树的判断结果进行投票,得到随机森林的输出结果。
2)决策点的随机选取
与数据集的随机选取相似,随机森林中的子决策树的每一个分裂过程并未用到所有的决策点,而是从所有的决策点中随机选取一定的决策点,再在随机选取的决策点中选取最优的决策点。这样能够使随机森林中的决策树彼此不同,以提升系统的多样性,从而提升分类性能。

工作原理

随机森林基于集成学习技术,简单地表示一个组合或集合,在这种情况下,它是决策树的集合,一起称为随机森林。集合模型的准确性优于单个模型的准确性,因为它汇总了单个模型的结果并提供了最终结果。那么,如何从数据集中选择特征以构建随机森林的决策树呢?

使用称为 bagging 的方法随机选择特征。根据数据集中可用的特征集,通过选择具有替换的随机特征来创建许多训练子集。这意味着可以在不同的训练子集中同时重复一个特征。例如,如果数据集包含20个特征,并且要选择5个特征的子集来构建不同的决策树,则将随机选择这5个特征,并且任何特征都可以是多个子集的一部分。这确保了随机性,使树之间的相关性更小,从而克服了过度拟合的问题。选择特征后,将根据最佳分割构建树。每棵树都给出一个输出,该输出被认为是从该树到给定输出的“投票”。接收最大’投票’的随机森林选择最终输出/结果,或者在连续变量的情况下,所有输出的平均值被视为最终输出。

在上图中,我们可以观察到每个决策树已经投票或者预测了特定的类别。随机森林选择的最终输出或类别将是N类,因为它具有多数投票或者是四个决策树中的两个预测输出。

随机森林的优缺点
随机森林的优点有3项,具体如下:
第一,随机森林可以用于回归和分类任务,并且很容易查看模型输入特征的相对重要性。
第二,随机森林是一种非常方便且易于使用的算法,因为在默认参数情况下即可产生一个很好的预测结果。
第三,机器学习中的一个重大问题是过拟合,但大多数情况下随机森林分类器不会出现过拟合,因为只要森林中有足够多的树,分类器就不会过度拟合模型。
随机森林的缺点在于使用大量的树会使算法变得很慢,并且无法做到实时预测。一般来讲,这些算法训练速度很快,预测却十分缓慢。而且越准确的预测需要越大量的树,这将导致模型很慢。

随机森林应用
下面说明利用随机森林训练某只股票的均线指标、相对强弱指标、动量线指标后,来预测该股票下一个交易日的涨跌,即为投资者提供买进或卖出的投资建议。

首先导入需要的数据包,具体代码如下:

import talib # 导入talib库
from jqdata import *  # 导入聚宽函数库

接下来设置要操作的股票,即利用随机森林训练的股票。同时要设置训练股票的开始时间和结束时间,具体代码如下:


test stock = '600600.XSHG' # 设置测试标的为青岛啤酒
start_date = datetime.date(2018, 12, 1) # 设置开始时间
end_date = datetime.date(2023, 12, 1) # 设置结束时间

接下来,利用get_all_trade_days)函数获取所有交易日;再定义两个变量,将其分别赋值为随机森林训练开始时间和结束时间,具体代码如下:

trading days = list(get_all_trade_days()) # 获取所有交易日
start_date_index = trading_days.index(start_date) # 获取开始时间
end_date_index = trading_days.index(end_date) # 获取结束时间

然后再定义两个列表变量,接着利用for循环语句计算3个指标,即均线指标、相对强弱指标、动量线指标的数据,并添加到列表变量中,具体代码如下:

x_all = [] # 定义两个列表变量
y_all = []
for index in range(start_date_index, end_date_index):
    # 得到计算指标的所有数据
    start_day = trading_days[index-30]
    end_day = trading_days[index]
    # 利用get_price()函数获得股票数据
    stock_data =get_price(test_stock, start_date = start_day, end_date = end day,frequency='daily', fields=['close'])
    # 定义变量并赋值为收盘价
    close_prices = stock_data('close').values
    # 通过数据计算指标
    # -2是保证获取的数据是昨天的,-1就是通过今天的数据计算出来的指标
    ma_data = talib.MA(close_prices)[-2]
    rsi_data = talib.RSI(close_prices)[-2]
    mom_data = talib.MOM(close_prices) [-2]
    features = []
    # 添加均线指标、相对强弱指标和动量线指标
    features.append(ma_data)
    features.append(rsi_data)
    features.append(mom_data)
    # 设置变量label 为布尔变量,并赋值为False
    label = False
    # 如果今天收盘价大于昨天收盘价,则变量 label为True
    if close_prices[-1] > close_prices[-2]:
        label = True
    x_all.append(features)
    y_all.append(label)

最后准备随机森林算法需要用到的数据,并显示提示信息,具代码如下:

x_train = x_all[:-1]
y_train = y_all[:-1]
x_test = x_all[-1]
y_test= y_al1[-1]
print('数据已准备好了!')

接下来导入随机森林分类器,训练样本的特征是根据2018年12月1日至2023年12月1日每一天的之前的交易日的收盘价计算的均线指标、相对强弱指标和动量线指标,训练样本的标类别是2018年12月1日至2023年12月1日每一天的涨跌情况,涨是True,跌是False,测试样本是2023年12月4日的3个指标以及涨跌情况,具体代码如下:

from sklearn.ensemble import RandomForestClassifier # 调用随机森林分类器
clf = RandomForestClassifier()
clf.fit(x_train, y_train) # 训练的代码
prediction = clf.predict(x_test)  # 得到测试结果
if prediction == y_test: # 利用if语句判断是否预测正确
    print("预测正确!")
else:
    print("预测错误!")

得到结果为:

支持向量机:是一种有监督得机器学习模型,通常用来进行模式识别、分类和回归分析,在解决小样本、非线性样本和高维模式识别中表现出许多特有的优势,广泛推广到其他函数拟合等其他机器学习中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【已验证】SqlBulkCopy 执行批量插入的时候报超时问题-解决办法

把datatable里面的数据插入到数据库,但是数据量大的情况下批量插入会提示超时,所以把datatable的数据分批写入数据库的 using (SqlConnection connection new SqlConnection(ConnectionString)){connection.Open();int pageSize 100000;//SqlBulkCopy大…

C++基础 -39- 阶段练习 编写通用数组

功能要求 -1- 使用尾插法和尾删法对数组中的数据修改 -2- 构造函数传入数组的大小和容量 -3- 可以通过下标的方式访问数组的中的元素 -4- 可以获取数组中的元素个数和数组的容量 #include <iostream> using namespace std; template<class T> class MyArray {publi…

什么是网站?

这篇文章是我学习网站开发&#xff0c;阶段性总结出来的。可以帮助你 通俗易懂 地更加深刻理解网站的这个玩意。 一&#xff0c;网站和网页的区别&#xff1f; 网站是由一个个网页组成。我们在浏览器上面看到的每一个页面就是网页&#xff0c;这些 相关的 网页组成一个网站。…

上传文件获得下载链接方法:直链!直链!

&#xff01;非 百度网盘 不是直接用网盘下载&#xff0c;要用直链&#xff0c;百度上有很多方法。 我自己研究了个&#xff0c;跳过百度网盘输密码进网页的方法 还是先还是要把文件上传网盘让后搜索网盘获取直链的方法&#xff08;那百度网盘举例&#xff09; 地址 https:…

常见的几种计算机编码格式

前言&#xff1a; 计算机编码是指将字符、数字和符号等信息转换为计算机可识别的二进制数的过程&#xff0c;正因如此&#xff0c;计算机才能识别中英文等各类字符。计算机中有多种编码格式用于表示和存储文本、字符和数据&#xff0c;实际走到最后都是二进制&#xff0c;本质一…

Flink核心概念

并行度 当要处理的数据量非常大时&#xff0c;我们可以把一个算子操作&#xff0c;“复制”多份到多个节点&#xff0c;数据来了之后就可以到其中任意一个执行。这样一来&#xff0c;一个算子任务就被拆分成了多个并行的“子任务”&#xff08;subtasks&#xff09;&#xff0…

C++:智能指针[重点!]

目录 一、关于智能指针 1、引入智能指针 2、RAII 二、详述智能指针 auto_ptr unique_ptr shared_tr 循环引用 weak_ptr 定制删除器 三、关于内存泄漏 一、关于智能指针 1、引入智能指针 首先引入一个例子&#xff1a; 在Test函数中&#xff0c;new了两个对象p1p2&a…

nodejs微信小程序+python+PHP天天网站书城管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

openGauss训练营培训课程第1课时

课时1:openGauss全景介绍 1、介绍 openGauss 全景 1.1.openGauss总体架构介绍 本章节主要介绍了openGauss发展的历史&#xff0c;现状以及未来。对当前的DataPod和DataKit 2种openGauss当前主推的场景化产品进行了介绍。同时对openGauss的整个逻辑模块的视图进行了讲解。 …

MCU 的 TOP 15 图形GUI库:选择最适合你的图形用户界面(二)

在嵌入式系统开发中&#xff0c;选择一个合适的图形用户界面&#xff08;GUI&#xff09;库是至关重要的。在屏幕上显示的时候&#xff0c;使用现成的图形库&#xff0c;这样开发人员就不需要弄清楚底层任务&#xff0c;例如如何绘制像素、线条、形状&#xff0c;如果再高级一点…

JVM Optimization Learning(五)

一、JVM Optimization 1、G1 G1官网说明&#xff1a;Garbage First Garbage Collector Tuning The Garbage First Garbage Collector (G1 GC) is the low-pause, server-style generational garbage collector for Java HotSpot VM. The G1 GC uses concurrent and paralle…

详解卷积神经网络(Convolutional Neural Networks, CNNs)

全连接神经网络基础 全连接神经网络&#xff08;Fully Connected Neural Network 或 Multi-Layer Perceptron, MLP&#xff09;是最简单的深度学习模型之一。一个典型的全连接网络由多个层组成&#xff0c;每一层包含多个神经元或节点。每个神经元与上一层的所有神经元相连&am…

安路Anlogic FPGA下载器的驱动安装教程

安路FPGA下载器驱动安装教程 安路FPGA下载器&#xff1a;EN-ALC10,是一款高性能FPGA下载线&#xff08;编程器&#xff09;&#xff0c;支持安路的开发软件TDS和全系列FPGA芯片下载编程&#xff0c;支持全速USB2.0与电脑进行数据通信&#xff0c;通过JTAG协议与FPGA进行程序下…

简单了解HTTP报文及示例

简单了解HTTP报文及示例 HTTP报文请求报文响应报文通用首部字段Cache-ControlConnectionDate 请求首部字段AcceptAccept-CharsetAccept-EncodingAccept-LanguageHostIf-MatchIf-Modified-SinceIf-None-MatchRefererUser-Agent 响应首部字段Accpet-RangesAgeLocationServer 实体…

根据已有安装的cuda配置合适的pytorch环境

目前网络上根据电脑配置安装合适的深度学习环境的帖子已经很多了&#xff0c;但是现实中会出现很久之前已经安装了对应的cuda&#xff0c;但是现在忘记了当时安装的是什么版本。本文针对这一问题展开攻略。 1 cuda安装版本查询 我们在查询自己应该安装什么版本的cuda时&#…

cv2.threshold 图像二值化

图像二值化 whatparameters示例 what cv2.threshold是OpenCV中用于进行图像二值化的函数。它的作用是将输入图像的像素值转换为两个可能的值之一&#xff0c;通常是0&#xff08;黑色&#xff09;或255&#xff08;白色&#xff09;&#xff0c;根据一个设定的阈值。图像二值化…

基于SSM的老年公寓信息管理的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【Wireshark工具使用】Wireshark无法抓取TwinCAT的EtherCAT包(已解决)

写在前面 因项目需要&#xff0c;近期在在深入研究EtherCAT协议&#xff0c;之后会将协议做一个系统的总结&#xff0c;分享在这个分栏。在研究EtherCAT协议帧时&#xff0c;使用了一个网络数据分析工具Wireshark&#xff0c;本文是关于EtherCAT数据帧分析工具使用中遇到的一个…

持续集成交付CICD:GitLabCI 运行前后端项目

目录 一、理论 1.spring项目自动构建 2.阿里云云效 Maven 3.Maven安装 4.Go安装 5.NPM安装 二、实验 1.GitLabCI 运行Maven项目 2.GitLabCI 运行Go项目 3.GitLabCI 运行NPM项目 三、问题 1.前端脚手架如何初始化项目 2.NPM下载如何指定 3.Go项目下载源如何指定 …

如何安装Wnmp并结合内网穿透实现外网远程访问内网服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…