sklearn里的逻辑回归,随机森林及SVM应用于指数方向”预测“

news/2024/5/6 8:31:18/文章来源:https://blog.csdn.net/weixin_38175458/article/details/127356459

原创文章第76篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。

backtrader代表传统量化,而qlib代表AI量化,二者的范式不同。

backtrader擅长规则驱动,更像是传统技术分析的“自动化”版本,当然可以多进程搜索参数空间。但这些策略是无法“自我进化”的,它的进化还是取决于人,使用者自身经验的积累,对策略的改进。传统量化更像经验的规则表达,比如MACD为何是12,26,9,你要仔细问,这就伤感情,本身就是一种“模糊的”经验。

backtrader还提供了一种能力,那就是高度还原真实交易场景以及可以对接实盘的能力。这样,你可以使用历史数据,充分地试验你的想法,而不用真的掏真金白银去试错,又浪费时间,精力又浪费钱,这是量化回测的意义所在。

AI已经进化到今天这一波高峰,理应可以在数据如此丰富的金融业有所作为。

01 数据准备

 均值回归模型要求时间序列的平稳,而金融序列大部分都是“不平稳”的。机器学习没有特别就要示,我们可以直接从数据开始。      

qlib一开来就是300支股票一起,初学者直接run它的script就蒙了,有效果就有,也不知道如何优化。而且性能 相当考验你的电脑,除了lightGBM之外,其余的models跑起来都很费劲。

我们先从一支我们熟悉指数开始,沪深300或者SPX。  

我们使用“收盘价”,“成交量”,以及5天前的数据,“预测””下一天“是”涨“还是”跌“  

def make_dataset(df, time_lags=5):df_lag = pd.DataFrame(index=df.index)df_lag["close"] = df["close"]df_lag["volume"] = df["volume"]df_lag["close_Lag%s" % str(time_lags)] = df["close"].shift(time_lags)#df_lag["close_Lag%s_Change" % str(time_lags)] = df_lag["close_Lag%s" % str(time_lags)].pct_change() * 100.0df_lag["volume_Lag%s" % str(time_lags)] = df["volume"].shift(time_lags)#df_lag["volume_Lag%s_Change" % str(time_lags)] = df_lag["volume_Lag%s" % str(time_lags)].pct_change() * 100.0#df_lag["close_Direction"] = np.sign(df_lag["close_Lag%s_Change" % str(time_lags)])df_lag['close_Dir'] = np.sign(df['close'].shift(-1).pct_change())#df_lag["volume_Direction"] = np.sign(df_lag["volume_Lag%s_Change" % str(time_lags)])return df_lag.dropna(how='any')

 按比例划分数据集:

def get_date_by_percent(start_date, end_date, percent):days = (end_date - start_date).daystarget_days = np.trunc(days * percent)target_date = start_date + dt.timedelta(days=target_days)# print days, target_days,target_datereturn target_datedef split_dataset(df, input_column_array, output_column, spllit_ratio):split_date = get_date_by_percent(df.index[0], df.index[df.shape[0] - 1], spllit_ratio)input_data = df[input_column_array]output_data = df[output_column]# Create training and test setsX_train = input_data[input_data.index < split_date]X_test = input_data[input_data.index >= split_date]Y_train = output_data[output_data.index < split_date]Y_test = output_data[output_data.index >= split_date]return X_train, X_test, Y_train, Y_test

                                                                                                                                 02 机器学习模型   

我们分别实现了”随机森林“,’logistic回归‘,”SVM“三种分类模型:

from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.svm import LinearSVC, SVCdef do_logistic_regression(x_train, y_train):classifier = LogisticRegression()classifier.fit(x_train, y_train)return classifierdef do_random_forest(x_train, y_train):classifier = RandomForestClassifier()classifier.fit(x_train, y_train)return classifierdef do_svm(x_train, y_train):classifier = SVC()classifier.fit(x_train, y_train)return classifier

     03 模型评价

对测试集的数据,计算准确率和得分:

def test_predictor(classifier, x_test, y_test):pred = classifier.predict(x_test)hit_count = 0total_count = len(y_test)for index in range(total_count):if (pred[index]) == (y_test[index]):hit_count = hit_count + 1hit_ratio = hit_count / total_countscore = classifier.score(x_test, y_test)# print "hit_count=%s, total=%s, hit_ratio = %s" % (hit_count,total_count,hit_ratio)return hit_ratio, score

        04 结果

from engine.ml.models import do_svm, do_random_forest, do_logistic_regression, test_predictorlr_classifier = do_logistic_regression(X_train, Y_train)
lr_hit_ratio, lr_score = test_predictor(lr_classifier, X_test, Y_test)rf_classifier = do_random_forest(X_train, Y_train)
rf_hit_ratio, rf_score = test_predictor(rf_classifier, X_test, Y_test)svm_classifier = do_svm(X_train, Y_train)
svm_hit_ratio, svm_score = test_predictor(rf_classifier, X_test, Y_test)print("%s : Hit Ratio - Logistic Regreesion=%0.2f, RandomForest=%0.2f, SVM=%0.2f" % (
'name', lr_hit_ratio, rf_hit_ratio, svm_hit_ratio))

 结果如预期不理想,

name : Hit Ratio - Logistic Regreesion=0.51, RandomForest=0.49, SVM=0.49     

50%左右,跟瞎猜差不多,意料之中,哪有这么容易,那门槛也太低了。

机器学习只是一种高级”统计“手段,投资并没有圣杯。

但这项工作很有意义,机器学习的基本框架上述代码基本都呈现出来了。

就是数据集准备,数据划分,然后模型训练,模型检验。

交付使用时,直接接到backtrader里即可。

总结:本篇使用了sklearn内置的三种模型,对小数据集进行了简单的”分类“预测,皆在显示如何把机器学习算法应用于金融时间序列上。    

 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【附源码】计算机毕业设计SSM民宿网站管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

docsify search插件对多个md文件建索引查找

docsify search插件对多个md文件建索引查找 如果配置了不管用,那应该是浏览器缓存的问题,换个浏览器访问试试看 index.html中配置paths 对应路径即可 官网示例如下图: 附上完整index.html配置 <!DOCTYPE html> <html lang"en"> <head><m…

MySQL—表的增删改查

MySQL—表的增删改查一、Create1.1、单行数据 全列插入1.2、多行数据 指定列插入1.3、插入否则更新1.4 替换二、Retrieve2.1、全列查询2.2、指定列查询2.3、查询字段为表达式2.4、为查询结果指定别名2.5 结果去重2.6 WHERE 条件>, >, <, <,2.7、结果排序2.8、筛选…

分布式锁(Distributed Lock)理论介绍

在多线程环境中&#xff0c;线程之间通常使用互斥锁实现共享资源的独占访问。在多进程环境&#xff0c;特别是分布式环境&#xff0c;常使用分布式锁来实现共享资源的独占访问。简单来说&#xff0c;分布式锁就是指在分布式环境下&#xff0c;通过加解锁实现多节点对共享资源的…

Day2: 正原电子 imx交叉编译环境搭建

imx交叉编译环境搭建 资源下载 https://atk-imx6ull.coding.net/public/imx6ull/05_Tools/git/files/master/01%E3%80%81%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E5%99%A8 正点原子提供两种交叉编译工具链。这两种交叉编译工具链解释如下图。 第一种 Poky 编译器是Yocto 项…

Entity Framework教程-Entity Framework-模型关系(Model Relationships)

更新记录 转载请注明出处: 2022年10月17日 发布。 2022年10月10日 从笔记迁移到博客。配置实体关系的方式 使用数据特性 使用FluentAPI关系配置 使用关系属性 导航属性(navigation property) 导航属性说明 一个类型为主体实体或从属实体的属性 无论它是指它的父实体还是持有…

Spring源码分析(八)依赖注入源码解析1:autowire自动注入 和 @Autowired注入

Spring中到底有几种依赖注入的方式&#xff1f; 首先分两种&#xff1a; 手动注入自动注入 手动注入 在XML中定义Bean时&#xff0c;就是手动注入&#xff0c;因为是程序员手动给某个属性指定了值。 <bean name"userService" class"com.luban.service.U…

谷粒商城项目学-分布式基础

项目框架图 分布式基础概念 • 微服务、注册中心、配置中心、远程调用、Feign、网关 • 2、基础开发 • SpringBoot2.0、SpringCloud、Mybatis-Plus、Vue组件化、阿里云对象存储 • 3、环境 • Vagrant、Linux、Docker、MySQL、Redis、逆向工程&人人开源 • 4、开发规范 •…

【LeetCode48:旋转图像(附Java代码)】

旋转图像一、题目描述1.题目内容2.样例二、解决方案1.算法流程1&#xff09;分析2&#xff09;算法流程2.Java代码1&#xff09;核心代码2&#xff09;完整测试代码一、题目描述 1.题目内容 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必…

metamask api 请求 一般操作

参考文档&#xff1a;https://docs.metamask.io/guide/ 注意 metamask 必须是运行在站点之下的 web 页进行操作。 一、检查 metamask 是否安装 metamask 提供了 window.ethereum 供开发者对 metamask&#xff08;以太坊网络&#xff09; 进行交互&#xff0c;当然是需要你已…

DO、VO、BO、DTO、POJO

DO:Domain Object 即数据库表字段 在Java中一一对应关系(有人称它实体类) BO:Business Object 即业务对象,Service层向上传传输的对象。是多个DO的组合形式 VO:view oject 展示层对象,通过接口向前端输出展示的对象 DTO:Date Transfer Object 数据传输对象,controll…

《Linux下软件的管理》

【一】Linux软件包yum 什么是软件包&#xff1f; 在Linux下安装软件&#xff0c;一个通常的办法就是下载程序的源代码&#xff0c;并经行编译&#xff0c;既可得到可执行程序&#xff0c;但是这种办法属实是太麻烦了&#xff0c;因为下载要时间&#xff0c;编译要时间&#x…

根文件系统简介

根文件系统 根文件系统一般也叫做rootfs&#xff0c;那么什么叫根文件系统&#xff1f;看到“文件系统”这四个字&#xff0c;很多人&#xff0c;第一反应就是FATFS、FAT、EXT4、YAFFS和NTFS等这样的文件系统。在这里&#xff0c;根文件系统并不是FATFS这样的文件系统代码&…

SpringCloudAlibaba 通过Dubbo实现微服务之间的RPC调用

目录 一、创建模块化项目 二、公共api接口模块 三、服务提供者 四、服务调用者 五、测试 六、案例代码 在微服务架构中&#xff0c;微服务之间的调用一般我们有两种比较好的解决策略&#xff0c;分别是通过OpenFeign的基于http协议的传输的调用和基于RCP协议的Dubbo框架来…

基于SSM的餐饮管理系统的设计与实现

目 录 前 言 1 第1章 概述 2 1.1 选题背景及意义 2 1.2 技术概述 2 1.2.1 JSP技术概述 2 1.2.2 SpringSprngMVC介绍 3 1.2.3 MySQL数据库概述 3 1.2.4 Mybatis介绍 3 1.2.5 Maven介绍 3 1.3 开发平台介绍 4 1.3.1 Tomcat服务器 4 1.3.2 Eclipse简介 4 第2章 可行性研究 5 2.1 技…

Redis学习和笔记

Redis学习 作为一个程序员&#xff0c;你没有办法不学Redis redis是一个NoSql的&#xff08;远程字典服务的&#xff0c;key_value的数据库&#xff09; redis 能干嘛 内存存储&#xff0c;持久化&#xff0c;内存中是断电就失去&#xff0c;所有说持久化很重要效率高&#…

Linux Command mount 挂载

Linux Command mount 挂载 tags: 文件管理 文章目录Linux Command mount 挂载1. 简介2. 语法3. 退出状态4. 命令选项5. mount 挂载5.1 列出挂载的文件系统5.2 列出特定文件系统5.3 挂载文件系统5.4 使用 /etc/fstab 挂载文件系统5.5 挂载 USB 驱动器5.6 安装 CD-ROM5.7 挂载 I…

电路方案分析(十二)USB Type-C PD 移动电源参考设计方案

USB Type-C PD 移动电源参考设计方案 tips&#xff1a;TI设计方案参考分析&#xff1a;TI Designs&#xff1a;TIDA-01627 1.系统描述 2.系统概述 3.系统供电方案 4.测试数据 5.设计文件 6.关键术语 说明 此移动电源参考设计提供高度集成的 USB Type-C™电力传输 (PD) 解决…

Docter安装

上传安装包 docker-ce-18.06.0.ce-3.el7.x86_64.rpm 安装 yum install docker-ce-18.06.0.ce-3.el7.x86_64.rpm -y 启动docter systemctl start docker systemctl stop docker systemctl restart docker systemctl status docker&#xff08;查看状态&#xff09; 查看doct…

浮点型在内存中的存储

目录 1、浮点数的存储方式 (1) 转化为二进制 (2) 转化为国际标准形式 (3) 使用国际标准形式存储 (4) 存储方式验证 2、从内存中取出浮点数需满足的规则 (1) E 不全为0 或 不全为1 (2) E 全为 0 (3) E 全为 1 浮点数在内存中存储的方式和整型不一样。所以我们在存储的…