这是一个 Testnet 优先的 Binance USDⓈ-M 永续合约执行与监督核心。系统提供策略接入前必须具备的账户控制、硬性风控、持久化状态、断线对账、行情数据契约和人工操作能力,并包含 EMA/ATR 工程验证策略和一个高频触发的 Testnet 生命周期验证夹具。策略不会自行发送订单;只有人工显式确认的信号才可能进入 daemon 队列。
主网默认锁定,只有同时设置 BINANCE_ENV=mainnet 和 BINANCE_ALLOW_MAINNET=I_UNDERSTAND 才能解锁。
- 使用
.autotrade/writer.lock强制单一交易写入进程。 - daemon 在线时,人工操作和入场请求都通过持久化命令队列执行。
- 入场意图 30 秒后过期,且不能访问 API 凭据。
- 交易 POST 请求不会盲目重试,未知结果按客户端订单号对账。
- 风险降低类请求保留本地限频优先级。
- 修改止损时先创建新保护单,再撤销旧保护单。
- 部分平仓会同步保护数量,持仓归零会清理两类订单。
- 开仓暂停状态可持久化,必须提供明确理由才能解锁。
- 用户数据流重连前始终执行 REST 账户、订单和成交对账。
- 只保存已收盘 K 线,断线后通过 REST 补齐缺口。
cd C:\Users\22276\Desktop\AutoTrade
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -e .
Copy-Item .env.example .env在 .env 中填写 Binance Futures Testnet 凭据。实际执行订单前必须逐项审核其中的风险上限。
autotrade health
autotrade quote --symbol BTCUSDT
autotrade account
autotrade snapshot
autotrade income
autotrade audit --limit 20回补已收盘 K 线,不启动 daemon:
autotrade backfill --symbol BTCUSDT --interval 1m分页回补 UTC 历史范围到独立研究数据库:
autotrade backfill-range --symbol BTCUSDT --interval 5m --start 2026-04-01 --end 2026-07-01 --database .autotrade/research.db使用相同的已收盘 K 线契约离线回放工程验证策略:
autotrade replay-strategy --strategy ema-atr-v1 --symbol BTCUSDT --interval 5m --database .autotrade/research.db执行模型和限制见 工程验证策略。
查看策略实例、只读 Shadow 和显式 Testnet 信号提交:
autotrade strategies
autotrade shadow --instance lifecycle-pulse --database .autotrade/orders.db
autotrade activate-strategy --instance lifecycle-pulse --reason "验证 Testnet 订单生命周期"
autotrade submit-strategy --instance lifecycle-pulseShadow 不会自动下单。提交命令默认仍是预览,实际入队必须同时使用 --execute 和
--confirm-testnet I_UNDERSTAND,并通过全部健康、风险和重复信号门禁。
多个实例可同时 Shadow,但只有一个实例可以被激活执行。配置和插件说明见
策略注册与实例管理。
5 分钟普通/隐藏多指标背离反手候选策略可以离线回放:
autotrade replay-strategy --instance divergence-btc-5m `
--database .autotrade/research.db --cooldown-bars 0无重绘 Pivot、目标仓位状态机、两阶段反手和当前负收益基线见 5 分钟多指标背离反手策略。该策略已完成工程实现, 但尚无主网盈利资格。
lifecycle-pulse-testnet-v1 每根新收盘 K 线都产生信号,仅用于快速验证
Shadow → 信号门禁 → Testnet 下单 → 保护单 → 平仓/对账的工程链路,不用于评估盈利能力,
且执行适配器会在主网环境明确拒绝它。
autotrade daemon --symbols BTCUSDT --interval 1mdaemon 持有交易写锁,负责用户数据流重连、REST 对账、保护单管理、人工命令处理和收盘 K 线存储。watch 仅用于只读诊断,不负责自动修复。
先预览,止损和止盈必须位于当前标记价的正确一侧:
autotrade preview --symbol BTCUSDT --side BUY --risk-usdt 1 --stop-price 63000 --take-profit 65000 --leverage 3提交同样的不可变入场意图:
autotrade bracket --symbol BTCUSDT --side BUY --risk-usdt 1 --stop-price 63000 --take-profit 65000 --leverage 3 --executedaemon 运行时返回 mode: queued,由 daemon 执行。使用以下命令查看结果:
autotrade commands --limit 10所有账户变更默认只预览,只有添加 --execute 才会执行:
autotrade close-position --symbol BTCUSDT
autotrade close-position --symbol BTCUSDT --quantity 0.001 --execute
autotrade replace-stop --symbol BTCUSDT --trigger-price 62500 --execute
autotrade replace-take-profit --symbol BTCUSDT --trigger-price 65500 --execute
autotrade protect-position --symbol BTCUSDT --stop-price 62500 --take-profit 65500 --execute
autotrade cancel-all --symbol BTCUSDT --executecancel-all 不会平仓;close-position 使用 reduceOnly,然后清理或调整保护单。
autotrade pause-entry --reason "计划维护"
autotrade resume-entry --reason "账户与交易所状态已审核"只撤单的紧急停止:
autotrade kill-switch --symbols BTCUSDT --reason "人工紧急停止" --execute暂停开仓并平掉持仓:
autotrade kill-switch --symbols BTCUSDT --close-positions --reason "人工紧急停止" --executekill-switch 会先持久化暂停开仓,再处理账户敞口。
daemon 会自动对账。停止 daemon 后,也可以手动预览或执行一次完整 REST 对账:
autotrade reconcile --symbols BTCUSDT
autotrade reconcile --symbols BTCUSDT --execute当发现无法安全恢复止损时,系统会根据 AUTOTRADE_UNPROTECTED_ACTION 选择暂停开仓或平仓。
$env:PYTHONPATH='src'
python -m unittest discover -s tests -v当前实现适合扩展 Testnet 故障测试和主网 Shadow 数据采集,不应直接用于无人值守主网交易。外部告警、服务管理器自动重启、地区和法律检查、API Key IP 白名单以及连续 72 小时 Testnet 监督运行仍属于部署验收工作。
在项目虚拟环境中执行完整测试和编译检查:
.venv\Scripts\python.exe -m unittest discover -s tests -v
.venv\Scripts\python.exe -m compileall -q src tests用户流断线夹具的单独运行方式:
.venv\Scripts\python.exe -m unittest tests.test_daemon.DaemonReconciliationTests.test_user_stream_fixture_reconciles_before_reconnect外部监控使用 scripts\watchdog.ps1。将 webhook 写入本机 .env 后,在管理员 PowerShell 执行
.\scripts\register-watchdog.ps1 注册开机任务。Watchdog 只报警,不会自动下单或平仓。
不要直接使用未安装本项目的系统 Python;否则会出现
ModuleNotFoundError: autotrade,这不代表交易逻辑测试失败。