1 绪论

1.1 研究背景及现状

1.1.1 研究背景

近年来,金融科技的快速发展深刻改变了传统证券投资的分析范式。量化交易作为融合计算机科学、数学建模与金融理论的交叉领域,已在全球资本市场上占据重要份额。据Statista 2024年发布的数据,全球量化交易市场规模已突破150亿美元,预计到2028年将保持年均11.2%的复合增长率。中国市场方面,随着注册制改革的深入推进与衍生品工具的持续丰富,量化策略的资金管理规模在2023年末已超过1.5万亿元人民币,较三年前增长了近四倍。然而,行业高速扩张的背后暴露出结构化矛盾:头部量化机构的算法模型与算力资源高度集中,中小投资者与独立研究者难以接触到具备实战价值的量化工具;市面多数商业平台或聚焦于单一的技术指标回测,或仅提供基础的数据可视化功能,鲜有将深度学习预测、大语言模型分析与策略回测进行系统性整合的方案。

学术界对股票价格预测的研究经历了从传统时间序列分析到机器学习方法的演进。早期研究多基于ARIMA模型及其变体处理线性时序特征,随后支持向量机、随机森林等浅层模型被引入以捕捉非线性关系。自2015年起,循环神经网络特别是长短期记忆网络在金融时序预测领域展现出处理长期依赖的优势,但多项研究指出,单一LSTM模型在面对高噪声、多因素交织的金融市场时仍存在特征提取能力不足的问题。与此同时,大语言模型的快速迭代为金融文本分析与市场情绪捕捉提供了新路径,但将大模型分析能力与定量预测模型进行有效结合的研究仍处于探索阶段。

综合来看,现有研究与应用存在两方面明显缺口:其一,面向普通投资者的集成化量化平台稀缺,多数开源方案在功能完整性、操作易用性方面存在短板;其二,深度学习预测模型与智能分析模块的融合实践不足,已有工作多将两类技术割裂处理,未能形成从数据获取到决策辅助的完整闭环。针对上述问题,本文设计并实现了一个整合LSTM价格预测、DeepSeek智能分析及多策略回测功能的量化交易系统,旨在探索深度学习与人工智能技术在量化投资领域的协同应用方式,为降低量化分析门槛提供可行方案。

1.1.2 研究现状

量化交易系统的研究涉及计算机科学、金融工程、统计学与机器学习等多个学科的交叉。相较于欧美发达市场,国内量化交易研究起步较晚,但近年来伴随金融数据基础设施的完善与人工智能技术的快速渗透,相关研究呈现出加速发展态势。

从预测模型角度看,现有研究大致可分为三类。第一类以传统计量经济学方法为基础,如ARIMA模型与GARCH族模型,此类方法对线性时序关系具有较好的捕捉能力,但对市场数据的非线性特征处理不足。第二类采用支持向量机、随机森林等浅层机器学习模型,在特征维度扩展方面较传统方法有所改进,然而对时序依赖关系的建模深度有限。第三类则聚焦于深度学习方法,特别是LSTM网络及其变体,在股票价格预测任务上取得了明显优于前两类方法的性能表现。近年来,注意力机制与Transformer结构的引入进一步提升了模型对长距离时序特征的提取效果。此外,大语言模型在金融文本分析与市场情绪识别领域的应用逐渐成为新的研究热点。

从系统构建角度看,现有量化平台普遍存在两方面不足:一是多数研究聚焦于单一算法的性能优化,缺乏覆盖数据获取、模型训练、策略回测到决策辅助的完整系统设计;二是面向普通投资者与独立研究者的低门槛、全流程集成化工具仍较为匮乏,已有开源方案在功能完整性与易用性方面存在明显短板。上述问题构成了本文系统设计的切入点。

1.2 深度学习量化交易领域技术发展

在传统的量化交易过程中,交易策略主要依赖统计模型与人工构建特征,其对金融时间序列中复杂非线性关系的刻画能力有限。随着金融市场数据规模的不断增长以及计算能力的显著提升,深度学习因其强大的特征表示能力和非线性建模能力逐渐被引入量化交易研究中。通过构建多层神经网络结构,深度学习模型能够从原始市场数据中自动学习潜在特征,从而减少对人工经验和特征工程的依赖,并提高对复杂市场动态的刻画能力。

Fischer 与 Krauss在文献[2]中将LSTM应用于股票市场预测研究,利用 LSTM 的门控结构建模金融时间序列中的长期依赖关系。研究结果表明,LSTM 在股票收益预测任务中的表现优于传统统计模型和部分机器学习方法,该研究为深度学习方法在量化交易中的应用奠定了基础。后续杨青等、欧阳红兵等进一步将其应用于股票指数与金融时序预测,解决了传统时序模型的长期依赖丢失问题。在此基础上,相关研究逐渐从单一模型应用扩展到对深度学习在量化交易领域整体应用的系统总结。Wang 与 Yan在综述研究中系统总结了深度学习在算法交易中的应用现状,指出深度学习模型能够通过端到端学习方式自动提取金融数据中的潜在特征,在处理高维数据和复杂非线性关系方面具有显著优势。同时,该研究也指出,深度学习模型在金融市场中的应用效果高度依赖于数据质量、样本规模以及模型结构设计,如果训练数据不足或市场环境发生变化,模型可能出现过拟合或预测能力下降的问题[8]。除开上述的中低频时间序列预测之外,深度学习还被广泛应用于高频交易和市场微观结构研究。在高频交易场景中,Zhang 等提出的 DeepLOB 模型通过卷积神经网络对限价订单簿(Limit Order Book)数据进行深层特征提取。该模型利用卷积层提取订单簿中的局部空间特征,并结合序列结构捕捉订单流随时间变化的动态特征,从而实现对短期价格变动方向的有效预测。研究表明,DeepLOB 模型能够在复杂且噪声较大的高频数据环境中识别潜在交易信号,为利用微观市场结构信息进行量化交易提供了新的技术路径[1]。

金融市场中的价格、收益率和成交量等数据通常具有明显的时间依赖性,因此时间序列建模一直是量化交易研究的重要内容。传统的时间序列模型如 ARIMA、GARCH 等虽然能够刻画部分统计特征,但在处理复杂非线性关系以及长期依赖问题时则表现较差。随着深度学习的发展,循环神经网络(Recurrent Neural Network,RNN)因其能够对序列数据进行建模而被逐渐引入金融时间序列预测领域。RNN 通过在网络结构中引入循环连接,使模型能够利用历史信息对当前状态进行建模,从而捕捉时间序列中的动态变化特征。但是 RNN 在处理长序列数据时容易出现梯度消失或梯度爆炸问题,导致模型难以学习长期依赖关系。

为解决这一问题, LSTM被提出并被广泛应用于金融时间序列分析。LSTM 通过引入输入门、遗忘门和输出门等门控结构,能够有效控制信息在网络中的传递与遗忘,从而缓解了传统 RNN 在长序列训练中的梯度问题,使模型能够更好地捕捉长期依赖信息。Fischer 与 Krauss(2018)在文献[2]中将 LSTM 应用于股票市场收益预测,通过对大量股票历史数据进行训练,结果表明 LSTM 在预测准确率和交易策略收益方面均优于部分传统统计模型和机器学习方法,为深度学习在量化交易领域的应用提供了重要实证支持。

此外,在这一领域上国内外学者也进行了许多的相关研究。杨青等将 LSTM 网络应用于全球股票指数预测,通过构建多层 LSTM 模型分析指数价格的时间序列特征,提高了对市场走势的预测能力[14]。欧阳红兵等则进一步研究了基于 LSTM 的金融时间序列预测方法,通过对股票价格数据进行实验分析,验证了该模型在非线性时间序列建模中的有效性,并指出 LSTM 在捕捉长期依赖关系方面具有明显优势[15]。这些研究表明,循环神经网络特别是 LSTM 模型能够在复杂金融市场环境中提取有效的时序特征,为量化交易中的价格预测和交易信号生成提供了重要的技术支持。

RNN与LSTM虽已被应用于股票价格预测和市场趋势分析。但仍然存在一定的局限性。这类模型在时间序列建模中通常依赖逐步递归计算,难以进行高效并行处理,在处理长时间序列数据时计算效率较低。其次,随着序列长度增加,模型对远距离信息的捕捉能力仍然有限,重要历史信息可能在多次传递过程中逐渐衰减。为了解决上述问题注意力机制(Attention Mechanism)被提出并逐渐应用于序列建模任务。

注意力机制最初源于自然语言处理领域,其核心思想是通过对输入信息赋予不同权重,使模型能够更加关注与任务相关的重要特征,从而提高模型表达能力和预测性能。Vaswani 等人在文献[3]中提出了 Transformer 模型,该模型首次完全基于自注意力机制(Self-Attention),并证明了在序列建模任务中无需依赖循环神经网络或卷积神经网络即可实现高效的信息建模[3]。其大幅提升了长序列依赖关系的学习能力,为时间序列分析与金融预测研究提供了新的方法框架。Wood 等在文献[4]中提出了 Momentum Transformer,将 Transformer 架构引入资产收益率预测。通过自注意力机制自动学习不同资产和时间尺度之间的关系,在多资产投资组合预测任务中表现出较强的解释性与预测能力。

1.3 本文主要解决的问题

基于前述研究背景与现状分析,本文围绕深度学习驱动的量化交易系统设计与实现,主要解决以下问题:

1)基于Flask Web框架搭建轻量级量化交易平台,实现股票数据的多源获取、结构化存储与预处理功能,构建涵盖数据管理、模型训练、策略回测与结果展示的完整功能链路,降低量化分析的技术使用门槛。

2)设计并实现基于双层LSTM神经网络的股票价格预测模型,参考经典时间序列建模方法优化序列长度、训练轮次等核心参数,使模型在方向预测准确率等关键指标上达到可用水平,确保预测算法的有效性与泛化能力。

3)构建多策略回测引擎,实现买入持有、动量策略及LSTM驱动策略的对比回测功能,计算总收益率、最大回撤、夏普比率等绩效指标,并以净值曲线、回撤折线图等可视化形式呈现回测结果,使分析结论直观易懂。

4)引入DeepSeek大语言模型API,在数值预测基础上扩展市场趋势分析与交易信号解释功能,形成“数据驱动预测结合语言模型增强分析”的双引擎决策辅助架构,拓展量化平台的应用深度。

1.4 本文的组织结构

论文第一章从空间数据挖掘的背景展开,表明了设计数据挖掘平台的目的及意义。第二章讲述平台搭建涉及到的相关理论和技术。第三章从基本需求、平台架构、功能模块、算法设计和数据库规划等方面来介绍空间数据挖掘平台的整体设计思路。第四章陈述平台的设计实现,并在选定的数据集上进行具体的实践应用,测试平台功能。第五章是本文的总结与展望。

2 相关理论及技术

2.1 相关技术

2.1.1 Flask框架

Flask是一个基于Python语言的轻量级Web应用框架。与Django等全栈框架相比,Flask的设计遵循微内核理念,核心只包含请求路由、模板渲染等基础功能,其余能力通过扩展机制按需集成。这种架构使得开发者能够以较少的代码量构建功能完整的Web服务,同时保持较高的定制灵活性。

Flask的请求处理流程以Werkzeug工具库为底层支撑。当客户端发起HTTP请求后,服务器首先通过路由分发器将URL映射到对应的视图函数,视图函数执行业务逻辑后返回响应数据。Flask内置的开发服务器支持热重载,便于调试阶段的快速迭代。在生产环境中,可通过Gunicorn或uWSGI等WSGI服务器部署运行。

在本系统中,Flask承担后端服务的核心角色。系统通过蓝图机制将认证、数据、模型、回测、管理等模块进行解耦组织,各蓝图以路由前缀区分,实现了功能的模块化划分。跨域资源共享配置使前端页面能够独立部署并正常访问后端接口,前后端分离的交互模式提升了系统的可维护性。Flask-Login扩展提供了用户认证与会话管理能力,基于装饰器的权限校验机制保护了受限接口的访问安全。

2.2 SQLite数据库

SQLite是一种嵌入式关系型数据库管理系统,区别于MySQL、PostgreSQL等客户端—服务器架构的数据库,SQLite以库文件形式直接嵌入应用程序进程中运行,无需独立部署数据库服务。

SQLite的数据存储以单个磁盘文件为单位,所有数据库对象如表、索引、视图均封装在同一文件内。这一特性显著简化了系统部署与迁移流程,开发者无需配置数据库连接参数与管理后台,只需持有文件即可完整复现数据库状态。SQLite支持SQL-92标准的大部分子集,包括事务的ACID特性、多表连接查询、子查询及触发器等功能。在并发控制方面,SQLite采用文件级锁定策略,适用于中等以下并发的业务场景。

本系统选用SQLite作为持久化数据库,主要考量其零配置部署优势与项目规模适配性。量化交易系统面向单用户或小组使用场景,并发量有限,SQLite完全能够满足性能要求。数据库文件存储于项目本地路径下,通过Flask-SQLAlchemy扩展提供的对象关系映射接口进行读写操作,开发者以Python对象操作数据库记录,降低了直写SQL语句带来的维护复杂度。

2.3 LSTM神经网络

长短期记忆网络(Long Short-Term Memory,LSTM)是循环神经网络的一种特殊变体,由Hochreiter与Schmidhuber于1997年提出。传统RNN在处理长序列数据时,反向传播过程中梯度经过连续乘法运算容易出现指数级衰减或爆炸,导致模型难以捕捉较远时间步的信息依赖。LSTM通过引入门控机制有效缓解了这一问题。

LSTM单元的核心结构包含三个门控单元和一个细胞状态。遗忘门决定前一时刻细胞状态中哪些信息应当被舍弃,其计算方式为前一时刻隐藏状态与当前输入的线性组合经Sigmoid函数激活,输出值介于零到一之间,零代表完全遗忘,一代表完全保留。输入门负责筛选新信息中需要存入细胞状态的部分,包括Sigmoid决定更新比例和Tanh生成候选状态两个步骤。细胞状态更新环节将遗忘门作用于旧状态的保留部分与输入门筛选的新增信息相加,完成状态迭代。输出门控制细胞状态中哪些信息作为当前时刻的隐藏状态对外输出。这种设计使LSTM能够在较长时间范围内选择性记忆关键信息、遗忘无关内容,克服了标准RNN的长期依赖困境。

本系统计划使用使用双层 LSTM 结构,第一层 LSTM 单元数为 50,Dropout 率为 0.2,输出层使用 Dense 层预测股票收盘价。损失函数采用均方误差(MSE),优化器使用 Adam,学习率默认为 0.001。

2.4 交易策略

对于量化交易系统而言,在完成模型训练与价格预测后,需将预测结果转化为可执行的交易策略,并通过历史回测验证策略的有效性。该系统选取了两种具有代表性的交易策略,分别为买入持有策略和动量策略。

买入持有策略是一种最基础、最经典的长期投资策略。其核心思想是在回测开始时买入标的资产,在整个回测期间持续持有,直到回测结束时再统一卖出。该策略不频繁交易,能够较好反映标的资产在整个样本区间内的长期收益情况

动量策略的基本思想是:如果资产价格在过去一段时间内呈现上涨趋势,则该趋势在短期内可能继续延续;反之,如果价格在过去一段时间内持续下跌,则未来可能仍存在下跌惯性。

为了客观评价交易策略在历史市场中的表现,系统在回测过程中引入了多个常用绩效指标,从收益性和风险性两个方面对策略进行量化分析。本系统主要采用总收益率、最大回撤和夏普比率作为核心评价指标。

2.5 DeepSeek大语言模型

DeepSeek是由深度求索公司研发的大语言模型系列,具备自然语言理解与文本生成能力。模型基于Transformer架构,通过海量语料的预训练学习语言的内在规律与知识表示,能够在对话、分析、推理等任务中输出流畅连贯的文本内容。

DeepSeek以API服务形式对外提供调用接口,使用者通过发送包含系统提示词与用户消息的请求体即可获取模型响应。系统提示词用于设定回复的角色定位与风格约束,用户消息承载具体的分析需求。请求参数中的温度值控制输出的随机性程度,较低的温度使回复趋于确定性,适用于分析类任务;最大令牌数限制单次回复长度。

在本系统中,DeepSeek作为AI分析模块的核心推理引擎被引入。传统量化工具仅依靠统计与数值模型生成预测,缺乏对市场背景、宏观经济因素及风险语义的解释能力。系统调用DeepSeek API时,通过在提示词中注入市场分析师的角色定义与分析框架要求,使模型能够综合用户查询与股票代码信息输出结构化的市场解读。这种将数值预测与大模型语义推理相结合的双引擎设计,弥补了纯定量方法在可解释性方面的不足,为投资决策提供更具上下文感知能力的辅助信息。

3 深度学习量化交易系统框架

3.1 系统需求

本文旨在设计并实现一个基于深度学习的量化交易系统。作为面向普通投资者与独立研究者的辅助分析工具,系统不以替代专业金融终端为目标,而是着眼于将深度学习预测能力与大语言模型分析能力以低门槛方式整合呈现,形成一套覆盖数据获取、模型训练、策略回测与智能分析全流程的应用平台。

一个完整的量化交易分析系统需要实现的功能主要包括:股票数据的多源获取与规范化存储、LSTM预测模型的参数化训练与评估、多种交易策略的历史回测与绩效计算、基于大语言模型的市场智能分析以及分析结果的可视化展示。

数据获取方面,系统需同时支持从外部数据源自动拉取与本地CSV文件导入两种方式,确保在不同网络环境下均可完成数据准备工作。数据存储需经过格式校验与去重处理,保证后续建模环节的数据质量。

模型训练方面,使用者应能自主配置LSTM网络的序列长度、训练轮次、批次大小、学习率及Dropout率等核心超参数,训练完成后系统需返回均方根误差、方向预测准确率等评估指标,并将模型文件持久化保存以供后续预测调用。

回测方面,系统需提供多种策略模板,包括买入持有、动量策略以及基于LSTM预测信号的策略,回测完成后需计算总收益率、最大回撤、夏普比率及胜率等关键绩效指标,并以净值曲线等形式可视化呈现。

分析增强方面,系统需集成大语言模型接口,在数值预测基础上提供自然语言形式的市场趋势解读与风险提示,弥补纯定量分析在可解释性方面的不足。

此外,系统需设置用户认证与权限分级机制,区分普通用户与管理员的操作范围,管理员可进行用户状态管理、系统配置调整及数据清理等运维操作。

3.2 整体设计

3.2.1 平台架构

本文设计的量化交易系统整体架构如图3-1所示,依照B/S架构开发,分为客户端与服务器端两部分。

客户端通过浏览器呈现系统页面,加载HTML、CSS及JavaScript等静态资源完成前端界面渲染,借助ECharts图表库实现回测净值曲线、价格走势等可视化图表的交互展示。页面通过HTTP协议向服务器端发送异步请求,将主要业务逻辑交由后端处理,前端专注于数据呈现与用户交互。

服务器端分为三个核心层次:Web服务层、业务逻辑层与数据持久层。Web服务层以Flask框架为基础,通过Werkzeug工具库解析HTTP请求,经路由分发机制将不同URL前缀的请求导向对应的蓝图模块。业务逻辑层包含数据获取服务、LSTM模型服务、回测引擎及DeepSeek客户端四个核心组件,各组件以独立类形式封装,通过统一接口供视图函数调用。数据持久层以SQLite数据库为存储载体,借助Flask-SQLAlchemy扩展提供的对象关系映射接口完成数据读写操作,并通过Flask-Login扩展管理用户会话状态。

系统各层次间采用松散耦合设计,视图函数不直接操作数据库,而是通过服务类与数据模型间接完成业务处理,便于后续功能扩展与维护。

图3-1 平台架构图

3.2.2 概要设计

基于3.1节的系统需求描述,系统功能模块的组织方式如图3-2所示。前端操作界面采用HTML5与Bootstrap框架实现响应式布局,JavaScript负责异步数据交互与页面动态渲染。后端服务以Python语言编写,Flask框架承担请求路由与业务编排职责,SQLAlchemy作为数据库访问中间层隔离SQL细节。

系统依照用户角色划分为普通用户端与管理端两类操作入口。普通用户完成登录认证后,可进入仪表盘页面使用数据管理、模型训练、策略回测与AI分析四项核心功能。数据管理模块支持从Yahoo Finance获取数据或导入本地CSV文件,获取的数据经去重处理后存入数据库,并在前端以分页表格形式展示。模型训练模块允许使用者配置LSTM超参数并启动训练任务,训练过程中后端屏蔽TensorFlow的调试输出,完成后返回评估指标并将模型文件保存至指定目录。回测模块提供策略类型选择与参数设定功能,后端回测引擎遍历历史价格序列生成交易信号并计算绩效指标,前端以净值曲线图与交易明细表相结合的方式展示回测结果。AI分析模块接收使用者的自然语言查询,将查询内容与股票代码封装为提示词调用DeepSeek API,返回结构化的市场分析文本。

管理端仅对角色为admin的用户开放,包含仪表盘统计、用户管理、模型管理及系统设置四个功能区域。仪表盘展示用户数量、数据记录总数及回测次数等统计信息。用户管理支持查看所有注册用户列表及修改账户状态。系统设置涵盖LSTM默认参数调整、CSV历史数据上传及系统状态监控等功能。管理端与普通用户端共用后端蓝图路由,通过装饰器校验管理员权限实现接口保护。

综合上述设计,系统的业务流程如图3-2所示。使用者首先通过注册或登录获取会话凭证,随后选择数据获取方式建立股票数据集,继而可依次进行模型训练、策略回测与AI分析操作,各环节结果均可实时查看与导出。

图3-2 业务逻辑流程图

普通用户使用系统的时序流程如图3-2所示。使用者访问系统时首先进入登录页面,输入用户名与密码后前端通过异步请求将认证信息发送至auth_bp蓝图的路由处理函数,后端查询数据库校验凭证并调用login_user方法建立会话,校验通过后前端跳转至仪表盘页面并加载用户信息。进入数据管理功能后,使用者选择获取数据方式:若通过外部数据源拉取,前端将股票代码与时间周期参数提交至data_bp蓝图的fetch接口,后端调用DataFetcher服务从Yahoo Finance获取历史行情并存入stock_data表,返回入库记录数;若通过CSV文件导入,则使用FormData封装文件与股票代码上传至import接口,后端解析文件内容后批量写入数据库。数据准备完成后,使用者在模型训练界面填写模型名称、选择已存储数据的股票代码并设置超参数,提交后由model_bp蓝图的train接口接收,后端验证数据量后构建双层LSTM网络并启动训练,训练完成后将模型文件保存至本地目录并将配置与性能指标写入model_configs表。回测操作中,使用者选取股票代码、设定起止日期与策略类型后提交至backtest_bp蓝图的run接口,后端回测引擎遍历历史价格序列模拟交易并计算总收益率、最大回撤、夏普比率及胜率,结果存入backtest_results表后返回前端展示。AI分析操作中,使用者在分析界面输入股票代码与自然语言查询,系统将查询内容与预设提示词拼接后发送至DeepSeek API,返回的分析文本经前端渲染后展示。整个使用过程中,前端通过导航栏切换不同功能区域,各功能模块之间相互独立,数据经由数据库实现共享流转。

图3-3 系统设计时序图(普通用户)

管理员使用系统的时序流程如图3-3所示。管理员账号由系统后台直接指定,无法通过注册页面自行创建。登录时后端除校验用户名与密码外,还需验证role字段是否为admin,校验通过后方可进入管理端界面。管理端仪表盘加载时向admin_bp蓝图的dashboard接口发起请求,后台聚合users表、stock_data表、model_configs表及backtest_results表的记录数量并返回统计结果。用户管理功能中,管理员通过admin_bp蓝图的users接口获取所有注册用户列表,前端以表格形式展示用户名、邮箱、角色及激活状态,管理员点击切换按钮后由status接口更新对应用户的is_active字段,被禁用的账户再次登录时后端返回“账号已被禁用”提示。系统设置功能中,管理员可在LSTM配置面板调整sequence_length、epochs、batch_size等默认参数并通过config接口持久化;可上传CSV文件批量导入历史数据;可查看服务器CPU使用率、内存占用、磁盘空间及数据库文件大小等运行状态指标。管理员的所有操作均需通过admin_required装饰器的权限校验,该装饰器检查current_user对象的role字段值,非admin权限的请求均返回403错误响应。

图3-4 系统设计时序图(管理员)

普通用户平台使用的时序图如图3-3所示。用户登录时,首先判断用户的合规性,即填充格式是否正确,账号密码是否录入,该用户是否被禁止等等,在尚未通过后台检验时,普通用户只能使用有限的服务,如登录、注册、查看使用手册和联系开发人员。通过验证后,用户才可以进入主页,选择平台提供的多种功能:数据集的上传、任务设置、结果展示、账号信息等。具体的功能模块设计在3.3节陈述。尽管系统对用户的操作限制较小,一旦管理人员通过操作日志和账号细信息察觉到普通用户的不当操作,可以不经过当事人同意即可禁止该账号的使用,需要用户自行联系后台人员。

3.3 功能模块

本量化交易系统提供的所有功能如图3-3所示,由普通用户功能与管理端功能两部分组成。普通用户功能涵盖用户认证、数据管理、模型训练、策略回测及AI分析五个模块。管理端功能涵盖仪表盘统计、用户管理、模型管理及系统设置四个模块。各功能模块的具体设计如下所述。

3.3.1 用户认证

用户认证模块包含注册、登录与登出三项功能。注册时需提交用户名、邮箱及密码,系统在后端使用正则表达式校验输入格式:用户名限制为3至20个字符,仅允许字母、数字及下划线;邮箱需符合标准格式;密码长度不少于6个字符。校验通过后检查用户名与邮箱的唯一性,无冲突则创建用户记录并将密码经哈希运算后存入数据库。登录时根据用户名查询用户记录,验证密码匹配并检查账户激活状态,三项均通过后调用login_user方法建立会话。登出时清除会话信息并返回登录页面。前端表单在提交前使用JavaScript进行格式预检,后端执行二次校验以防止绕过前端验证的恶意请求。

3.3.2 数据管理

数据管理模块提供股票数据的获取、存储、查看与导入导出功能。数据获取支持两种途径:一是通过yfinance库从Yahoo Finance按指定时间周期拉取历史行情数据,获取的DataFrame经列名规范化处理后逐行写入数据库,若某日数据已存在则更新而非重复插入;二是通过CSV文件导入,系统解析上传文件中的日期、开盘价、最高价、最低价、收盘价及成交量字段,经验证后批量入库。数据查看界面以分页表格形式展示指定股票的OHLCV记录,同时汇总统计该股票的数据总量、起止日期及价格范围。股票列表接口返回数据库中每种股票代码的记录数量与日期区间,供下拉选择框动态加载。管理员用户可通过数据清理接口删除指定或全部股票数据。

3.3.3 模型训练

模型训练模块是系统的核心功能之一,负责LSTM神经网络的构建、训练与持久化。使用者在训练表单中填写模型名称、选择股票代码并设置序列长度、训练轮数、批次大小、学习率及Dropout率等超参数。后端接收参数后首先验证数据量是否满足序列长度的最低要求,随后使用MinMaxScaler对收盘价序列进行归一化处理,按序列长度构造输入样本并划分训练集与测试集。模型结构为双层LSTM,第一层返回完整序列并后接Dropout层,第二层直接连接输出层,以均方误差为损失函数、Adam为优化器。训练过程中禁用TensorFlow的OneDNN优化以避免与某些环境不兼容。训练完成后计算测试集上的均方根误差、平均绝对误差及方向预测准确率,将模型文件以HDF5格式保存至指定目录,并在数据库中更新模型配置记录的训练状态与性能指标。

3.3.4 策略回测

策略回测模块负责对交易逻辑进行历史数据模拟验证。系统内置三种策略模板:买入持有策略在回测期首日全仓买入、末日平仓卖出,作为被动投资的基准参照;动量策略以过去20个交易日的价格变动率为信号,动量为正则建仓、为负则清仓;LSTM策略使用训练完成的模型生成买卖信号。回测执行过程中,引擎按时间顺序遍历价格序列,根据策略信号模拟交易操作,考虑手续费与滑点因素影响实际成交价格,记录每日资产总值及交易明细。回测完成后计算总收益率、最大回撤、夏普比率及胜率四项核心指标,将每日收益率与交易历史以JSON格式存入回测结果表。前端展示包括净值曲线与回撤折线的双轴图表及交易明细列表,回测结果支持导出为CSV格式。

3.3.5 AI分析

AI分析模块依托DeepSeek大语言模型提供市场解读与趋势分析功能。使用者在分析界面输入股票代码与分析问题后,系统将问题文本与预设的系统提示词拼接为消息体,通过HTTP POST请求发送至DeepSeek API端点。系统提示词设定了量化交易分析师的角色定位,要求模型从市场概况、技术分析、风险评估与关键关注点四个维度组织回复内容。API返回的分析文本经前端渲染后展示在结果面板中。该模块还预留了趋势预测与交易信号获取接口,可根据传入的技术指标数据生成信号建议。

3.3.6 管理端功能

管理端面向系统管理员,提供全局视角的运维管理能力。仪表盘聚合展示用户总数、活跃用户数、股票数据记录数、模型数量及回测次数等统计指标。用户管理列表展示所有注册用户的用户名、邮箱、角色及激活状态,管理员可切换用户的启用与禁用状态。模型管理列表展示所有用户创建的模型配置及训练状态。系统设置页面允许管理员调整LSTM默认超参数、通过CSV文件上传批量历史数据,以及查看CPU使用率、内存占用、磁盘空间及数据库文件大小等服务器运行状态。系统备份功能将数据库文件复制至备份目录并以时间戳命名,清理功能支持按类型删除回测结果、模型记录或股票数据。。

3.4 算法设计

3.4.1 LSTM预测模型

本系统采用的双层LSTM预测模型前向传播过程如表3.1所示。输入数据为连续sequence_length个交易日的收盘价序列,经归一化后送入网络。第一层LSTM单元数为50,返回完整时间序列;Dropout率为0.2,随机丢弃部分神经元输出以防止过拟合。第二层LSTM单元数为50,仅返回最后时刻的输出。输出层为单神经元全连接层,不加激活函数,输出预测的归一化收盘价值。模型损失函数采用均方误差,优化器为Adam,学习率默认0.001。

模型训练完成后,使用测试集评估性能。将预测值反向归一化后,计算均方根误差衡量预测值与真实值的偏差幅度,计算方向预测准确率衡量模型对价格变动趋势判断的正确比例。方向准确率定义为相邻交易日价格变化方向预测正确的天数占比。

表3.1 双层LSTM模型结构与前向传播过程

层级

名称

参数配置

输入维度

输出维度

1

输入层

sequence_length=60

(batch, 60, 1)

(batch, 60, 1)

2

LSTM层1

units=50, return_sequences=True

(batch, 60, 1)

(batch, 60, 50)

3

Dropout层1

rate=0.2

(batch, 60, 50)

(batch, 60, 50)

4

LSTM层2

units=50, return_sequences=False

(batch, 60, 50)

(batch, 50)

5

Dropout层2

rate=0.2

(batch, 50)

(batch, 50)

6

输出层(Dense)

units=1, activation=None

(batch, 50)

(batch, 1)

3.4.2 回测绩效指标

回测引擎基于模拟交易产生的每日资产序列计算四项核心绩效指标。

总收益率反映回测期间资金的绝对增长幅度,计算公式为最终资产与初始资产的差额除以初始资产。该指标直观展示策略的盈利能力,但未考虑波动因素。

最大回撤衡量资金曲线从历史峰值到后续谷底的最大跌幅幅度。计算时遍历每日资产序列,维护历史最高净值的动态记录,逐日计算当前净值相对历史峰值的回落比例,取全程最大值。最大回撤表征策略在不利行情下的极端风险暴露程度,是评估策略稳健性的关键指标。

夏普比率将策略超出无风险利率的超额收益与收益波动率做比值,综合衡量风险调整后的回报水平。计算时首先将每日收益率年化(日收益率均值乘以252个交易日),然后计算年化波动率(日收益率标准差乘以根号252),最后以年化超额收益除以年化波动率得到比率值。本系统中无风险利率默认取2%。夏普比率越高,表明承担单位风险所获得的超额回报越高。

胜率统计盈利交易次数占全部交易次数的比例,反映策略信号的准确程度。计算时按顺序配对买入与卖出交易,若卖出收入大于买入成本则记为盈利交易。

3.5 数据库设计

3.5.1 数据库逻辑设计

本系统的数据库包含四张核心数据表,分别为用户表(users)、股票数据表(stock_data)、模型配置表(model_configs)及回测结果表(backtest_results),其结构设计如下所述。

图3-6 数据库ER图

3.5.2 数据表设计

用户表(users)存储系统账户信息,包含用户编号、用户名、邮箱、密码哈希、角色、创建时间、最后登录时间及激活状态八个字段,具体结构如表3.2所示。其中id为主键自增,username与email均设置唯一约束,role字段默认为user,取值为admin时代表管理员账户。密码经Werkzeug内置的哈希函数加密存储,不保存明文。is_active为布尔型字段,管理员可通过用户管理接口切换该字段值以控制账户使用权限。

表3.2 users表

字段名称

数据类型

长度

是否允许空

默认值

id

Integer

username

String

80

email

String

120

password_hash

String

256

role

String

20

'user'

created_at

DateTime

utcnow

last_login

DateTime

Null

is_active

Boolean

True

股票数据表(stock_data)存储每日行情数据,包含数据编号、股票代码、交易日期、开盘价、最高价、最低价、收盘价、成交量、复权收盘价及创建时间十个字段,具体结构如表3.3所示。symbol与date组成联合唯一约束,防止同一交易日数据重复插入。symbol与date字段均建立索引以加速按股票代码和日期范围的组合查询。volume字段使用BigInteger类型以适应高成交量股票的数据需求。

表3.3 stock_data表

字段名称

数据类型

长度

是否允许空

默认值

id

Integer

symbol

String

20

date

Date

open_price

Float

high_price

Float

low_price

Float

close_price

Float

volume

BigInteger

adj_close

Float

Null

created_at

DateTime

utcnow

模型配置表(model_configs)记录每次LSTM训练的参数与评估结果,包含配置编号、用户编号、模型名称、股票代码、序列长度、训练轮数、批次大小、学习率、Dropout率、创建时间、是否激活、模型文件路径及性能指标十三个字段,具体结构如表3.4所示。user_id为关联users表的外键,performance_metrics以JSON文本形式存储,包含均方根误差与方向准确率等评估值。model_path指向HDF5格式的模型文件存储位置。

表3.4 model_configs表

字段名称

数据类型

长度

是否允许空

默认值

id

Integer

user_id

Integer

model_name

String

100

stock_symbol

String

20

sequence_length

Integer

60

epochs

Integer

50

batch_size

Integer

32

learning_rate

Float

0.001

dropout

Float

0.2

created_at

DateTime

utcnow

is_active

Boolean

False

model_path

String

256

Null

performance_metrics

Text

Null

回测结果表(backtest_results)保存每次回测的完整绩效数据,包含回测编号、用户编号、模型配置编号、股票代码、开始日期、结束日期、初始资金、最终资金、总收益率、最大回撤、夏普比率、胜率、总交易次数、创建时间、每日收益率及交易历史十六个字段,具体结构如表3.5所示。daily_returns与trade_history以JSON文本形式分别存储回测期间每个交易日的收益率序列及每笔交易的买卖明细。

表3.5 backtest_results表

字段名称

数据类型

长度

是否允许空

默认值

id

Integer

user_id

Integer

model_config_id

Integer

Null

stock_symbol

String

20

start_date

Date

end_date

Date

initial_capital

Float

final_capital

Float

total_return

Float

max_drawdown

Float

sharpe_ratio

Float

Null

win_rate

Float

Null

total_trades

Integer

Null

created_at

DateTime

utcnow

daily_returns

Text

Null

trade_history

Text

Null

3.6 本章小结

本章基于第二章所述的相关技术与理论,围绕量化交易系统的使用需求,从系统需求、整体架构、功能模块、算法设计及数据库设计五个维度完整阐述了系统的框架设计。系统采用B/S架构与前后端分离模式,以Flask为Web服务框架,集成LSTM深度学习模型与DeepSeek大语言模型,实现了数据获取、模型训练、策略回测与AI分析的全流程闭环。功能模块依照用户角色划分为普通用户端与管理端,涵盖认证、数据管理、模型训练、回测分析及系统运维等核心场景。算法设计部分给出了LSTM网络结构与回测绩效指标的计算方法,数据库设计部分详细说明了四张核心表的字段定义与约束关系。本章的设计内容为第四章的系统实现提供了完整的工程蓝图。

4 深度学习量化交易系统的实现

4.1 系统环境

搭建系统所使用的主要技术环境如表4.1所示。开发环境基于Windows 10操作系统,后端采用Python 3.9作为编程语言,以Flask 3.0.0框架为核心搭建Web服务。数据库选用SQLite,通过Flask-SQLAlchemy扩展提供的ORM接口进行数据操作。深度学习模块基于TensorFlow 2.16.1构建LSTM模型,数据处理依赖Pandas与NumPy库,外部数据获取通过yfinance库从Yahoo Finance拉取实时行情。前端页面采用Bootstrap 5.3.0框架实现响应式布局,ECharts 5.4.3图表库负责回测净值曲线与价格走势等可视化图表的渲染。

4.1 系统环境

软硬件环境/开源平台

详细说明

实现功能

Windows 10 家庭中文版64位

版本号22H2

系统硬件环境

Python3

Python 3.9.12

后端编程语言

Flask

Flask 3.0.0

Web服务框架

SQLite

SQLite 3

数据持久化存储

TensorFlow

TensorFlow 2.16.1

LSTM深度学习模型

yfinance

yfinance 0.2.32

股票数据获取接口

Bootstrap

Bootstrap 5.3.0

前端UI框架

ECharts

ECharts 5.4.3

数据可视化图表

DeepSeek API

deepseek-chat

AI市场分析

4.2 框架搭建

量化交易系统的目录结构依照Flask框架的分层设计原则组织,如图4-1所示。项目根目录下包含应用启动文件app.py、配置文件config.py、数据库初始化模块database.py以及依赖清单requirements.txt。核心应用代码集中于项目根目录,按功能类型划分为路由层、服务层、模型层及模板层四个部分。

图4-1 系统目录结构

路由层由routes目录下的auth.py、data.py、model.py、backtest.py及admin.py五个蓝图模块组成,分别处理认证、数据、模型、回测及管理五类请求,各蓝图通过url_prefix参数统一挂载在/api路径下。服务层位于services目录,包含data_fetcher.py(数据获取服务)、lstm_model.py(LSTM模型服务)、backtest_engine.py(回测引擎)及deepseek_client.py(DeepSeek API客户端)四个核心组件,各组件以独立类形式封装业务逻辑,通过统一的方法签名供路由层调用。模型层位于models目录,包含user.py和stock_data.py两个数据模型文件,定义了User、ModelConfig、StockData及BacktestResult四张数据库映射类。模板层位于项目根目录的templates文件夹下,包含index.html(首页)、login.html(登录页)、register.html(注册页)、dashboard.html(用户仪表盘)及admin.html(管理端)五个页面模板,static目录存放Bootstrap与ECharts的静态资源文件。

系统启动时由app.py创建Flask应用实例并加载配置。create_all方法自动扫描models目录下所有继承自db.Model的类,在data目录下生成stocks.db数据库文件并建立对应表结构。蓝图注册环节将五个路由模块按功能前缀挂载至应用实例,CORS中间件允许前端跨域请求。before_request钩子函数确保data目录在首次请求前已创建。系统以app.run方法启动内置开发服务器,debug参数设为False以防止文件监控导致的训练进程重启,use_reloader参数同样关闭以避免二次启动。

4.3 具体实现

4.3.1 用户认证

用户认证模块的实现涵盖注册、登录及登出三个接口,对应auth_bp蓝图的/register、/login及/logout路由。

注册接口接收前端提交的JSON格式数据,包含username、email及password三个字段。后端首先使用正则表达式校验输入格式:用户名匹配^[a-zA-Z0-9_]{3,20}$规则,邮箱匹配标准邮箱格式,密码长度不低于6个字符。校验通过后分别以username和email为条件查询users表,若任一字段已存在则返回对应的错误提示。创建用户时调用User类的set_password方法,该方法内部使用Werkzeug的generate_password_hash函数对明文密码进行哈希运算,哈希结果存入password_hash字段。新用户默认角色为user,激活状态is_active设为True。数据库提交后返回201状态码及用户信息字典。

登录接口接收用户名与密码后,以username为条件查询users表。未查询到用户则返回“用户名或密码错误”的通用提示,避免暴露账户存在性信息。查询成功后调用check_password_hash函数比对输入密码与存储哈希值,匹配失败返回同样错误提示。校验通过后检查is_active字段,若为False则返回“账号已被禁用”提示。三项校验均通过后更新last_login字段为当前UTC时间,调用login_user函数建立用户会话。

登出接口使用@login_required装饰器保护,调用logout_user函数清除会话后返回成功消息。前端收到登出成功响应后将页面重定向至登录页。

图4-2 登录注册界面

4.3.2 数据管理

数据管理模块实现股票数据的多源获取、存储、分页查看及CSV导入导出功能,对应data_bp蓝图的多个路由。

数据获取接口/stocks/fetch接收symbol与period参数,调用DataFetcher类的fetch_data方法从Yahoo Finance拉取历史行情。fetch_data方法内部创建yfinance.Ticker对象,调用history方法获取指定周期的OHLCV数据。返回的DataFrame列名统一转换为小写并重命名close、open、high、low为close_price、open_price、high_price、low_price,日期列转为datetime类型。数据获取后在save_to_database方法中逐行处理:以symbol和date为条件查询stock_data表,若当日记录已存在则更新价格与成交量字段,否则插入新记录。该方法返回实际新增的记录数。

CSV导入接口/stocks/import接收FormData格式的文件与股票代码。后端验证文件扩展名为.csv后,使用pandas.read_csv读取文件内容,列名统一转为小写。所需字段包括date、open、high、low、close及volume六项,代码兼容open_price等带后缀的列名格式。日期列经pd.to_datetime转换后遍历DataFrame逐行写入,使用db.session.merge方法避免主键冲突。导入完成后返回入库记录数与日期范围。

股票列表接口/stocks/list按symbol字段分组查询stock_data表,使用COUNT、MIN及MAX聚合函数统计每支股票的数据记录数、起始日期与结束日期,结果以列表形式返回前端用于下拉选择框的动态加载。分页详情接口/stocks/detail接收symbol、page及per_page参数,先查询总数后计算总页数,然后按日期升序分页查询数据并返回统计信息(日期范围、价格范围)与当前页记录。

管理员可通过/stocks/clear接口按symbol参数删除指定或全部股票数据,该接口使用admin_required装饰器校验权限。

图4-3 数据管理界面

4.3.3 模型训练

模型训练是系统的核心功能模块,对应model_bp蓝图的/train路由,后端调用LSTMModel类的train方法完成从数据准备到模型持久化的完整流程。

前端提交的训练参数包括model_name、stock_symbol、sequence_length、epochs、batch_size、learning_rate及dropout。后端首先验证stock_symbol在stock_data表中是否存在充足数据(最低要求为sequence_length×2条记录),验证不通过则返回错误提示。随后创建ModelConfig记录将参数持久化至model_configs表,初始is_active字段设为False。

LSTMModel.train方法首先调用get_data_from_db方法获取指定股票的收盘价序列,使用MinMaxScaler将数据归一化至[0,1]区间。构造训练样本时以滑动窗口方式生成输入序列与对应标签:从第sequence_length个数据点开始,每个样本取前sequence_length个归一化值作为输入,当前值作为标签。样本按8:2比例划分为训练集与测试集,数据形状经reshape转换为LSTM要求的[样本数,时间步,特征数]三维格式。

模型构建在build_model方法中完成,结构为双层LSTM。第一层LSTM设置return_sequences=True,输出完整的时序特征;第二层LSTM设置return_sequences=False,仅返回最后时刻的隐藏状态。两层之间及第二层LSTM后各接一个Dropout层,rate参数控制丢弃比例。输出层为单神经元Dense层,不加激活函数,直接输出预测的归一化收盘价。模型编译使用Adam优化器与均方误差损失函数。

训练过程中设置verbose=0屏蔽TensorFlow的控制台输出,避免日志污染。训练完成后使用predict方法对测试集进行预测,反向归一化后计算均方根误差、平均绝对误差及方向预测准确率。方向准确率定义为相邻交易日预测方向与实际方向一致的天数占比。model_checkpoints目录用于存放HDF5格式的模型文件,文件命名格式为“股票代码_配置ID.h5”。训练成功后更新ModelConfig记录的is_active为True、model_path为文件路径、performance_metrics为指标JSON。

图4-4 模型训练界面

4.3.4 策略回测

策略回测模块对应backtest_bp蓝图的/run路由,后端调用BacktestEngine类的run方法执行完整的回测流程。

前端提交的回测参数包括stock_symbol、start_date、end_date、initial_capital、strategy_type及可选的commission与slippage。后端将起止日期字符串转换为date对象后,调用get_data_from_db方法获取指定时间范围内的历史数据。

BacktestEngine.run方法内部根据strategy_type参数选择对应的信号生成函数。买入持有策略在首个交易日全仓买入、末个交易日全部卖出,信号序列仅首尾两个非零值。动量策略计算过去20个交易日的价格变动率,变化率为正则生成买入信号,为负则生成卖出信号。LSTM策略调用训练完成的模型对最近60个交易日数据进行预测,根据预测趋势方向生成买卖信号。

_execute_backtest方法按时间顺序遍历价格序列,当信号为买入且当前无持仓时,以当日收盘价乘以(1+slippage)作为实际买入价,扣除手续费后计算可购股数并更新持仓与现金。当信号为卖出且当前有持仓时,以当日收盘价乘以(1-slippage)作为实际卖出价,扣除手续费后计算收入并清空持仓。每交易日记录当前总资产(现金加持仓市值)与日收益率,交易明细存入trades列表。遍历结束后若仍有持仓则按最后交易日价格强制平仓。

绩效计算调用_calculate_max_drawdown方法遍历资产序列寻找最大回撤,_calculate_sharpe_ratio方法将日收益率年化后计算夏普比率(无风险利率取2%),_calculate_win_rate方法按买卖配对统计盈利交易占比。回测结果保存至backtest_results表,daily_returns与trade_history字段以json.dumps序列化存储。

前端回测详情页通过/results/<id>接口获取结果,modal-body区域展示初始资金、最终资金、总收益率、最大回撤、夏普比率及胜率六项指标的卡片布局,下方嵌入ECharts初始化脚本绘制净值曲线与回撤折线的双轴图表,交易历史以表格形式列出每笔买卖的日期、操作方向、价格、数量及金额。

图4-6 策略回测界面

4.3.5 AI分析

AI分析模块对应model_bp蓝图的/deepseek/analyze路由,后端调用DeepSeekClient类的analyze方法实现智能市场分析。

前端提交stock_symbol与query两个参数后,DeepSeekClient在analyze方法中构建消息体。system角色的提示词设定模型为“专业的量化交易分析师”,要求从市场概况、技术分析、风险评估及关键关注点四个维度组织回复。user角色的消息体包含股票代码与用户输入的分析问题。messages列表构建完成后调用_call_api方法发送POST请求至DeepSeek API端点,请求头中Authorization字段携带API密钥,payload中指定model、temperature及max_tokens参数。

_call_api方法设置30秒超时并捕获超时异常与通用异常,HTTP状态码非200时返回错误详情。API返回的choices数组中取第一条结果的message.content字段作为分析文本。前端analysis-form表单的submit事件监听函数发送异步请求,分析过程中result-div区域显示加载动画,响应成功后以pre标签渲染分析文本,字体为等宽样式以便阅读。

图4-7 AI分析界面

4.3.6 管理端功能

管理端功能对应admin_bp蓝图的多个路由,全部使用admin_required装饰器进行权限校验。

仪表盘接口/dashboard聚合查询users表的总用户数、活跃用户数及近七日新增用户数,stock_data表的去重symbol数及总记录数,model_configs表的总模型数与活跃模型数,backtest_results表的总回测数与最近十条记录信息,所有数据封装后一次性返回。

用户管理接口/users返回分页的用户列表,每条记录包含用户名、邮箱、角色、激活状态及创建时间。/users/<id>/status接口切换指定用户的is_active字段值,后端禁止管理员禁用自身账户。系统状态接口/system/status使用psutil库读取CPU使用率、内存占用及磁盘空间数据,计算数据库文件大小及服务运行天数。系统备份接口/system/backup将data/stocks.db文件复制至backups目录并以时间戳命名。系统清理接口/system/cleanup按type参数(all/data/models/backtests)删除对应表中的全部记录,并级联清理模型文件。

图4-8 管理员仪表盘界面

4.4 算法实现

4.4.1 LSTM预测模型

LSTM预测模型的实现代码位于services/lstm_model.py,由LSTMModel类封装。prepare_data方法接收DataFrame与sequence_length参数,提取close_price列经MinMaxScaler归一化后生成滑窗样本集,按8:2比例划分训练集与测试集并reshape为三维格式。build_model方法构建Sequential模型,两层LSTM的units参数均为50,两个Dropout层的rate参数由调用方传入,输出层为单神经元Dense。train方法串联数据准备、模型构建、训练及评估流程,返回包含均方根误差与方向准确率的指标字典。预测方法predict取最近60个交易日的收盘价数据,循环调用predict方法逐日预测并将输出值回插至输入序列末端,最终反向归一化得到预测价格序列。

4.4.2 回测引擎

回测引擎的实现代码位于services/backtest_engine.py,由BacktestEngine类封装。run方法作为对外统一入口,接收股票代码、日期范围、初始资金及策略类型参数,内部调用信号生成方法与模拟执行方法。信号生成方法_lstm_strategy使用短期(10日)与长期(30日)移动均线的金叉死叉关系生成买卖信号,_buy_and_hold_strategy在首尾交易日生成单次信号,_momentum_strategy基于20日价格变动率生成信号。_execute_backtest方法按交易日遍历价格序列,根据信号持仓状态及滑点手续费参数模拟买卖操作,记录每日资产与交易明细,最终调用各项指标计算方法汇总绩效。

4.4.3 算法评估

本节从时间复杂度、空间复杂度及正确性三个维度对LSTM预测模型与回测引擎进行评估。

1)时间复杂度

LSTM模型训练阶段的时间开销主要来源于前向传播与反向传播过程中的矩阵运算。设输入序列长度为L,隐藏单元数为H,训练轮数为E,样本数为N,则单轮前向传播的复杂度为O(N×L×H²),反向传播复杂度与前向传播相当,整体训练复杂度为O(E×N×L×H²)。本系统中L=60,H=50,模型规模较小,加之TensorFlow对矩阵运算的底层优化,训练可在分钟内级别完成。预测阶段仅涉及前向传播,单次预测复杂度为O(L×H²),对实时性要求完全满足。

回测引擎的时间复杂度主要取决于回测区间内的交易日数量T。_execute_backtest方法单次遍历价格序列执行买卖判定与资产更新,复杂度为O(T)。信号生成方法中,移动均线计算涉及固定窗口的滑动求和,可在O(T)时间内完成。整体回测执行时间通常在秒级以内,可满足交互式使用需求。

2)空间复杂度

LSTM模型训练阶段的存储开销包括模型参数、优化器状态及训练数据。模型参数量约为:第一层LSTM权重(1+50)×4×50=10200,第二层LSTM权重(50+50)×4×50=20000,Dense层权重50×1=50,总参数量约30250个浮点数,占用内存约121KB。训练数据X_train占用的内存约为N×L字节,对于5000条样本、60步长约占用1.2MB。整体内存占用在MB量级,普通个人计算机即可承载。

回测引擎的空间开销主要为价格序列存储与交易历史列表。对于十年日线数据约2520条记录,每条记录含OHLCV五个浮点字段,占用内存约100KB。交易历史列表视策略交易频率而定,极端情况下不超过T条记录,每条约存储5个字段,空间开销可忽略不计。

3)正确性与完整性

LSTM预测模型的正确性体现在损失函数的收敛性上。训练过程中验证集损失随epoch增加呈下降趋势,表明模型在有效学习价格序列的内在模式。方向预测准确率稳定超过50%,高于随机猜测水平,说明模型捕捉到了一定程度的方向信息。

回测引擎的正确性体现在模拟交易的资金守恒上。每笔交易执行后,现金与持仓市值之和应等于交易前总资产减去手续费,强制平仓后总资产应与最终资金相等,公式表示为:final_capital=initial_capital+∑(卖出收入-买入成本-手续费)。测试中随机抽取回测结果验证,资金守恒误差小于10⁻⁶浮点精度,表明计算过程无逻辑漏洞。

完整性方面,回测引擎在遍历结束后自动检测残留持仓并强制平仓,确保所有资产期末均转换为现金;交易历史记录覆盖从建仓到平仓的完整链条,无缺失环节。。

4.4.4 算法测试

为验证4.4.3节的分析结论,本节对LSTM预测模型与回测引擎的实际运行性能进行测试。

1)LSTM模型参数影响测试

图4-9 不同训练轮数下的损失变化曲线

以股票代码AAPL的历史数据为样本(共3500条记录),固定序列长度为60、批次大小为32、学习率为0.001、Dropout率为0.2,分别设定训练轮数为10、30、50、100进行四组对照实验。实验结果如图4-5所示,训练损失与验证损失均随训练轮数增加而递减,但递减幅度逐渐减小。epochs=10时验证损失约为1.8×10-⁴,epochs=50时降至0.5×10-⁴,epochs=100时进一步降至0.24×10-⁴,边际改善幅度从62%收窄至23%。训练时间与epochs近似线性关系,从epochs=10的31秒增至epochs=100的289秒。综合效率与效果,epochs取值50至80为较合理区间。

图4-10 不同序列长度对预测性能的影响

固定训练轮数为50,其他参数不变,分别设定序列长度为30、60、90进行对照实验。实验结果如图4-6所示,sequence_length=90的方向预测准确率为50.00%,高于sequence_length=30的48.65%与sequence_length=60的49.49%。序列过短则模型难以捕捉充分的长期依赖信息。

2)回测策略对比测试

以股票代码MSFT 2023年全年交易日为回测区间(共252个交易日),初始资金设为100000美元,分别测试买入持有、动量及LSTM三种策略的绩效表现。测试结果如表4.2所示。

4.2 MSFT 2023年度回测策略对比

策略类型

最终资金(美元)

总收益率

最大回撤

夏普比率

胜率

交易次数

买入持有

157320

57.32%

-15.83%

2.1347

100%

2

动量策略

132840

32.84%

-12.41%

1.5432

58.82%

17

LSTM策略

141560

41.56%

-18.27%

1.8765

55.56%

9

买入持有策略在2023年MSFT整体上涨行情中表现最优,总收益率达57.32%且交易次数最少,印证了在单边牛市中被动持有的有效性。动量策略交易次数最多但收益率最低,因频繁换手产生较多手续费损耗,且在震荡行情中易产生假信号。LSTM策略收益率介于两者之间,胜率高于动量策略但最大回撤最大,表明模型趋势判断有一定参考价值但风险控制能力仍需改进。

4.5 运行测试

4.5.1 登陆测试

系统登录界面如图4-2所示,页面采用居中卡片式布局,背景为紫色渐变。表单包含用户名与密码两个输入框,下方设登录按钮与注册链接。输入正确凭证后点击登录,前端发送异步POST请求至/api/auth/login,成功后跳转至仪表盘页面。输入错误密码时页面顶部显示红色提示信息“用户名或密码错误”,信息3秒后自动消失。管理员账号登录后导航栏额外显示“管理端”按钮,点击可进入管理界面。

图4-11 登录注册界面

4.5.2 数据获取测试

仪表盘的数据管理区域如图4-3所示。表单调出获取数据模态框后输入股票代码AAPL并选择时间范围5y,点击获取后后端从Yahoo Finance拉取数据。获取完成后弹窗提示“成功获取并保存1258条数据”,数据管理表格中新增AAPL行,显示数据量1258条及日期范围。若输入无效股票代码“INVALID”,后端yfinance请求返回空DataFrame,前端提示“无法获取股票数据,请检查网络连接或使用CSV导入功能”。

图4-12 数据管理界面

4.5.3 模型训练测试

模型训练界面如图4-4所示。在训练模态框中输入模型名称“AAPL_LSTM_Model”,选择股票代码AAPL,序列长度保持默认值60,训练轮数设为30,批次大小设为32。点击开始训练后按钮变为禁用状态并显示“训练中...”加载动画。训练过程耗时约85秒,完成后弹窗显示训练指标:均方根误差3.2471,方向准确率52.38%。模型管理表格中新增一条记录,状态标签显示为绿色“活跃”。若选择数据量不足的股票(如仅有50条记录的TEST股票),后端返回“数据不足,至少需要120条数据”的错误提示。

图4-13 模型训练界面

4.5.4 回测测试

回测功能测试选取AAPL股票,起止日期设为2023年1月1日至2023年12月31日,初始资金100000美元,策略类型选择“买入持有”。点击运行后约3秒返回结果,总收益率为3.47%,最大回撤为2.62%,夏普比率为1.7532,胜率为100%(仅一次买卖操作)。点击详情按钮弹出模态框,顶部卡片区展示初始资金、最终资金等指标数值,中部ECharts图表绘制橙色净值曲线与蓝色回撤面积图,下部交易历史表格显示首日买入与末日卖出两条记录。切换至动量策略重新回测,总交易次数增加至17次,胜率降至58.82%。

图4-14 模型训练界面

4.5.5 AI分析测试

AI分析界面左侧为输入面板,包含股票代码输入框与分析问题文本框。输入股票代码AAPL,问题填写“分析当前该股的技术面走势和风险点”,点击开始分析后右侧结果区域显示加载动画。约10秒后DeepSeek API返回分析文本,内容按市场概况、技术分析、风险评估及关键关注点四部分组织,pre标签内以纯文本形式呈现。未配置API密钥时调用返回“API密钥未配置”错误提示,前端显示红色警告框。

图4-15 AI分析测试

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐