A Stock Trading Model Based on A2C Algorithm
In September 2024, a significant surge in China’s A-share market reignited the public’s “stock trading frenzy”. However, the fluctuating stock prices that excited stock investors were closely related to many factors. For individual investors, in addition to screening information for buying and selling stocks, using an algorithm model to predict can also have a twice-as-effective effect. In the early 1960s, the embryo of quantitative trading using computer technology had appeared, and with the advancement of technology, quantitative trading based on statistics and model building became the mainstream choice. This paper constructs a stock trading model using the A2C (Advantage Actor-Critic) reinforcement learning algorithm. By using the “gym-anytrading” library to create a stock trading environment and training a policy network using the Stable-Baselines library to learn how to trade in this environment to maximize profits. The data source for the model comes from the stock information of Alibaba (2022 December to 2024 September) obtained through the interface of the pandas-datareader library.
Quantitative Trading
随着各国经济联系日趋密切,全球的金融市场也呈现不同的态势,尤其是中国的股票市场,正以强劲的姿态发展。中国拥有着仅次于美国的股民数量,然而中国的股民素来被称为“韭菜”
股票量化交易早期主要依赖于简单的技术指标,例如移动平均线、相对强弱指标(RSI)、MACD等
随着计算机技术和数据处理能力的提高,量化交易开始使用更复杂的统计模型,例如回归分析、因子模型等
综上所述,本文所使用的A2C算法能够自动学习最优的交易策略,而不需要人工设计复杂的规则
本文的组织结构如下:
第二节介绍了A2C算法模型的数据来源、环境与模型的结构、训练过程、模型的关键技术工作原理。第三节介绍了模型的训练,其中包括了:训练流程、评估指标、训练结果。最后在总结部分对本文的研究内容进行总结和模型改进的展望。
本论文选择2022年12月1日至2024年9月30日阿里巴巴的股票信息作为数据研究对象。阿里巴巴作为中国互联网头部企业,其股票在美国纽交所上市。相比于A股市场的信息披露和监管力度,美国证券交易委员会(SEC)的监管力度更加严格和全面,吸引了全世界范围内的投资者,具有交易量大、流动性更好的优势,作为投资者买卖其股票降低了交易成本,也减少了对于最终盈利核算的影响。如
同时,选择了雅虎金融(Yahoo Finance)作为数据源。雅虎金融提供大量的金融数据包括:股票价格、交易量、财务报表数据等。相比较于其他数据提供商,雅虎金融大部分数据免费;数据通常以结构化的格式呈现——方便数据分析和处理;数据通常可以通过API接口获取。
使用“Pandas-Datareader”库的“Web.DataReader”函数获取在线数据,该函数将雅虎金融发送的JSON数据解析为Python对象,其交互过程如
本论文通过使用Python的Gym库为模型构建一个股票交易环境。Gym库的核心函数是gym.make (stocks-v0)。其中“stocks-v0”是“gym-anytrading”库注册的环境ID,表示要创建的是一个股票交易环境。创建好的环境会接收已经打包完成的股票数据集,该数据集包括了开盘价、最高价、最低价、收盘价、成交量等信息。数据传输完成后,环境进行规范化预处理,以便输入模型训练。该环境使用指定的股票数据(阿里巴巴)、数据范围(2022-12-01~2024-9.30)和窗口大小(每一次循环中模型训练的数据规模),如
而模型的构建主要工作是对环境预处理好的数据进行接收、设置好训练的次数、选取合适算法和策略网络、确定好训练流程。
模型选取了Stable Baselines3库的A2C算法作为模型训练的核心算法,并辅助使用了MlpLstmPolicy网络结构进行策略的更新。
其中A2C算法指的是Actor-Critic,一种基于策略梯度(Policy Gradient)和价值函数(Value Function)的强化学习方法。它通过产生交易动作提前完成对股票的买入或者卖出,通过与实际股票的涨跌情况作对比,评判本次交易的结果是盈利还是亏损,并根据奖励(判断的结果)更新下一个阶段的行为,也就是下一阶段买入还是卖出,以得到更好的资金回报。
A2C算法会创建多个进程与环境进行交互,以收集更多的交易经验,这对于优化每一次的动作都能起到正向效果。如
MlpLstmPolicy策略网络是多层感知器MLP和长短期记忆网LSTM。MLP能够辅助处理交易量、技术指标等不随时间变化的数据;LSTM则辅助处理价格序列等随时间而变动的因素,捕捉股票价格变化过程中的依赖关系,通过与MLP相结合形成MlpLstmPolicy策略网络,能够更好地为A2C算法更新策略,以得到更好的预期收益。
模型训练开始前,必须对模型的训练参数进行设置,主要是循环训练的次数(根据实际数据源的数量进行估计)、获取的窗口大小(一次抓取的数据规模)。
模型训练第一步:初始化。这个过程由Gym环境处理完成。这个处理过程隐含在“gym-anytrading”库中。
模型训练第二步:数据获取。前文所述,由环境会自动将打包完成的数据输入给模型。
模型训练第三步:决策网络。该步骤负责生成一个交易策略,以A2C算法为核心辅以MlpLstmPolicy策略网络生成一个决策。该决策是动态存在,在设定的最大训练次数之前,每一次完整的训练都会根据奖励更新策略。
模型训练第四步:行动。即根据策略完成一次完整的股票买入或者卖出。在预期中该行动应该是股票的高点卖出,低点买入。
模型训练第五步:奖励。奖励本质是上一次交易动作产生的后果,后果可能为正向或负向。根据一次决策完成一次行动,将行动结果与股票的数据进行比对,即可知道该行为产生的后果。
模型训练第六步:更新策略。由第五步的后果,回到第三步,调整策略,该过程由算法自主学习完成。更新策略后使用新策略继续完成第三步到第六步。
模型在执行循环往复的训练次数后结束。其流程图如
股票交易模型的最终评估指标以收益率为准。本模型引入MATLAB以构建可视化的图表,最终的收益率和决策过程会生成散点图,散点会落在股票的实际涨跌线上,以进行对比。
如
在该
分析图中的散点图可知,在没有算法的情况下,自主交易存在混乱的情形,在持续走高的趋势中连续买入,在持续走低的趋势里卖出的行为却寥寥无几。根据股票常识易知,假如阿里巴巴股票在2021-12-01至2024-09-30两年间的股票走势总体降低,那么连续买入的操作(
而阿里巴巴股票的总体趋势图也验证了这一次结果必然是亏损的,如
由3.2可知,一个无算法的股票交易模型最终的结果是亏损的,下文将展现运用算法模型的训练结果。
在经过3.1的训练步骤之后,该模型的训练结果比较于无算法状态下的收益率有了较为明显的进步。如
在
考虑到模型的优越性与训练次数(时间)和观察窗口有关,提高训练次数并扩大观察窗口,得到了更加理想的结果。如
观察
同时,17.1%的盈利率远高于美联储的存储利率,意味着投资者运用了本模型,将本金用于阿里巴巴股票的量化交易远大于储蓄利息,运用了A2C算法的交易模型训练成功。
本论文通过Python库工具包抓取阿里巴巴两年内的股票数据,使用Gym库创建了一个股票交易的环境,将数据封装进算法模型训练,训练需要一定的GPU资源,本项目通过谷歌的COLAB笔记提供的GPU完成训练,最终得到了一个基于A2C算法的股票交易模型。该模型利用A2C算法的行为-评价体系,对过往行为结果进行反复的评价后对策略进行往复的调整,优化行为,最终根据训练结果验证了该模型的有效性。本论文存在一些可以改进的地方,例如:能够尝试在数据处理环节,运用对数据优化的算法,对数据进行筛选,提高模型的运行速度;实际上股民的手里不可能单一持股,因此模型可以为用户添加搜索指定股票并下载其数据的功能,用户能够对多支的股票进行训练,得到针对不同股票的不同模型。
展望本论文提出的算法模型,本文的提高工作可以着眼于对收益率的提高和行为的稳定性。第一:由于影响股票涨跌存在诸多因素,因此可以根据本论文内容设置两个股票模型。其中,A模型对股票的数据进行训练,B模型以A模型的行为和收益率为数据基础,再结合影响股票的宏观政策、突发事件、市场变动等外界要素融合进行训练,最终得到一个更加贴合现实情况的交易模型。第二:考虑到两年内的数据并不具备代表性,对于一支股票而言,全面综合地考察其表现需要追溯到上市伊始的数据,因此增加数据量和扩大每一次的数据观察窗口也是提高模型性能的途径,当然这也对训练的硬件和时间提出了更严格的要求。第三:本论文训练的是上市于美股的阿里巴巴股票,不同股市的股票具备不同的涨跌规律,为了更加全面和客观,亦可挑选中国的A股及港股股票进行训练。