找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2019

积分

0

好友

285

主题
发表于 昨天 07:10 | 查看: 6| 回复: 0

强化学习一直是量化交易领域备受关注的技术方向:一个能与市场环境互动并自我学习的智能体,听起来颇具吸引力。然而,现实往往是,许多人在数据格式处理、环境搭建和回测系统构建等基础环节就遇到了阻碍。

今天我们来介绍一个实用工具——TradingGym。它借鉴了OpenAI Gym的设计理念,为量化交易的研究者和开发者提供了一个开箱即用的交易模拟环境。无论你的目标是训练一个强化学习智能体,还是仅仅想回测一个传统策略,TradingGym都能提供有力的支持。

TradingGym 是什么?

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

  • 接口友好:遵循OpenAI Gym的接口设计,对熟悉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'
    ]
)

定义你的智能体

你可以在这里实现任何逻辑:随机策略、传统规则策略,或者复杂的神经网络模型。

class YourAgent:
    def __init__(self):
        # 在这里构建你的网络或初始化参数
        pass

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

运行回测

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

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

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

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

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

实战案例:均线交叉策略

即使不涉及复杂的人工智能算法,你也可以用TradingGym快速开始实验。下面演示一个经典的均线交叉策略:

# 创建回测环境,使用价格和均线作为特征
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']  # 价格和移动平均线
)

class MaAgent:
    """均线交叉策略智能体"""

    def __init__(self):
        pass

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

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

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

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

这个案例清晰地展示了TradingGym不仅服务于强化学习研究者,对于传统的量化交易策略开发同样非常友好。

总结

TradingGym可能还不是一个适用于生产环境的成熟框架,但它的核心价值在于其简单、易用和低学习门槛。

它的主要优势可以概括为:

  1. 设计简洁:遵循Gym接口,大幅降低上手难度。
  2. 结构清晰:环境与智能体分离明确,便于模块化扩展和测试。
  3. 回测灵活:内置的回测功能支持快速验证各类交易想法。
  4. 策略兼容:同时为强化学习策略和传统规则策略提供了统一的实验平台。

如果你正在探索量化交易中强化学习的应用、需要快速验证一个交易想法,或者厌倦了从零开始搭建交易环境,那么TradingGym无疑是一个值得尝试的高效工具。




上一篇:PK1应力张量为何没有特征值?深度剖析其数学本质与奇异值分解
下一篇:天翼云开源XStore存储引擎:基于PostgreSQL的Docker部署与压测体验
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 20:14 , Processed in 0.236964 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表