通过这个博客,我想解释一下我们在新加坡国立大学举办的人工智能竞赛中采用的一种方法。
首先,让我定义给我们的问题陈述。
比赛要求参赛选手建立股票择时模型,自发寻找最佳交易机会完成交易,争取股票整体交易成本最低。
- 比赛共提供500只股票,每只股票每天必须完成100股的买卖,每笔交易的股票数量可以自由分配。
- 每只股票的交易时间为每日9:30-11:30和13:00-15:00。
- 参赛者需要在交易时间内为每只股票选择几个最佳时间点进行交易。 “低买高卖”。
我们对该领域进行了全面的文献回顾,发现有以下三种已经尝试过的方法:
基于规则:
- 计算机通过人类指定的预定规则在金融市场上进行交易。的
- 不灵活
传统机器学习:
- 参数显着影响高频交易框架的盈利能力。
- 无法适应当前的市场数据分布。
- 无法自动适应当前的市场状况。
因此,我们将注意力集中在“强化学习”上,同时牢记其以下优点:
- ****从交互中动态学习
- 平衡探索与开发
- 处理复杂的决策空间
- 实时决策
- ****对市场变化的稳健性
强化学习涉及一个 Agent,该 Agent 对被称为 STATE 的情况有完整的了解。Agent 还具有状态的部分视图,该状态作为每个时间步长的环境输入提供给它。这被称为观察。代理与环境交互并采取行动。它会因采取该行动而获得奖励或惩罚。
强化学习的目标是学习一种策略函数,该函数以累积奖励最大化的方式将状态映射到动作。
更正式地说:
- 代理与其环境的顺序交互。的
- 在每个时间步t,代理观察内部状态St 的 RL 环境并检索观察Ot。的
- 根据其 RL 策略π( at | ht ) 执行动作****,其中ht是 RL 代理历史记录,并作为其动作的结果收到奖励rt 。******************
- 策略被设计为将状态映射到动作并最大化最优性标准的函数。
- 直接取决于在特定时间范围内观察到的即时奖励rt 。
为了将强化学习用于股票交易用例,我们必须假设操作是买入、卖出、交易量(上限为 100 股)和持有(0 交易量)。
在我们为比赛带来的创新方面,我们做到了:
- 奖励塑造,即我们编写了一个自定义奖励函数来匹配竞争目标。
- 相关状态变量: 我们使用了特定的状态变量来配合比赛
- 卖空: 我们使用了交易员经常使用的技术。交易者通过在借入股票后以高价卖出股票并希望以后以较低的价格买回股票来进行卖空。
- 解释结果:我们使用技术来解释我们的模型所做的决定。
在强化学习中,学习策略有两种主要方法:
- Q学习方法。
- 政策梯度法。
这些方法的根本区别在于它们如何处理动作选择,无论是在学习过程中还是作为最终输出,即学习策略。
Q 学习与策略梯度
具体来说,我们选择了OPENAI的PPO(Proximal Policy Optimizer)方法算法。
- 策略由神经网络表示,目标是优化该网络的参数以改进策略。
- 它使用代理目标函数,该函数是策略梯度方法的变体。
- 通过直接控制策略损失函数隐含的梯度上升步长的大小来确保策略更新过程的稳定性。
我们将动作空间定义为连续值 {-1, …., 1} 。
我们将操作乘以 100,最终将决策定义为:
行动 < 0 卖出量
动作 = 0 无动作
操作 > 0 买入量
为了定义观察空间,我们使用了以下变量:
- 直接从输入的 tickdata 文件:
- 累计交易金额
- 体积
- 滴答时间
- 开盘价
- 收盘价
- 高价
- 低价
- 股票代号
- 派生值(类似于特征工程)
- 买卖权力
- 初始金额
- 一个时间步拥有的股份数量
- 一个时间步购买的股票数量
- 在一个时间步出售的股票数量。
用于推导功率的公式:
价格 * 体积 = 功率
Buyers_power - Sellers_power = Overall_power
计算奖励我们习惯了以下公式
奖励 = (avg_sell_price — avg_buy_price) / avg_buy_price
为了评估,使用了回测方法:
- 通过使用历史数据发现交易策略的效果来评估交易策略。的
- 其基本理论是,任何在过去表现良好的策略在未来都可能表现良好,相反,任何在过去表现不佳的策略在未来都可能表现不佳。
- 我们使用了一些最新的报价数据文件进行回溯测试,以确认我们的交易策略的潜在可行性。
前15个股票的利润
为了解释结果,我们在强化学习模型的输入和输出上训练了决策树的学生模型。
更具体地说,我们使用强化模型(称为 Teacher 模型)生成包含每个价格变动的买入/卖出量的**订单时间文件。 **然后我们使用决策树模型(称为学生模型)将教师模型(观察空间)和标签的特征作为输出顺序文件。
曾经,我们能够训练决策树模型,我们使用 Shapley 值图来确定主要贡献特征:
由此,我们能够确定累计销售量、拥有的 Shres 数量、剩余数量是有助于确定强化学习模型的行为的一些主要特征。
未来的工作:
- 为策略梯度试验不同的集成方法,例如 DQN、DDPG、Multi-Agent DDPG、SAC、A2C 和 TD3。
- 我们可以合并外部数据源,例如推文情绪。
- 探索奖励函数的变体,例如最大化 SHARPE 比率和最小化风险。
- 我们可以尝试不同的状态变量。
所有代码都是用 python 编写的。
代码的 Github 链接是github.com/netgvarun20…
**使用稳定的基线包。 **它是一组基于 OpenAI Baselines的强化学习算法的改进实现。
这是我试图解释我们使用深度强化学习在约束下交易股票的方法。
谢谢阅读。