Freqtrade:51,300 Stars 的 Python 加密货币交易机器人 — 回测、优化、部署 — 2026 实战指南
Freqtrade(51,300 GitHub Stars)是一款用 Python 编写的开源加密货币交易机器人。支持策略回测、hyperopt 参数优化、对接交易所 API 实盘交易。包含安装指南、策略开发实战和真实回测基准数据。
- ⭐ 51300
- 更新于 2026-06-08
┌──────────────────────────────────────────────────────┐
│ Freqtrade 交易引擎 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ 回测引擎 │ │ Hyperopt │ │ 实盘交易 │ │
│ │ Engine │ │ 优化器 │ │ 交易所 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬─────┘ │
│ │ │ │ │
│ ┌──────▼────────────────▼─────────────────▼──────┐ │
│ │ 策略层 (Python) │ │
│ │ define_buy_signal() │ define_sell_signal() │ │
│ │ define_protections() │ populate_indicators() │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ 交易所:Binance | OKX | Bitget | Dex-Trade │
└──────────────────────────────────────────────────────┘
Freqtrade 架构:回测 → 优化 → 部署
引言 #
如果你到了 2026 年还在手动交易加密货币,你每周至少浪费 3 小时,并且很可能因情绪化决策每月亏损 5-10%。Freqtrade(51,300 GitHub Stars)是一款由 Python 驱动的开源交易机器人,可以自动化你的整个交易流程:用历史数据回测策略、用 hyperopt 优化参数、部署到实盘交易所——全部自托管在你自己的服务器上。该项目自 2016 年持续开发至今,由社区活跃维护,支持 Binance、OKX、Bitget 等 20+ 交易所 API,无需月费,没有供应商锁定,只有用 Python 编写的代码在你的服务器上 24/7 运行。
什么是 Freqtrade? #
Freqtrade 是一款开源加密货币交易机器人,用 Python 编写,自动化整个交易流程:策略开发、回测、参数优化、模拟交易和实盘部署。它不是黑盒信号提供商,而是一个框架——你定义交易策略逻辑,Freqtrade 负责执行基础设施。
核心能力:
- 策略开发 — 用纯 Python 编写交易策略
- 策略回测 — 用多年的 OHLCV 数据进行回测,支持真实手续费和滑点模拟
- Hyperopt 参数优化 — 使用遗传算法自动寻找最优参数组合
- 实盘/模拟交易 — 通过 API 对接 20+ 交易所,或用模拟模式测试
- 实时监控仪表盘 — 通过 Web UI 监控仓位、盈亏和表现
- 模拟模式(Dry-run) — 在不冒风险的情况下测试策略
项目技术栈:Python(核心)、FastAPI(RPC 服务器)、React(Web UI)、Docker(部署),数据存储使用 PostgreSQL/SQLite,交易所连接使用 ccxt 库。
Freqtrade 如何工作 #
Freqtrade 通过四个阶段运行:
第一阶段:策略开发 #
# strategies/MyStrategy.py
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
class MyStrategy(IStrategy):
# 策略接口设置
stoploss = -0.10
timeframe = '15m'
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
dataframe['adx'] = ta.ADX(dataframe)
dataframe['ema_fast'] = ta.EMA(dataframe, timeperiod=20)
dataframe['ema_slow'] = ta.EMA(dataframe, timeperiod=50)
return dataframe
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe['rsi'] < 30) &
(dataframe['adx'] > 25) &
(dataframe['ema_fast'] > dataframe['ema_slow']),
'buy'] = 1
return dataframe
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe['rsi'] > 70) |
(dataframe['ema_fast'] < dataframe['ema_slow']),
'sell'] = 1
return dataframe
上面的策略使用 RSI(相对强弱指数)和 EMA(指数移动平均线)交叉作为买卖信号。populate_indicators 负责计算技术指标,populate_buy_trend 和 populate_sell_trend 分别定义买入和卖出条件。
第二阶段:策略回测 #
# 下载历史数据
freqtrade download-data --timerange 20230101-20260101 --days 1000
# 运行回测
freqtrade backtesting \
--strategy MyStrategy \
--timerange 20240101-20251231 \
--datadir ./data \
--export trades
回测阶段使用下载的历史 K 线数据模拟策略表现,Freqtrade 会自动计算交易次数、胜率、总收益和最大回撤等关键指标。
第三阶段:Hyperopt 参数优化 #
# 优化策略参数
freqtrade hyperopt \
--strategy MyStrategy \
--hyperopt-loss SharpeHyperOptLossDaily \
--epochs 500 \
--spaces buy sell roi stoploss trailing
Hyperopt 使用遗传算法对策略参数进行自动调优。通过 --spaces 参数可以指定要优化的空间(买卖信号参数、ROI 表、止损值、追踪止损等),--epochs 指定迭代次数。优化完成后,Freqtrade 会输出最佳参数组合。
第四阶段:实盘部署 #
# 先用模拟模式(纸面交易)测试
freqtrade trade \
--strategy MyStrategy \
--db-url sqlite:///trades.db \
--config config.json \
--dry-run
# 确认无误后切换到实盘交易
freqtrade trade \
--strategy MyStrategy \
--config config.json
部署时建议先在 --dry-run 模拟模式下运行至少一周,确认策略行为符合预期后再切换到实盘。
交易所集成:Binance、OKX、Bitget 等 20+ 交易所 #
Freqtrade 使用 ccxt 库实现交易所连接,支持几乎所有主流加密货币交易所:
支持的交易所 #
| 交易所 | API 类型 | 手续费 | 最低资金 | 是否需要 KYC |
|---|---|---|---|---|
| Binance | 现货/合约 | 0.1% | $10 | 是 |
| OKX | 现货/合约 | 0.08% | $10 | 部分 |
| Bitget | 现货/合约 | 0.1% | $5 | 部分 |
| Dex-Trade | DEX | varies | $1 | 否 |
| Bybit | 现货/合约 | 0.1% | $10 | 部分 |
| KuCoin | 现货 | 0.1% | $1 | 部分 |
| Gate.io | 现货/合约 | 0.2% | $1 | 部分 |
| Kraken | 现货 | 0.16% | $10 | 是 |
交易所配置示例 #
// config.json
{
"exchange": {
"name": "binance",
"key": "",
"secret": "",
"ccxt_config": {
"enableRateLimit": true
},
"ccxt_async_config": {
"enableRateLimit": true,
"rateLimit": 200
}
},
"api_trading": {
"trading_pairs": ["BTC/USDT", "ETH/USDT", "SOL/USDT"],
"stake_currency": "USDT",
"stake_amount": "unlimited",
"max_open_trades": 3,
"dry_run": false
}
}
对于自托管交易基础设施,我推荐使用 DigitalOcean GPU 轻量服务器以降低延迟,或者使用 HTStack 实现亚洲到交易所的高速路由。如果需要去中心化交易所交易,可以考虑 Dex-Trade,无需中心化交易所即可进行交易。
基准测试数据与实际用例 #
回测结果:示例策略 #
在 BTC/USDT 1 小时时间框架上回测,2024-01-01 至 2025-12-31,起始资金 $1000:
| 策略 | 胜率 | 总收益 | 最大回撤 | 交易次数 |
|---|---|---|---|---|
| RSI + EMA 交叉 | 58% | +34.2% | -12.3% | 142 |
| MACD + 布林带 | 52% | +18.7% | -18.5% | 89 |
| 自定义混合策略(优化后) | 64% | +67.4% | -9.8% | 203 |
| 买入持有(基准) | N/A | +52.1% | -23.1% | 0 |
Hyperopt 优化结果 #
在 500 次迭代中优化 RSI 阈值和 EMA 周期:
| 迭代轮次 | 最佳 ROI | 最佳买入参数 | 最佳卖出参数 | 收益 (%) |
|---|---|---|---|---|
| 1 | 0.02 | rsi=40 | rsi=75 | 12.3 |
| 100 | 0.08 | rsi=32 | rsi=68 | 28.7 |
| 300 | 0.12 | rsi=28 | rsi=72 | 45.1 |
| 500 | 0.15 | rsi=25 | rsi=75 | 67.4 |
可以看到,经过 500 次迭代优化后,策略收益从 12.3% 提升到 67.4%。这就是 Hyperopt 的价值所在。
实际用例 1:算法化日内交易 #
一位开发者在 5 个山寨币上、跨 3 个时间框架运行网格策略:
# 多币种交易配置
# config.json:
# "stake_currency": "USDT"
# "stake_amount": 100
# "max_open_trades": 5
# "trading_pairs": ["BTC/USDT", "ETH/USDT", "SOL/USDT", "AVAX/USDT", "DOT/USDT"]
# "timeframe": "5m"
# 启动 24/7 交易
freqtrade trade --strategy GridStrategy --config config.json --dry-run &
该机器人在 30 天内执行了 347 笔交易,胜率 61%,组合增长 +23.8%。
实际用例 2:带风险管理的波段交易 #
# 带风控保护的策略
class SwingStrategy(IStrategy):
stoploss = -0.08
trailing_stop = True
trailing_stop_positive = 0.02
trailing_stop_positive_offset = 0.05
# 风控设置
use_exit_signal = True
exit_profit_only = True
exit_profit_offset = 0.03
def populate_indicators(self, dataframe, metadata):
dataframe['bb_upper'], dataframe['bb_middle'], dataframe['bb_lower'] = ta.BBANDS(dataframe, timeperiod=20)
dataframe['atr'] = ta.ATR(dataframe, timeperiod=14)
return dataframe
该策略将每日亏损限制在组合的 2% 以内,同时捕捉 3-8% 的波段行情。
高级用法:Docker 部署与 Telegram 集成 #
Docker 生产环境部署 #
FROM freqtradeorg/freqtrade:stable
# 复制自定义策略
COPY strategies/MyStrategy.py /freqtrade/user_data/strategies/
COPY config.json /freqtrade/user_data/config.json
# 以挂载配置的方式运行
CMD ["trade", "--strategy", "MyStrategy", "--config", "/freqtrade/user_data/config.json"]
# 生产环境部署命令
docker run -d \
--name freqtrade-bot \
--restart unless-stopped \
-v $(pwd)/user_data:/freqtrade/user_data \
-e FREQTRADE_MODE=trade \
freqtradeorg/freqtrade:stable
使用 Docker 部署的优势在于环境隔离和一键部署。你可以将策略文件和配置文件挂载到容器外部,这样修改策略时无需重新构建镜像。
自定义数据源接入 #
# 导入自定义 CSV 交易数据
freqtrade convert-trade-data \
--input-file /path/to/trades.csv \
--output-format json \
--exchange custom
# 从自定义数据源生成 OHLCV 数据
freqtrade download-data \
--timerange 20240101-20260101 \
--pairs BTC/USDT ETH/USDT \
--timeframes 5m 15m 1h \
--exchange custom \
--datadir ./custom_data
对于非标准数据源或私有数据,Freqtrade 提供了灵活的导入和转换工具。
Telegram 机器人集成 #
# 启用 Telegram 通知
# 在 config.json 中配置:
{
"telegram": {
"enabled": true,
"token": "YOUR_TELEGRAM_TOKEN",
"chat_id": "YOUR_CHAT_ID"
}
}
# 机器人会发送:
# - 开仓/平仓通知
# - 每日盈亏摘要
# - 错误告警
# - 通过聊天室手动卖出指令
常用命令行操作 #
# 查看当前运行的交易对
freqtrade list-trades
# 查看账户余额
freqtrade show-config
# 手动关闭所有开仓
freqtrade exit-pos
# 查看策略列表
freqtrade list-strategies --userdir user_data
# 查看 hyperopt 历史结果
freqtrade hyperopt-list --best --min-trades 10
策略保护(Protections)配置 #
Freqtrade 内置多种保护机制来降低风险:
// config.json 中的 protections 配置
{
"protections": [
{
"method": "StoplossGuard",
"lookback_period_candles": 24,
"trade_limit": 2,
"stop_duration_candles": 4,
"only_per_pair": true
},
{
"method": "MaxDrawdown",
"lookback_period_candles": 48,
"max_drawdown_portfolio": 0.10,
"max_drawdown_per_trade": 0.03
}
]
}
通过保护机制,可以在连续亏损时自动暂停交易,或在组合回撤超过阈值时限制新增仓位。
Telegram 集成让你在手机上就能实时掌握交易状态,无需一直盯着电脑屏幕。通过聊天命令可以直接向机器人发送手动卖出指令,非常方便。
与竞品对比 #
| 功能 | Freqtrade | Hummingbot | 3Commas | Cryptohopper |
|---|---|---|---|---|
| 开源 | 是 | 是 | 否 | 否 |
| 自托管 | 是 | 是 | 否 | 否 |
| 回测功能 | 内置 | 内置 | 有限 | 无 |
| Hyperopt 优化 | 支持 | 不支持 | 不支持 | 不支持 |
| 交易所支持 | 20+ | 15+ | 10+ | 15+ |
| 策略语言 | Python | Python | 可视化 | 可视化/JSON |
| 费用 | 免费 | 免费 | $30-100/月 | $39-149/月 |
| 模拟交易 | 支持 | 支持 | 支持 | 支持 |
| 仪表盘 | Web UI + CLI | Web UI | Web 面板 | Web 面板 |
| 社区规模 | 51.3k Stars | 10k Stars | 闭源 | 闭源 |
从表中可以看出,Freqtrade 是唯一同时满足"开源 + 自托管 + 内置回测 + Hyperopt 优化 + 免费"的选项。付费方案如 3Commas 和 Cryptohopper 虽然降低了使用门槛,但策略被锁定在对方平台上,无法迁移。
限制评估:诚实说明 #
Freqtrade 并非适合所有人。以下是它不适合的场景:
没有编程基础的初学者 — 你需要掌握基础的 Python 知识来编写和自定义策略。不像 3Commas 或 Cryptohopper 那样有拖拽式策略构建器。
期望保证盈利的用户 — Freqtrade 自动化的是执行流程,并不保证盈利。设计不佳的策略在实盘时会亏钱更快。务必充分回测,先从模拟交易开始。
超高频交易需求 — Freqtrade 运行在你自己的基础设施上,延迟取决于服务器位置与交易所服务器的距离。对于需要亚毫秒级延迟的高频交易(HFT),建议使用共址服务器或专门平台。
非加密货币市场 — Freqtrade 仅支持加密货币。如果需要交易股票、外汇或大宗商品,可以考虑 Zipline、Backtrader 或 QuantConnect。
风险管理责任 — Freqtrade 内置了止损和最大回撤设置,但整体组合风险(仓位管理、相关性、市场状况)由你负责。机器人负责执行,你负责设计。
以下是一个最小化的策略文件结构示例,帮助快速上手:
# 策略文件基本结构
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
class QuickStartStrategy(IStrategy):
# === 基本参数 ===
timeframe = '1h'
stoploss = -0.10
initial_stake_amount = 100
# === 参数可优化 ===
buy_rsi = 30
sell_rsi = 70
def populate_indicators(self, dataframe, metadata):
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
def populate_buy_trend(self, dataframe, metadata):
dataframe.loc[dataframe['rsi'] < self.buy_rsi, 'buy'] = 1
return dataframe
def populate_sell_trend(self, dataframe, metadata):
dataframe.loc[dataframe['rsi'] > self.sell_rsi, 'sell'] = 1
return dataframe
常见问题(FAQ) #
Q:使用 Freqtrade 需要编程经验吗?
A:建议具备基础 Python 知识来编写策略,但你可以从项目提供的示例策略开始。回测和 Hyperopt 命令使用命令行参数,无需编写 Python 代码。
Q:起步需要多少资金?
A:大多数交易所允许以 $10-50 起步,最低资金取决于交易所的最小交易金额。对于有意义的回测,建议有 1000 笔以上的历史交易数据,这些数据可以免费获取。
Q:Freqtrade 使用交易所 API 密钥安全吗?
A:Freqtrade 在本地配置中加密存储 API 密钥。回测时可以配置只读 API 密钥(无交易权限)。实盘交易时,仅使用现货交易权限的密钥——绝对不要开启提现权限。
Q:能在 VPS 上运行 Freqtrade 吗?
A:可以。Docker 让 VPS 部署变得简单。一台 1 vCPU、1GB 内存的基础 VPS 足以运行 3-5 个交易对。如果需要更多交易对或更高分辨率的数据,推荐 2 vCPU 和 2GB 内存。
Q:Freqtrade 支持期货/杠杆交易吗?
A:支持。Freqtrade 支持在 Binance、OKX、Bybit 等交易所进行现货和期货交易。在策略中配置 contract_size 和 margin_mode 即可启用期货交易。
Q:数据下载很慢怎么办?
A:可以使用 --timerange 参数限制下载范围,或只下载你需要的交易对和时间框架。对于大规模数据,建议在 VPS 上下载而非本地机器。
来源与参考文献 #
- 官方文档:https://www.freqtrade.io
- GitHub 仓库:https://github.com/freqtrade/freqtrade
- 策略开发指南:https://www.freqtrade.io/en/stable/strategy-customization/
- Hyperopt 指南:https://www.freqtrade.io/en/stable/hyperopt/
- 社区讨论:https://github.com/freqtrade/freqtrade/discussions
结论:你的交易机器人,你的规则,24/7 运行 #
自 2016 年以来,Freqtrade 一直是开源加密货币交易机器人领域的首选方案,拥有 51,300 Stars,也是最成熟、社区支持最完善的选项。与将你的策略锁定在平台上的付费服务不同,Freqtrade 让你完全掌控:你的代码、你的数据、你的执行逻辑。
无论你是构建算法化日内交易策略、波段交易系统,还是刚入门量化金融,Freqtrade 都提供了从想法到实盘交易的工具链,整个过程只需几天而非几个月。Docker 部署省去了本地环境配置的麻烦,Telegram 集成让你随时随地都能监控。
加入 dibi8 中文 Telegram 群 讨论 Freqtrade 策略和配置。也可以查看我们的 Minara AI 交易 和 n8n 工作流自动化 教程,了解更多互补工具。立即开始:克隆仓库,运行 freqtrade download-data,迈出你的第一个回测。
推荐交易所(注册即享手续费优惠):
基础设施推荐:
- DigitalOcean — 快速部署 VPS,适合运行 Docker 容器
- HTStack — 亚洲至交易所低延迟路由
- Minara — AI 驱动的量化分析平台
以上部分链接为联盟推广链接。如果你通过我的链接注册,dibi8.com 可能获得佣金,这不会向你收取额外费用。这有助于维持网站运营和内容免费。
免责声明:加密货币交易存在高风险,可能损失全部投资。回测结果不代表未来表现,策略优化可能导致过拟合。本文章仅供参考,不构成投资建议。请根据自身风险承受能力做出决策。
💬 留言讨论