当前位置:首页>python>用 Python 玩转量化交易:TradingGym 让强化学习交易变得简单

用 Python 玩转量化交易:TradingGym 让强化学习交易变得简单

  • 2026-08-24 22:46:18
用 Python 玩转量化交易:TradingGym 让强化学习交易变得简单

欢迎加入专注于财经数据与量化投研的【数据科学实战】知识星球!在这里,您将获取持续更新的《财经数据宝典》和《量化投研宝典》,这两部宝典相辅相成,为您在量化投研道路上提供明确指引。 我们提供了精选的国内外量化投研的 250+ 篇高质量文章,并每日更新最新研究成果,涵盖策略开发、因子分析、风险管理等核心领域。 无论您是量化投资新手还是经验丰富的研究者,星球社区都能帮您少走弯路,事半功倍,共同探索数据驱动的投资世界!

引言

强化学习(Reinforcement Learning,RL)一直是量化交易领域的热门话题:一个能通过与市场互动来学习的智能体,听起来是不是很酷?但现实往往很骨感,大多数人都被数据格式、环境搭建、回测系统这些基础工作绊住了脚。

今天给大家介绍一个神器——TradingGym。它借鉴了 OpenAI Gym 的设计理念,为量化交易爱好者提供了一个开箱即用的交易环境。无论你是想训练 RL 智能体,还是只想回测传统策略,TradingGym 都能帮你搞定。

TradingGym 是什么?

TradingGym 是一个 Python 工具包,专门用于在交易环境中训练和回测强化学习算法。它的核心特点包括:

遵循 OpenAI Gym 接口设计,上手无门槛;支持逐笔数据(tick data)和 K 线数据(OHLC data);内置训练环境和回测环境;同时兼容规则策略和机器学习策略。

简单来说,如果你用过 Gym,那 TradingGym 对你来说就是零学习成本。

安装方法

首先克隆仓库并本地安装:

# 克隆 TradingGym 仓库
git clone https://github.com/Yvictor/TradingGym.git

# 进入项目目录
cd TradingGym

# 安装
python setup.py install

快速上手:创建交易环境

第一步:加载市场数据

TradingGym 需要传入一个 pandas DataFrame。以下是读取 HDF5 格式逐笔数据的示例:

import random
import numpy as np
import pandas as pd
import trading_env

# 从 HDF5 文件读取市场数据
df = pd.read_hdf('dataset/SGXTW.h5''STW')

第二步:创建环境

这里你会感受到浓浓的 Gym 风格:

# 创建训练环境
env = trading_env.make(
    env_id='training_v1',      # 环境类型:训练环境
    obs_data_len=256,          # 智能体能看到的历史数据长度
    step_len=1,                # 每步窗口移动的距离
    df=df,                     # 市场数据
    fee=0.1,                   # 每笔交易的手续费
    max_position=5,            # 最大持仓数量
    deal_col_name='Price',     # 用于计算收益的价格列
    feature_names=[            # 输入智能体的特征列表
'Price''Volume',
'Ask_price''Bid_price',
'Ask_deal_vol''Bid_deal_vol',
'Bid/Ask_deal''Updown'
    ]
)

第三步:初始化并展示

# 重置环境
env.reset()

# 渲染当前交易状态
env.render()

在环境中执行动作

TradingGym 遵循经典的强化学习循环:状态 → 动作 → 奖励 → 下一状态。

# 执行一个随机动作,获取反馈
state, reward, done, info = env.step(random.randrange(3))

动作的含义如下:0 表示不操作,1 表示买入 1 股,2 表示卖出 1 股。

随机策略示例

下面是一个简单的循环,智能体随机执行动作并打印交易详情:

# 随机策略测试:执行 500 步
for i in range(500):
    print(i)
# 随机选择动作(0、1 或 2)
    state, reward, done, info = env.step(random.randrange(3))
    print(state, reward)
    env.render()

# 如果回合结束,跳出循环
if done:
break

# 查看交易详情
env.transaction_details

这个策略肯定不赚钱,但它能帮你验证环境是否正常运行。

使用 TradingGym 进行回测

回测使用的接口与训练几乎一样,这是 TradingGym 的一大优势。

创建回测环境

# 创建回测环境
env = trading_env.make(
    env_id='backtest_v1',      # 环境类型:回测环境
    obs_data_len=1024,         # 观察窗口长度
    step_len=1,
    df=df,
    fee=0.1,
    max_position=5,
    deal_col_name='Price',
    feature_names=[
'Price''Volume',
'Ask_price''Bid_price',
'Ask_deal_vol''Bid_deal_vol',
'Bid/Ask_deal''Updown'
    ]
)

定义你的智能体

你可以插入任何逻辑:随机策略、规则策略或神经网络。

classYourAgent:
def__init__(self):
# 在这里构建你的网络或初始化参数
pass

defchoice_action(self, state):
# 根据状态选择动作
# action=0 -> 不操作
# action=1 -> 买入 1 股
# action=2 -> 卖出 1 股
# 这里用随机策略作为示例
return np.random.randint(3)

运行回测

# 实例化智能体
agent = YourAgent()
transactions = []

# 循环执行回测
whilenot env.backtest_done:
    state = env.backtest()
    done = False

whilenot done:
# 智能体根据状态选择动作
        state, reward, done, info = env.step(agent.choice_action(state))

if done:
# 记录交易信息
            transactions.append(info)
break

# 合并所有交易记录
transaction = pd.concat(transactions)
transaction

实战案例:均线交叉策略

不用强化学习也能开始实验!下面是一个经典的均线交叉策略:

# 创建回测环境,使用价格和均线作为特征
env = trading_env.make(
    env_id='backtest_v1',
    obs_data_len=10,           # 观察最近 10 个数据点
    step_len=1,
    df=df,
    fee=0.1,
    max_position=5,
    deal_col_name='Price',
    feature_names=['Price''MA']  # 价格和移动平均线
)

classMaAgent:
"""均线交叉策略智能体"""

def__init__(self):
pass

defchoice_action(self, state):
# state[-1] 是最新数据,state[-2] 是前一个数据
# state[x][0] 是价格,state[x][1] 是均线

# 金叉:价格从下方突破均线,买入
if state[-1][0] > state[-1][1and state[-2][0] <= state[-2][1]:
return1
# 死叉:价格从上方跌破均线,卖出
elif state[-1][0] < state[-1][1and state[-2][0] >= state[-2][1]:
return2
# 其他情况:不操作
else:
return0

# 实例化均线策略智能体
agent = MaAgent()

# 后续回测流程与前面相同

这个案例展示了 TradingGym 不仅适合 RL 玩家,对传统量化交易者同样友好。

总结

TradingGym 虽然还不是一个生产级别的成熟框架,但它的价值在于简单易用、学习成本低。

它的核心优势包括:简洁的 Gym 风格设计让上手变得轻松;环境和智能体清晰分离,便于扩展;灵活的回测功能支持快速验证想法;同时兼容强化学习策略和传统规则策略。

如果你正在学习量化交易中的强化学习应用、需要快速验证交易想法、厌倦了从零搭建交易环境,那么 TradingGym 绝对值得一试。

参考文章

加入专注于财经数据与量化投研的知识星球【数据科学实战】,获取本文完整研究解析、代码实现细节。

财经数据与量化投研知识社区

核心权益如下:

  1. 赠送《财经数据宝典》完整文档,汇集多年财经数据维护经验
  2. 赠送《量化投研宝典》完整文档,汇集多年量化投研领域经验
  3. 赠送《PyBroker-入门及实战》视频课程,手把手学习量化策略开发
  4. 每日分享高质量量化投研文章(已更新 180+篇)、代码和相关资料
  5. 定期更新高频财经数据
  6. 参与年度不少于 10 次专属直播与录播课程
  7. 与核心开发者直接交流,解决实际问题
  8. 获取专业微信群交流机会和课程折扣

星球已有丰富内容积累,包括量化投研论文、财经高频数据、 PyBroker 视频教程、定期直播、数据分享和答疑解难。适合对量化投研和财经数据分析有兴趣的学习者及从业者。欢迎加入我们!

好文推荐

1. 用 Python 打造股票预测系统:Transformer 模型教程(一)

2. 用 Python 打造股票预测系统:Transformer 模型教程(二)

3. 用 Python 打造股票预测系统:Transformer 模型教程(三)

4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)

5. 揭秘隐马尔可夫模型:因子投资的制胜武器

6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用

7. 金融 AI 助手:FinGPT 让你轻松掌握市场分析

8. 量化交易秘籍:为什么专业交易员都在用对数收益率?

9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解

10. 掌握金融波动率模型:完整 Python 实现指南

好书推荐

最新文章

随机文章