想在加密货币量化赛道快人一步?你需要先从 Freqtrade 的关键词汇、执行流程与回测原理开始。全文约 1,600 字,手把手梳理策略开发到数据验证的每一个环节。
一、关键词速览
核心关键词:交易策略、BTC/USDT、时间周期、技术指标、回测、已实现利润、期货命名、OHLCV 数据、Hyperopt、止损止盈
二、核心术语拆解
| 术语 | 一句话解释 | 实操场景 |
|---|---|---|
| 策略 | 用代码告诉机器人“何时买、何时卖”的交易逻辑 | 本地 MyStrategy.py 里写逻辑 |
| 交易对 | 交易市场中的资产组合,如 BTC/USDT | 现货用 ETH/USDT,期货需写成 ETH/USDT:USDT |
| 时间周期 | 蜡烛图的 K 线粒径,比如 5m、1h、1d | 日内策略常用 5m–15m,波段策略取 1h–4h |
| 未成交订单 vs. 交易 | 订单:挂单等待成交;交易:仓位已开,利润波动 | UI 中分别用 Open Orders 与 Trades 标签展示 |
| 已实现利润 | 已平仓、落袋为安的收益 | 与 未实现利润 相加得到 总利润 |
| 限价单 & 市价单 | 限价单:指定价格成交;市价单:立即撮合 | 高频量化通常限价,低频风控可市价 |
💡 省钱小贴士:总利润计算自动包含交易所手续费,实盘还能识别 BNB 折扣,无需手动扣除。
三、交易对的命名惯例
- 现货格式:
BASE/QUOTE
例:XRP/USDT、BTC/USDC
精简、无后缀,简单直观。 - 期货格式:
BASE/QUOTE:SETTLE
例:ETH/USDT:USDT、ADA/USD:USDSETTLE表示结算币种,万不可省,否则机器人会报“交易对不可用”。
四、机器人“心跳”揭秘:迭代循环做了什么?
4.1 触发条件
运行 freqtrade trade(实盘)或 freqtrade backtesting/hyperopt(回测/优化)即开启循环。
4.2 每一步的细节
1. 从本地持久化读取未平仓交易
2. 计算可交易的交易对列表
3. 下载全量交易对的 OHLCV 数据(只在下一个 `process_throttle_secs` 间隔后更新)
4. 运行 bot_loop_start():策略层面的全局初始化
5. 扫描所有交易对:
├── populate_indicators() : 计算技术指标
├── populate_entry_trend() : 产生开仓信号
└── populate_exit_trend() : 产生平仓信号
6. 管理开放订单:
├── check_entry_timeout() : 入场超时保护
├── check_exit_timeout() : 出场超时保护
├── adjust_entry_price() : 动态调单
7. 验证现有仓位:
├── 止损(止损单 / custom_stoploss())
├── ROI、出场信号、custom_exit()
├── confirm_trade_exit() 确保允许平仓
└── adjust_trade_position() 重新加仓或减仓
8. 检查槽位(max_open_trades)
9. 为每个入场信号执行:
├── confirm_trade_entry()
├── custom_entry_price()
├── leverage() 确定杠杆
├── custom_stake_amount() 确定仓位大小
└── 下入场订单循环每秒或每几秒重启一次,直到用户手动 Ctrl+C 关闭。
五、回测 / Hyperopt 怎么做?
与实时盘不同,回测把全部历史数据一次性加载,在蜡烛级别模拟交易:
- 预先跑
populate_indicators()→populate_entry_trend()→populate_exit_trend() - 动作顺序完整:进场、止损、止盈、调仓、出场,一帧不漏
- 每次回调「每根蜡烛」调用 1 次,可用
--timeframe-detail提升精度 - 默认使用交易所官方发布的手续费;可加
--fee 0.001强制自定义
注意:
回测不会触发 check_entry_timeout() 等高频回调,因此真机环境需时刻关注撮合延迟差异,防止 回测漂移。
六、常见疑问 FAQ
- Q:如果没有 GPU 能否 Hyperopt?
A:可以,Freqtrade 依赖 CPU 并行,8 线程以上即可跑出有效结果。 - Q:策略运行一段时间后 MA 指标迟滞怎么办?
A:在populate_indicators()中补充提前重计算的缓存逻辑,或使用 talib 加速库。 - Q:回测忘记写 fees,会亏多少?
A:默认已含交易所最低费率;忽略自定义会低估 已实现利润 1–2%,策略不改变误差比例。 - Q:
leverage()返回 0 有什么风险?
A:会触发强制平仓:实际杠杆为 0 意味着市价下单 0%,仓位无法建立,造成信号空转。 - Q:现货与期货的策略能共用一个文件吗?
A:只要交易对命名无误并且逻辑兼容即可;建议在__init__做市场检测,针对不同市场增减出场条件。 - Q:修改策略后是否需要重新下载 OHLCV?
A:策略逻辑变更不影响缓存文件;只当新添交易对或改变时间周期才需补充下载。
七、避坑清单(干货)
- 交易对大小写敏感:
btc/usdt与BTC/USDT不兼容。 - 时间周期拼写:用
"15m"勿写成"15min"。 - 自定义手续费:回测加
--fee 0.002能更贴近真实费率。 - 新币种上线延迟:交易所常在上市 60 分钟内才给出完整历史,回测请先检查 OHLCV 是否填充完整。
八、小结:一步一步落地
- 熟悉上面 10 余个高频关键词,随手写在注释里。
- 选 1–2 个核心交易对(如
BTC/USDT、ETH/USDT),用现货起步,初步验证买卖点。 - 本地交叉验证 5m & 1h 周期,确认 时间周期 不影响指标解释权。
- 用
fretrade backtesting对比三次费率、杠杆差异,把 总利润 误差控制在 2% 内。 - 进入实盘后,日志等级调回
INFO,再逐条核对 已实现利润 与交易所对账单是否一致。
Freqtrade 并非魔法,但处理好命名、费率、生命周期三大环节,就能让策略在真机里同频回测,稳稳跑赢 高波动加密市场。祝你早日实现“无人值守也能睡后盈利”!