本文将手把手演示如何把 移动平均线(MA)、布林带(Bollinger Bands)、抛物线转向(PSAR)、MACD 与 RSI 五大经典指标无缝接入已有的 比特币交易机器人——一个基于 强化学习(RL) 的智能代理。通过代码实战与结果剖析,你将获得可复现的技术方案,加速自己的量化研究。
关键词:比特币交易机器人、强化学习、技术指标、算法交易、Python量化。
为什么要用技术指标“武装”RL 代理?
在上期内容里,我们仅靠 价格行为(Price Action) 就让 RL 代理取得了 5% 左右的特朗普盈利。然而,真实市场中几乎所有交易员都会叠加技术分析。既然人类需要指标辅助,那么智能代理同样有理由利用 多维信息 提升胜率。
统一数据管道:如何用 ta 库高效计算指标
准备工作
安装依赖
pip install ta pandas matplotlib mplfinance- 载入 K 线数据(示例文件
pricedata.csv需包含Date,Open,High,Low,Close,Volume)。
AddIndicators 函数
一个入口即可生成全部指标,便于后续训练和回测:
from ta.trend import SMAIndicator, macd, PSARIndicator
from ta.volatility import BollingerBands
from ta.momentum import rsi
import pandas as pd
def AddIndicators(df: pd.DataFrame) -> pd.DataFrame:
# SMA 7、25、99
for win in [7, 25, 99]:
df[f"sma{win}"] = SMAIndicator(df.Close, window=win, fillna=True).sma_indicator()
# 布林带 20 日
bb = BollingerBands(df.Close, window=20, window_dev=2)
df["bb_bbm"], df["bb_bbh"], df["bb_bbl"] = bb.bollinger_mavg(), bb.bollinger_hband(), bb.bollinger_lband()
# PSAR
psar = PSARIndicator(df.High, df.Low, df.Close, step=0.02, max_step=2, fillna=True).psar()
df["psar"] = psar
# MACD
df["MACD"] = macd(df.Close, window_slow=26, window_fast=12, fillna=True)
# RSI
df["RSI"] = rsi(df.Close, window=14, fillna=True)
return df逐国解读:五大技术指标在比特币上的表现
1. 简单移动平均线(SMA)
- 功能:平滑噪声、识别趋势方向。
窗口选择
- SMA7 贴近行情,可视为短期支撑/阻力。
- SMA99 属于长期“态度线”,价格高于 SMA99 通常判定为牛市基底。
2. 布林带
- 原理:中轨=SMA20,上下轨=中轨 ± 2×标准差,动态展示 波动区间。
交易信号
价格触及上轨暗示 超买,触及下轨暗示 超卖。
但在 24×7 的币市中,钝化 时有发生。RL 代理会利用布林带“夹角”速率而非单一触碰点做出决策。
3. 抛物线转向(PSAR)
- 核心:点阵跳跃反映趋势逆转。
- 优势:趋势行情胜率极高。
- 劣势:盘整时期 假信号 频发——恰好交给深度网络滤波。
4. MACD
构成
- 快线:EMA12
- 慢线:EMA26
- 信号线:快线EMA9
- 背离判读:价格新高 + MACD 未新高 = 顶背离,反之为 底背离。
5. RSI
- 振荡区间:0–100,阈值 30/70。
- 进阶用法:结合 SMA25,当 RSI 从超卖回升且价格上穿 SMA25,三者共振可视为加仓信号。
可视化:一张图看懂多指标共振
将 5 大指标叠加在 400 根 K 线内,肉眼可观察到:
- 当 SMA7 金叉 SMA25,同时 MACD 翻正,PSAR 翻红,几乎同步出现一段流畅多头
- RSI 在高位的持续钝化,暗示中期 “只做多” 环境
👉 点击体验可互动指标叠加演示,滑块调参直观感受多空力量切换
代码改造:把指标喂给强化学习环境
状态空间升级
原始状态维度 = (hist_window, 10) ➜ 新增 9 维 → 最终维度 (lookback_window_size, 19)
新增字段在归一化时备注:
| 指标 | 归一化因子 | 说明 |
|---|---|---|
| sma7/sma25/sma99 | 近期最高价 | 缩小数据尺度 |
| bb_bbm/h/l | 同上 | 粗暴缩放,让网络自行学习相对关系 |
| psar | 同上 | |
| MACD | 400 | 经验值,覆盖 ±300 波动 |
| RSI | 100 | 已在 0–100 振荡 |
环境与 Agent 的改动焦点
reset()与_next_observation()内部新增indicators_history队列- 统一归一化逻辑,避免“脏”数据炸掉梯度
- 训练脚本仅新增一行
df = AddIndicators(df),其余参数保持不变,方便公平对比
训练与结果
| 超参数 | 设定 |
|---|---|
| agent | Dense Network |
| 学习率 | 1e-5 |
| 回合数 | 50,000 |
| lookback | 50 |
| 测试窗口 | 720 根 K 线 |
对比数据
| 版本 | Net Worth | 每回合委托数 | 亏损回合数 |
|---|---|---|---|
| 纯价格代理 | 1054.48 | 140.57 | 14 |
| 叠加指标代理 | 1078.62 | 135.95 | 1 |
几乎相同的训练时间(16 h),纯收益提升 2.3%,最大回撤显著减少。
FAQ:关于实盘与下一步的常见问题
Q1:这些指标是不是会导致过拟合?
A:RL 代理不会死记硬背信号——它们学习的是“带噪声的多维分布”。指标仅提供更多特征,不会暴露未来数据。建议在 更长周期 与多币种回溯测试。
Q2:训练太久显卡受不住怎么办?
A:下期教程将演示 向量化并行环境:16 条进程兜底,1080Ti 也可 8 小时完工。
Q3:为何只用 Dense?CNN/LSTM 表现如何?
A:在 50 根窗口内,CNN 对局部时序模式并不敏感,LSTM 收敛更慢。Dense 快速迭代 + 指标特征 已经达到坪效 Sweet Spot,留给大家作为作业自行尝试。
Q4:能否直接套用到实盘?
A:务必考虑 延迟、滑点、手续费、API 限速 四类摩擦。先在模拟盘运转 2 周 无异常,再小仓位真金试水。
Q5:数据源去哪找?
A:可通过交易所公开 REST API 或加密货币数据聚合平台整批下载,随后清洗成 OHLCV 标准格式即可。
小结与预告
本篇文章通过实战证明:把技术指标融进强化学习,确能提高比特币交易机器人的稳健性与获利能力。下一步,我们将:
- 下载 更长周期的 1 分钟 K 线
- 多进程并行,训练时间从“天”压缩到“小时”
- 可能引入 Transformer 对价格-指标序列做更深层的 Attention 建模
敬请期待!
免责声明:本文仅用于技术学习,所有示例不构成投资建议。实盘风险极高,请量力而为。