Freqtrade
Freqtrade 上手教程
Freqtrade 上手建议按 “Docker 部署 → 初始化目录 → 配置最小 config → 下载数据 → 生成策略 → 回测 → 模拟盘 → WebUI 监控” 跑通闭环。
1. 环境准备
推荐用 Docker,避免 Python、TA-Lib、CCXT 等依赖冲突。
docker pull freqtradeorg/freqtrade:stable然后创建工作目录:
mkdir -p ~/freqtrade-demo
cd ~/freqtrade-demo
mkdir -p user_data2. 初始化 user_data
docker run --rm -it \
-v $(pwd)/user_data:/freqtrade/user_data \
freqtradeorg/freqtrade:stable \
create-userdir --userdir user_data成功后 user_data/ 下会出现:
user_data/
├── data/
├── logs/
├── strategies/
└── config.json(后续生成)3. 写最小可用 config.json
先在 user_data/config.json 放一个能跑回测和模拟盘的最小配置:
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 1,
"stake_currency": "USDT",
"stake_amount": 100,
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "USD",
"timeframe": "5m",
"dry_run": true,
"trading_mode": "spot",
"entry_pricing": {
"price_side": "same",
"use_order_book": false
},
"exit_pricing": {
"price_side": "same",
"use_order_book": false
},
"exchange": {
"name": "binance",
"key": "",
"secret": "",
"ccxt_config": {
"enableRateLimit": true
},
"ccxt_async_config": {
"enableRateLimit": true
},
"pair_whitelist": [
"BTC/USDT"
],
"pair_blacklist": []
},
"pairlists": [
{ "method": "StaticPairList" }
],
"bot_name": "freqtrade",
"initial_state": "stopped",
"internals": {
"process_throttle_secs": 5
}
}新手阶段建议:
- 保持
"dry_run": true - 先用现货
spot - 只用
StaticPairList - 不要一开始就上合约、VolumePairList 或 order book 定价
4. 下载历史数据
docker run --rm -it \
-v $(pwd)/user_data:/freqtrade/user_data \
freqtradeorg/freqtrade:stable \
download-data \
--exchange binance \
--pairs BTC/USDT \
--timeframes 5m成功后会生成类似:
user_data/data/binance/BTC_USDT-5m.feather这步通过说明数据层已经通了。
5. 生成第一个策略
docker run --rm -it \
-v $(pwd)/user_data:/freqtrade/user_data \
freqtradeorg/freqtrade:stable \
new-strategy \
--strategy MyFirstStrategy \
--template minimal \
--userdir user_data会生成:
user_data/strategies/MyFirstStrategy.py新版模板可能不再提供 basic,用 minimal 更稳。
6. 写一个最小策略
打开 user_data/strategies/MyFirstStrategy.py,核心逻辑可以写成:
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
class MyFirstStrategy(IStrategy):
timeframe = "5m"
minimal_roi = {
"0": 0.1
}
stoploss = -0.1
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe["ma20"] = ta.SMA(dataframe["close"], timeperiod=20)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe["close"] > dataframe["ma20"]),
"enter_long",
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe["close"] < dataframe["ma20"]),
"exit_long",
] = 1
return dataframe这个策略只是验证流程:价格上穿 20 日均线做多,下穿平仓。不要把它当成成熟策略。
7. 跑回测
docker run --rm -it \
-v $(pwd)/user_data:/freqtrade/user_data \
freqtradeorg/freqtrade:stable \
backtesting \
--config user_data/config.json \
--strategy MyFirstStrategy回测会读取 config 里的交易所、交易对和时间周期,自动匹配本地 .feather 数据文件。
8. 启动模拟盘
确认回测不报错后,可以跑模拟盘:
docker run --rm -it \
-v $(pwd)/user_data:/freqtrade/user_data \
freqtradeorg/freqtrade:stable \
trade \
--config user_data/config.json \
--strategy MyFirstStrategy只要 dry_run 仍是 true,就不会产生真实订单。
9. 打开 WebUI 监控
启动交易进程后,默认可以在浏览器访问:
http://localhost:8080这里能看到持仓、成交记录、资金曲线和机器人状态。
如果端口冲突,可在 config 里调整 api_server 端口。
10. 推荐练习顺序
- 跑通
create-userdir - 配置最小
config.json - 下载
BTC/USDT 5m数据 - 生成
MyFirstStrategy - 跑通回测
- 启动
dry_run模拟盘 - 打开 WebUI 观察信号
- 再逐步加入止损、止盈、多交易对和 Telegram 通知
11. 常见坑
| 问题 | 原因 | 处理 |
|---|---|---|
| 回测没数据 | 未下载历史数据 | 先跑 download-data |
| 策略不交易 | 没有信号或数据不足 | 检查 enter_long/exit_long |
| 启动报错 | config 字段缺失 | 用上面最小配置先跑通 |
| 端口冲突 | 8080 被占用 | 修改 api_server 端口 |
| 交易所连不上 | API Key 权限/网络问题 | 先用 dry_run + 公开数据 |
| 过拟合 | Hyperopt 跑太狠 | 留样本外数据验证 |
实盘前至少跑几周模拟盘,并确认日志、止损、撤单和断网恢复都正常。