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_trendpopulate_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-TradeDEXvaries$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最佳买入参数最佳卖出参数收益 (%)
10.02rsi=40rsi=7512.3
1000.08rsi=32rsi=6828.7
3000.12rsi=28rsi=7245.1
5000.15rsi=25rsi=7567.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 集成让你在手机上就能实时掌握交易状态,无需一直盯着电脑屏幕。通过聊天命令可以直接向机器人发送手动卖出指令,非常方便。

与竞品对比 #

功能FreqtradeHummingbot3CommasCryptohopper
开源
自托管
回测功能内置内置有限
Hyperopt 优化支持不支持不支持不支持
交易所支持20+15+10+15+
策略语言PythonPython可视化可视化/JSON
费用免费免费$30-100/月$39-149/月
模拟交易支持支持支持支持
仪表盘Web UI + CLIWeb UIWeb 面板Web 面板
社区规模51.3k Stars10k Stars闭源闭源

从表中可以看出,Freqtrade 是唯一同时满足"开源 + 自托管 + 内置回测 + Hyperopt 优化 + 免费"的选项。付费方案如 3Commas 和 Cryptohopper 虽然降低了使用门槛,但策略被锁定在对方平台上,无法迁移。

限制评估:诚实说明 #

Freqtrade 并非适合所有人。以下是它不适合的场景:

  1. 没有编程基础的初学者 — 你需要掌握基础的 Python 知识来编写和自定义策略。不像 3Commas 或 Cryptohopper 那样有拖拽式策略构建器。

  2. 期望保证盈利的用户 — Freqtrade 自动化的是执行流程,并不保证盈利。设计不佳的策略在实盘时会亏钱更快。务必充分回测,先从模拟交易开始。

  3. 超高频交易需求 — Freqtrade 运行在你自己的基础设施上,延迟取决于服务器位置与交易所服务器的距离。对于需要亚毫秒级延迟的高频交易(HFT),建议使用共址服务器或专门平台。

  4. 非加密货币市场 — Freqtrade 仅支持加密货币。如果需要交易股票、外汇或大宗商品,可以考虑 Zipline、Backtrader 或 QuantConnect。

  5. 风险管理责任 — 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_sizemargin_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,迈出你的第一个回测。

推荐交易所(注册即享手续费优惠):

  • Binance — 全球最大交易所,支持现货和合约
  • OKX — 亚洲用户友好,API 稳定
  • Dex-Trade — 去中心化交易所交易,无需 KYC

基础设施推荐:

  • DigitalOcean — 快速部署 VPS,适合运行 Docker 容器
  • HTStack — 亚洲至交易所低延迟路由
  • Minara — AI 驱动的量化分析平台

以上部分链接为联盟推广链接。如果你通过我的链接注册,dibi8.com 可能获得佣金,这不会向你收取额外费用。这有助于维持网站运营和内容免费。

免责声明:加密货币交易存在高风险,可能损失全部投资。回测结果不代表未来表现,策略优化可能导致过拟合。本文章仅供参考,不构成投资建议。请根据自身风险承受能力做出决策。

📦 出现在以下合集中

💬 留言讨论