当前位置: 首页 > news >正文

StockTrading AI小模型股票自动交易系统 转载

Stock-Trading

StockTrading AI小模型股票自动交易系统

项目文档

Stock-Trading · 语雀

项目展示

功能介绍

  1. 对接证券平台,实现股票自动化交易
  2. 使用QuartZ定时任务调度,每日自动更新数据
  3. 使用DL4J框架实现LSTM模型指导股票买入,采用T+1短线交易策略
  4. 利用K8S+GithubAction实现DevOps

后期优化方向

  1. 获得更多股票历史数据用于训练
  2. 模型超参数调优
  3. 实现增量训练
  4. DL4J代码框架优化

项目简介Stock-Trading是一款股票自动交易管理系统,根据人工智能算法模型预测价格来自动买入卖出以获得收益后台项目地址:https://github.com/mwangli/stock-trading前端项目地址:https://github.com/mwangli/stock-front页面展示地址:http://124.220.36.95/user/login

1712554583516.jpg

项目背景项目设计原则:最小化设计原则:在满足业务需求的情况下,尽可能地以最简单的方式实现,来减轻项目的复杂度,节约服务器资源,尽可能的使得项目 "精致小巧"技术是为业务服务的,技术是手段而非目标,脱离了业务技术将一文不值工作时间越长,越能体会这句话的含义,学习目的除外本项目是一个面向业务的项目,区别于传统的toB, toC项目,是一个toP(To Person)面向个人的项目业务背景理论:从T+1短线交易的角度来看股票收益是由买入和卖出时的价格来决定,只要卖出时的价格比买入高(不考虑手续费),就能获得正向收益。将某一支股票的交易看做是一个猜大小或者抛硬币猜正反的数字游戏来看待,只要猜对了就赢,猜错了就输,依据概率论,假如能提高股票猜涨跌的准确率,那么就会收益就会越高使用深度学习算法,LSTM长短期记忆人工神经网络,就是为了提猜涨跌的准确率,能根据历史价格走势来预测明天的价格是涨还是跌,选择理论涨幅较高的股买入该项目的的核心出发点,是用机器学习算法,来代替人的决策,来进行股市交易,算法能有效避免人性的弱点,比如永远想等到更高价格再买,结果崩盘,而机器学习算法决策不会。股票市场的价格是由买卖市场决定的,而买卖是由人来进行的,因为人性是共通的,所以价格波动是有规律的,机器学习算法的目的就是为了学习这些规律来做出判断将参与股票交易,看做一场猜大小博弈,参与博弈的双方是自我和其他所有参与股票交易的人,只要我猜对了,我便盈利,盈利的来源便是对方的亏损,至于是谁亏,我并不关心;如果我猜错了,那么我就亏,显然是对方盈利,至于是谁赚了也不重要上面理论的前提是从T+1短线交易的角度出发,针对某一天来看,对比前一天,总是有股票在涨,也总会有股票在跌,只要猜对了就能盈利如果从长期角度来看股票价格会受到国家政策,经济形势,实时新闻等多方面的总和因素影响,这个输入足够庞杂,如果机器学习算法需要学习到里面的规律并做出准确的判断穷尽整个人类现有的计算资源也未必能做到运行环境jdk1.8:不建议使用9及其以上,以为DL4J框架大概率会用到plot画图,会依赖JFrame等高版本被删除的工具centos7.6:腾讯云服务器,2核4G,部署了一套单节点的完整K8S集群以供学习测试,部署过程参考redis, mysql, mongdb:用于进行数据持久化技术框架前端:React, AntDesignPro, Umi等后端:Springboot, Mybatis-plus, QuartZ, WebSocket等模型:DL4J,java环境下的深度学习算法支持库部署方式java -jar 命令后台启动docker + Jenkins流水线部署k8s devOps自动部署功能说明对接证券平台,实现真实的股票自动化交易使用QuartZ定时任务调度,每日自动执行交易流程使用DL4J框架实现LSTM模型指导股票买入,采用T+1短线交易策略包含简单认证授权功能利用K8S+GithubAction实现CICD+DevOps利用WebSocket实现后台日志实时推送前端集成用户登录,数据分析,任务调度,日志查询等功能目录说明

image.png

模型部分:包含LSTM模型训练和预测的相关代码工作流部分:负责调度每天的任务,来实现买入卖出逻辑Web部分:包含SpringBoot Web项目的常见项目结构业务说明采用工作流驱动,每个流程按照时间线互相独立执行,有自己的输入输出,工作流之间解耦合为什么采用这种设计:在早期的版本中,将所有的业务流程写在一个方法中,按照时间线顺序执行,下一个流程依赖上一个流程的输出或者结果,比如买入需要先卖出,否则没有可用资金;买入之前还需更新实时价格,计算评分等等;这写流程执行的过程中,如果前面的流程执行出错或者没有产生对应的输出,就会导致后面的流程也出错,为了保证程序的健壮性,嵌套了大量IF-ELSE的逻辑判断,核心流程方法代码长达一千二百行,代码的可读性非常差,设计不够简洁优雅采用工作流模式的目的,是为了将这些相对独立的流程解耦合,哪怕前面的流程出错,对后面的流程影响也不大,因为每个流程的输入输出已经进行了持久化。例如,今天的价格预测任务执行失败了,评分数据更新不及时,仍然可以使用上次预测的评分来执行买入工作流,虽然不准但是不会出错将这些独立的工作流按照合理的时间线组织起来,就能完成每天的业务流程正常运转且程序不会出错导致异常崩溃任务执行时序图:

实时价格同步任务

股票卖出任务

模型预测任务

股票买入任务

订单同步任务

历史价格同步任务

模型训练任务

MySQL

Mongo

MySQL

Mongo

磁盘

MySQL

MySQL

股票信息同步任务

数据清理任务

数据初始化任务

每日执行任务

周期执行任务

MySQL

MySQL

Mongo

9:30

12:00

13:30

13:00

15:30

全局一次

每周六一次

每月一次

权限刷新任务

每三天一次

每半月一次

股市交易时间段为:90:30-11:30    13:00-15:00

9:00

MySQL

每日执行任务:实时价格同步任务:每个交易日早上执行,同步所有股票最新的价格,更新到Redis股票卖出任务:每个上午交易时间段执行,卖出完毕后将交易记录和交易订单写入到MySQL历史价格同步任务:每个交易日的中午执行,将所有股票今天最新的开盘收盘价,写入Mongo模型预测任务:每个交易日的中午执行,预测明天的开盘收盘价格。将数据写入MySQL股票买入任务:每个交易日的下午执行,买入成功后将交易记录和订单记录写入MySQL同步订单任务:每个交易日的晚上执行,将今天产生的成交订单,同步到MySQL周期执行任务:股票信息同步任务:每三天同步一次,补充新上市的股票和标记已经退市的股票模型训练任务:每周的非交易日(周六周日)执行,将本周最新产生的数量与历史数据叠加,用于模型的增量迭代训练,训练完成后将模型保存到磁盘权限刷新任务:更新每支股票的交易权限,每半年一次数据清理任务,每个月执行一次,请里系统运行产生的无用数据和过量历史数据数据初始化任务:项目初始化或者历史价格数据丢失的时候执行,只需全局执行一次问题说明技术选型问题为什么使用DL4J而不是Tensorflow或PyTorch来做深度学习模型实现?这是一个面向业务的项目,使用Java的深度学习框架能够更好的与业务集成,对于开发者来说,使用一门熟悉的语言来能更快的实现业务,如果是初学者,没有语言负担的话,建议使用Python+Tensorflow,更加简单易上手为什么使用QuartZ而不是xxlJob或者SpringSchedule?根据项目需求以及最小化设计原则,Schedule不能满足动态修改执行时间和主动触发的需求,而分布式调度显然又太重了,这个项目不需要用到分布式,单节点就足够了,而使用分布式调度的话会引来新的分布式调度同步问题,增加了系统的复杂度,违背项目设计原则为什么不使用mini-cube或者docker?根据最小化设计原则,确实应该使用docker或者jar包来运行,但这是出于学习的目的,因为我工作所接触的项目都是K8S的微服务项目,所以我自己部署一套单节点的K8S集群,以供我学习实验或者跑一些自己的项目为什么不使用Security+JWT来做认证授权?基于最小化设计原则,我的目标用户是个人及访客,基于Web拦截器就可以实现,项目中甚至不包含用户表,目前只有admin, guest, test三个用户,如果是出于学习或者做toB项目,使用Shiro/Security+RBAC,是更常见的做法如何对接其他证券平台或者其他模型预测算法?在Job模块目录下,预留了一个IDataService接口,只要实现该接口,能提供对应平台的数据,model模块下也预留了个IModelService接口,使用其他算法模型实现该接口,利用Java多态和Spring注入功能,即可无缝对接业务策略问题为什么采用T+1短线交易策略而不是T+N?在改项目的2.0版本中,我采用的是T+N的交易模式,即今天买入等到合适的时间点卖出,但是实际的交易结果并不理想,10000元本金,运行不到1个月,亏损约为1200元,持股时间长的,基本亏损较多,可以在交易记录中查到因为股票市场本身是T+1周期的,而LSTM模型由于神经网络本身的特点,在T+N周期上的预测并不理想,只能采用T+1的预测模式。而这跟股市的T+1周期本身是冲突的,所以拆成了两个T+0.5的模式,来完成每日买卖的业务流运转到底应该采用"大"模型还是"小"模型?尝试过针对每只股票训练独有的"小"模型来进行预测,但是模型的测试结果并不理想,因为针对单只股票可供训练的历史数据太少了,通过平台接口获取到的历史数据只有500条,这对人工神经网络的训练来说太少了,不足以让机器学到样本数据特征,于是放弃了独有模型,训练统一模型,用4000支股票,每支500条,每天4个价格,共8,000,000数据量来进行模型训练有没有资金风险或者账号泄露安全问题(待优化)?本项目的出发点是用机器和算法来代替人执行买卖动作,需要用到个人资金账号,需要在Redis导入资金账号和加密后密码,执行登录后的逻辑,所以会有账号泄露的风险,但是不会有资金风险,就算账号泄露,资金提现也只能提现到该账户对应实名银行卡下为什么是采用每天的上午开盘收盘价来实现预测,输入输出维度是2->2?参阅过很多LSTM模型股票预测模型的代码,主流方式大致相同,有以下三种方案:用每天的开盘价,收盘价,最高价,最低价4条样本特征来预测明天的4个价格,输入输出维度为:4->4用每天的开盘价,收盘价,最高价,最低价4条样本特征来预测明天的1个价格,输入输出维度为:4->1用每天的开盘价,收盘价,最高价,最低价1条样本特征来预测明天的1个价格,输入输出维度为:1->1因为我是对明天卖出价格进行预测来指导今天的股票买入,如果采用4->4或者4->1的预测方案,则需等到当天的4个数据全部产生才能进行预测,此时已经过了当天的交易时间段,所有只能等第二天才能买入,股票买入后又要等一天才能卖出,所以实际交易时间段为T+2,失去了LSTM价格预测的准确性尝试过采用1->1方式进行预测,在测试集上表现的结果并不理想,故此采用2->2的输入输出预测模型

相关文章:

StockTrading AI小模型股票自动交易系统 转载

Stock-Trading StockTrading AI小模型股票自动交易系统 项目文档 Stock-Trading 语雀 项目展示 功能介绍 对接证券平台,实现股票自动化交易使用QuartZ定时任务调度,每日自动更新数据使用DL4J框架实现LSTM模型指导股票买入,采用T1短线交易策…...

01背包问题合集 蓝桥OJ

一、蓝桥OJ 1174小明的背包1 模板题 思路: 用二维数组dp判断最大价值,i表示物品数量,j表示物品体积,如果 j > V 则无需继续, j > w 物品还能再增加,同样价值也增加,否则继承之前的价值&am…...

Nuxt3 实战 (三):使用 release-it 自动管理版本号和生成 CHANGELOG

release-it 能做什么? 增加版本号并提交 Git生成变更日志(Changelog)并提交到 Git创建 Git 标签并推送到远程仓库发布到 npm 等软件仓库在 GitHub、GitLab 等平台创建发行版 前置知识 在看这篇文章之前,我们有必要了解一下 Sem…...

鸿蒙OS开发实战:【自动化测试框架】使用指南

概述 为支撑HarmonyOS操作系统的自动化测试活动开展,我们提供了支持JS/TS语言的单元及UI测试框架,支持开发者针对应用接口进行单元测试,并且可基于UI操作进行UI自动化脚本的编写。 本指南重点介绍自动化测试框架的主要功能,同时…...

算法(二分查找)

1.给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1&#xf…...

运筹学基础(六)列生成算法(Column generation)

文章目录 前言从Cutting stock problem说起常规建模Column generation reformulation 列生成法核心思想相关概念Master Problem (MP)Linear Master Problem (LMP)Restricted Linear Master Problem (RLMP)subproblem(核能预警,非常重要) 算法…...

[阅读笔记] 电除尘器类细分市场2023年报

0.原始链接: 2023年除尘行业评述及2024年发展展望-北极星大气网 中国环保产业协会 供稿 1.重要信息摘录 市场占有率最大的是电除尘和袋式除尘行业装备产品名录: 国家鼓励发展的重大环保技术装备目录(2023年版)权威评审机构:…...

Kubernetes学习笔记11

k8s集群核心概念:pod: 在K8s集群中是不能直接运行容器的,K8s的最小调度单元是Pod,我们要使用Pod来运行应用程序。 学习目标: 了解pod概念: 了解查看pod方法 了解创建pod方法 了解pod访问方法 了解删除…...

✌2024/4/3—力扣—无重复字符的最长子串

代码实现&#xff1a; 解法一&#xff1a;暴力法 int lengthOfLongestSubstring(char *s) {int hash[256] {0};int num 0;for (int i 0; i < strlen(s); i) {int count 0;for (int j i; j < strlen(s); j) {if (hash[s[j]] 0) {hash[s[j]];count;num num > cou…...

Tauri 进阶使用与实践指南

Tauri 进阶使用与实践指南 调试技术 在 Tauri 应用开发中&#xff0c;调试分为两大部分&#xff1a;Web 端与 Rust 控制台。 Web 端调试 在 Web 端界面&#xff0c;可以直接采用浏览器内置的开发者工具进行调试。在 Windows 上&#xff0c;可以通过快捷键 Ctrl Shift i 打…...

2024年最新社交相亲系统源码下载

最新相亲系统源码功能介绍 参考&#xff1a;相亲系统源码及功能详细介绍 相亲系统主要功能 &#xff08;已完成&#xff09; 相亲系统登录注册 相亲系统会员列表 相亲系统会员搜索 相亲系统会员详情 相亲系统会员身份认证 - 对接阿里云 相亲系统资源存储 - 对接七…...

git知识

如何将develop分支合并到master分支 #简单版 git checkout master git pull origin master git merge origin/develop # 解决可能的冲突并提交 git push origin master#复杂版 git checkout master # 拉取远程 master 分支的最新代码并合并到本地 git pull origin master # 拉…...

代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球

代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球 860.柠檬水找零 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯…...

golang defer实现

derfer : 延迟调用&#xff0c;函数结束返回时执行&#xff0c;多个defer按照先进后出的顺序调用 原理&#xff1a;底层通过链表实现&#xff0c;每次新增的defer调用&#xff0c;通过头插法插入链表&#xff1b;defer执行时&#xff0c;从链表头开始遍历&#xff0c;相当于实…...

数据仓库实践

什么是数据仓库&#xff1f; 数据仓库是一个用于存储大量数据并支持数据分析与报告的系统。它通常用于集成来自不同来源的数据&#xff0c;提供一个统一的视图&#xff0c;以便进行更深入的分析和决策。 数据仓库的主要优势&#xff1f; 决策支持&#xff1a;为企业决策提供可靠…...

深入浅出 -- 系统架构之微服务标准组件及职责

我们来认识一下微服务架构在Java体系中依托哪些组件实现的。 相对于单体架构的简单粗暴&#xff0c;微服务的核心是将应用打散&#xff0c;形成多个独立提供的微服务&#xff0c;虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题&#xff1a; 1…...

IP协议中的四大支柱:DHCP、NAT、ICMP和IGMP的功能剖析

DHCP动态获取 IP 地址 我们的电脑通常都是通过 DHCP 动态获取 IP 地址&#xff0c;大大省去了配 IP 信息繁琐的过程。 客户端首先发起 DHCP 发现报文&#xff08;DHCP DISCOVER&#xff09; 的 IP 数据报&#xff0c;由于客户端没有 IP 地址&#xff0c;也不知道 DHCP 服务器的…...

基于Socket简单的UDP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 1.前言 网络编程前言 网络编程是连接数字世界的桥梁&#xff0c;它让计算机之间能够交流信息&#xff0c;为我们的生活和工作带来便利…...

计算机思维

计算机思维是一种运用计算机科学的基础概念和方法来解决问题、设计系统和理解人类行为的思维方式。它包括以下几个方面&#xff1a; 1. 抽象和建模&#xff1a;将复杂的现实问题抽象为计算机可以处理的模型&#xff0c;通过定义对象、属性和关系来构建问题的逻辑结构。 2. 算法…...

如何判断一个linux机器是物理机还是虚拟机

https://blog.csdn.net/qq_32262243/article/details/132571117 第一种方式&#xff1a;dmesg命令 [rootnshqae01adm03 ~]# dmesg | grep -i hypervisor [ 0.000000] Hypervisor detected: Xen PV [ 1.115297] VPMU disabled by hypervisor. 在我的机器上 dmesg也是能够用来判…...

python用requests的post提交data数据以及json和字典的转换

环境&#xff1a;python3.8.10 python使用requests的post提交数据的时候&#xff0c;代码写法跟抓包的headers里面的Content-Type有关系。 &#xff08;一&#xff09;记录Content-Type: application/x-www-form-urlencoded的写法。 import requestsurlhttps://xxx.comheade…...

【Datax分库分表导数解决方法】MySQL_to_Hive

Datax-MySQL_to_Hive-分库分表-数据同步工具 简介&#xff1a; 本文档介绍了一个基于Python编写的工具&#xff0c;用于实现分库分表数据同步的功能。该工具利用了DataX作为数据同步的引擎&#xff0c;并通过Python动态生成配置文件&#xff0c;并调用DataX来执行数据同步任务…...

Vue2 —— 学习(一)

目录 一、了解 Vue &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;Vue 特点 &#xff08;三&#xff09;Vue 网站 1.学习&#xff1a; 2.生态系统&#xff1a; 3.团队 二、搭建 Vue 开发环境 &#xff08;一&#xff09;安装与引入 Vue 1.直接引入 2.N…...

Windows Server 2008添加Web服务器(IIS)、WebDAV服务、网络负载均衡

一、Windows Server 2008添加Web服务器&#xff08;IIS&#xff09; &#xff08;1&#xff09;添加角色&#xff0c;搭建web服务器&#xff08;IIS&#xff09; &#xff08;2&#xff09;添加网站&#xff0c;关闭默认网页&#xff0c;添加默认文档 在客户端浏览器输入服务器…...

SpringMVC转发和重定向

转发和重定向 1. View Resolver Spring MVC 中的视图解析器&#xff08;View Resolver&#xff09;负责解析视图。可以通过在配置文件中定义一个 View Resolver 来配置视图解析器&#xff1a; 配置文件版&#xff1a;spring-web.xml <!-- for jsp --> <bean class&q…...

勒索病毒最新变种.rmallox勒索病毒来袭,如何恢复受感染的数据?

导言&#xff1a; 随着信息技术的飞速发展&#xff0c;网络安全问题日益突出&#xff0c;其中勒索病毒便是近年来备受关注的网络安全威胁之一。在众多勒索病毒中&#xff0c;.rmallox勒索病毒以其独特的传播方式和强大的加密能力&#xff0c;给广大用户带来了极大的困扰。本文…...

复试专业课问题

1、数据结构&#xff1a;详细描述归并排序的过程 归并排序是用分治思想&#xff0c;分治模式在每一层递归上有三个步骤&#xff1a; 分解&#xff08;Divide&#xff09;&#xff1a;将n个元素分成个含n/2个元素的子序列。解决&#xff08;Conquer&#xff09;&#xff1a;用…...

比特币革命:刚刚开始

作者&#xff1a;Marius Farashi Tasooji 编译&#xff1a;秦晋 要充分理解比特币及其含义&#xff0c;首先必须理解什么是价值&#xff0c;什么是货币。以及是什么赋予资产价值&#xff1f; 这个问题看似愚蠢&#xff0c;但实际上非常有趣。我们的生活是由我们消费或出售的物品…...

淘宝店商家电话提取软件操作经验

淘宝爬虫工具是一种用于自动化获取淘宝网站数据的程序。以下是一个简单的淘宝爬虫工具的代码示例&#xff1a; import requests from bs4 import BeautifulSoupdef get_taobao_data(keyword):url fhttps://s.taobao.com/search?q{keyword}headers {User-Agent: Mozilla/5.0…...

【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)

基于python语言&#xff0c;采用经典蚁群算法&#xff08;ACO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段…...