Skip to content

flizzywine/FMZ__auto_trade

Repository files navigation

FMZ 加密货币趋势交易策略

基于交易所原生订单的自动化趋势跟踪策略,适用于币安期货交易。

项目简介

本项目实现了一个基于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 列表中添加其他币安期货交易对。

策略逻辑

仓位管理

策略采用分批建仓策略:

  1. 底仓(50%): 初始建仓,设置止损 -0.6 ATR
  2. 加仓(50%): 浮盈 +0.1 ATR 时触发,补充至满仓
  3. 满仓(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 (返回空闲)

执行流程

  1. 参数设置: 选择交易对、方向、入场模式、最大亏损额
  2. 建立底仓: 执行入场单,建立50%仓位
    • 挂止损单: -0.6 ATR
    • 挂加仓单: +0.1 ATR
  3. 触发加仓: 浮盈达标,自动加仓至满仓
    • 撤销旧止损单
    • 挂满仓止损: -0.3 ATR
    • 挂跟踪止盈单
    • 挂多级限价止盈单
  4. 自动出场: 触发止损或止盈,策略完成

技术架构

核心组件

OrderManager: 订单管理类

  • 封装币安期货API调用
  • 支持市价、限价、止损、跟踪止盈等订单类型
  • 使用FMZ平台方法处理市价/限价单
  • 通过币安API处理高级订单类型

PrecisionManager: 精度管理类

  • 从交易所获取价格和数量精度
  • 缓存精度配置,避免重复请求
  • 自动格式化订单参数

OrderBasedStrategyManager: 策略管理器

  • 实现完整的状态机逻辑
  • 每2秒检查仓位变化
  • 自动推进交易流程

ATR计算

使用前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 参数

所有平仓订单必须设置 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: 加快测试速度,便于在短时间内验证完整交易流程。

风险提示

  • 加密货币交易存在高风险,可能导致本金损失
  • 策略仅供学习研究,使用前请充分测试
  • 建议先在模拟环境验证策略逻辑
  • 实盘交易请谨慎设置风险参数
  • 确保理解所有订单类型和风控机制

许可证

本项目仅供学习交流使用。

相关链接

About

发明者平台的自动化交易策略

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages