基于交易所原生订单的自动化趋势跟踪策略,适用于币安期货交易。
本项目实现了一个基于ATR(真实波幅)的趋势交易策略,通过交易所挂单机制自动执行交易,无需持续轮询价格。策略支持分批建仓、动态止损和多级止盈。
- 事件驱动架构: 利用交易所原生订单(STOP_MARKET、TRAILING_STOP_MARKET)实现策略逻辑
- 高可靠性: 订单在交易所服务器执行,机器人断线不影响已挂订单
- 低资源占用: 仅需每2秒检查仓位变化,无需高频轮询
- 灵活配置: 支持实盘/模拟盘参数切换,多种入场模式
- FMZ量化交易平台账号
- 币安期货API密钥(需开通期货交易权限)
- Python环境(FMZ托管者自带)
在 order_based_strategy.py 中设置实盘/模拟盘模式:
REAL = True # True=实盘, False=模拟盘默认配置支持:BTC_USDT, ETH_USDT, SOL_USDT, BTC_USDC, ETH_USDC, ZEC_USDT
可在 MY_SYMBOLS 列表中添加其他币安期货交易对。
策略采用分批建仓策略:
- 底仓(50%): 初始建仓,设置止损 -0.6 ATR
- 加仓(50%): 浮盈 +0.1 ATR 时触发,补充至满仓
- 满仓(100%): 收紧止损至 -0.3 ATR,设置多级止盈
仓位大小根据ATR动态计算:
满仓数量 = 最大亏损金额 / (0.35 × ATR值)
支持4种入场方式:
- 市价入场: 立即以市价建仓
- 限价入场: 指定价格触达后建仓
- 市价激活跟踪入场: 立即激活跟踪,回调后入场
- 限价激活跟踪入场: 价格触达后激活跟踪,回调后入场
支持3种波动率模式,每种对应不同的止盈配置:
小波动模式: 保守止盈,+0.3 ATR 平仓90%
中波动模式: 分级止盈
- +0.35 ATR: 平仓25%
- +0.50 ATR: 平仓45%
- +0.65 ATR: 平仓20%
大波动模式: 激进止盈,+0.65 ATR 平仓80%
另配置跟踪止盈单:+0.28 ATR 激活,回调0.15 ATR 触发
策略通过仓位变化自动推进状态:
IDLE (空闲)
↓ 用户选择参数
WAIT_CONFIRM (等待确认)
↓ 确认开仓
WAIT_ENTRY (等待入场)
↓ 检测到50%仓位
ENTRY_DONE (底仓建立)
↓ 检测到100%仓位
WAIT_EXIT (等待出场)
↓ 检测到仓位清空
IDLE (返回空闲)
- 参数设置: 选择交易对、方向、入场模式、最大亏损额
- 建立底仓: 执行入场单,建立50%仓位
- 挂止损单: -0.6 ATR
- 挂加仓单: +0.1 ATR
- 触发加仓: 浮盈达标,自动加仓至满仓
- 撤销旧止损单
- 挂满仓止损: -0.3 ATR
- 挂跟踪止盈单
- 挂多级限价止盈单
- 自动出场: 触发止损或止盈,策略完成
OrderManager: 订单管理类
- 封装币安期货API调用
- 支持市价、限价、止损、跟踪止盈等订单类型
- 使用FMZ平台方法处理市价/限价单
- 通过币安API处理高级订单类型
PrecisionManager: 精度管理类
- 从交易所获取价格和数量精度
- 缓存精度配置,避免重复请求
- 自动格式化订单参数
OrderBasedStrategyManager: 策略管理器
- 实现完整的状态机逻辑
- 每2秒检查仓位变化
- 自动推进交易流程
使用前20日K线数据计算ATR,排除当日未完成K线以提高准确性:
def get_atr(exchange, symbol, period=20):
records = exchange.GetRecords(PERIOD_D1)
atr_array = TA.ATR(records, period)
return atr_array[-2] # 使用昨日K线所有平仓订单必须设置 reduceOnly=true,防止平仓后反向开仓:
- 入场单/加仓单:
reduceOnly=false - 止损单/止盈单:
reduceOnly=true
币安跟踪单的 callbackRate 为百分比值,需正确转换:
callback_distance = 0.15 × atr_val
callback_rate = (callback_distance / activation_price) × 100所有价格和数量必须格式化至交易所要求的精度:
price = _N(raw_price, price_precision)
amount = _N(raw_amount, amount_precision)- FMZ格式:
BTC_USDT - 币安API格式:
BTCUSDT(需移除下划线)
Q: 为什么使用昨日ATR而非实时ATR?
A: 当日K线未完成,数据不稳定。使用昨日K线计算更可靠。
Q: 跟踪止盈如何工作?
A: 价格达到激活价后开始跟踪最高价,从最高价回调指定百分比时触发平仓。
Q: 满仓后为何收紧止损?
A: 加仓时已有浮盈,收紧止损保护利润(-0.6 ATR → -0.3 ATR)。
Q: 模拟盘参数为何缩小20倍?
A: 加快测试速度,便于在短时间内验证完整交易流程。
- 加密货币交易存在高风险,可能导致本金损失
- 策略仅供学习研究,使用前请充分测试
- 建议先在模拟环境验证策略逻辑
- 实盘交易请谨慎设置风险参数
- 确保理解所有订单类型和风控机制
本项目仅供学习交流使用。
- FMZ量化平台: https://www.fmz.com
- 币安期货API文档: https://binance-docs.github.io/apidocs/futures/cn