rulebooks · 三套内置策略
binance-trading-bot 策略怎么选:三套 rulebook 的进场、离场与参数
它把策略叫作 rulebook(规则书):一个 Profile 只能选一套,规则决定了这一步买、卖还是不动。三套分别是 trailing-trade、momentum、rebalance——它们的差别不是谁更赚钱,而是各自假设哪种行情会持续。本页按官方文档把每套的进场条件、离场条件、关键参数默认值与执行模式一次讲清,参数名与默认值都以官方文档为准。
三套 rulebook 总对照:进场、离场与它假设的行情
依据官方 strategies 文档(2026-09-17 核验)。表中把每套策略的两种常见配置形态分开列出,因为同一套策略在不同配置下行为差别很大——例如 Trailing Trade 官方就给了一个把它从均值回归改成趋势跟随的连贯配置。
| 策略与配置形态 | 它做什么 | 进场逻辑 | 离场逻辑 | 适合的行情 | 不适合 |
|---|---|---|---|---|---|
| Trailing Trade(区间默认形态) | 打包好的均值回归策略:追跌分批买入,再把卖出跟随高点往上抬 | 价格下跌时按 buy.gridLevels 分步买进,越跌买越多以摊低均价 | 涨到 sell.triggerPercentage 后开始跟踪高点,回撤到 high × sell.trailingStopPercentage 卖出;下方还有硬性 sell.stopLossPercentage | 价格在一个区间里上下摆动 | 单边持续趋势——它靠反复波动获利,不靠一段大趋势 |
| Trailing Trade(趋势跟随形态) | 官方给出的一组连贯配置,把同一套引擎改成趋势跟随者 | 只做一次进场、不用网格;用 ATR 跟踪止损从进场即生效(sell.atrTrailing.fromEntry) | 用 ATR 跟踪止损离场,固定百分比跟踪关闭(trailingStopPercentage '0'),并关掉技术指标强制卖出,避免把赢单刮掉 | 想让机器人顺着趋势持有、不被小回撤甩下车 | 震荡市:ATR 止损较宽时会忍受较大回撤 |
| Momentum(默认形态) | 赌「已经在涨的币会继续涨」 | 等待确认的向上突破——快线 EMA 上穿慢线 EMA,可要求最小幅度 entryMarginPct | 只有一个默认离场:从进场后的最高点回撤 trailingStopPct(默认 0.05)就卖;也可等快线下穿慢线 | 某个币已经启动、你预期它继续涨 | 横盘行情:只做强势突破,可能长时间空仓等待,也可能被反复假突破甩打 |
| Momentum(加装保护与利润回撤) | 在默认形态上按官方开关加两层保护 | 进场逻辑不变(EMA 突破 + 可选趋势过滤 trendFilter、过热过滤 entryExtension) | 可加 protectiveStop(挂到交易所、机器人离线也在)与 profitTrail(盈利达到 activationPct 后用更紧的回撤跟踪) | 希望离场保护在进程重启后依然存在 | 加了交易所侧保护止损后,成交价可能比止损触发价更差(限价在触发价之下) |
| Rebalance(固定权重 fixed) | 不做择时,只把一个篮子维持在目标占比上 | 用现金按 targets[].weight 的目标占比买入,直到部署满 basketBudgetQuote;权重合计 ≤1,剩余留现金 | 某币占比偏离目标超过 driftThreshold(默认 0.05,即 5 个百分点)就卖出多的、买入少的 | 想持有一个稳定配比,而不是挑进场点位 | 指望它抓点位:它不做市场择时,只纠正权重漂移 |
| Rebalance(动量权重 momentum) | 把篮子变成候选池,用横截面动量轮动 | 按 momentum.lookbackCandles 算各币近期收益并排名,持有前 topK 名、等权 | 跌出前 K 名的币目标权重归零,整仓轮出(rotate-exit);数据缺口时该币保持不动、不卖 | 想跟住近期最强的那几只,而不是固定配比 | 快速轮动的震荡市:换手频繁、费用消耗更快 |
策略是在哪里选的:新建 Profile 向导第二步
官方文档说明:策略在创建 Profile 的第二步选定,一个 Profile 只能跑一套策略。之后可以在 Profile 的 Strategy 区修改参数;表单由所选策略自己的 schema 渲染,所以只会出现该策略适用的字段。
Trailing Trade:追跌分批买,跟随高点卖
它的核心约定是乘数写法:所有百分比旋钮存的都是「相对某个参考价的乘数」,小于 1 表示低于该价,大于 1 表示高于该价。理解这一点就理解了它大半的配置。
第一次买入(首买)
通过进场门禁后按
buy.entrySizing买第一笔。若配置了网格,这一笔就是网格的第一档。示例配置里首买用固定金额:{ mode: fixed, amount: '15' },即首买花 15 个计价单位。工具侧还会拒绝「买完之后小到无法按止损价卖出」的订单,原因码是entry-below-stop-notional。跌了继续买(网格摊低均价)
buy.gridLevels每一档给出「触发用的价格乘数」和「这一档花多少」:{ triggerPercentage: '1', maxPurchaseAmount: '15' }、{ triggerPercentage: '0.97', maxPurchaseAmount: '30' }。价格再跌 3% 就再买一笔,均价被摊低——所以官方反复强调要主动设好maxSymbolExposureQuote、maxPositionLossQuote、accountCap这些上限。涨到触发线,卖出开始跟涨
持仓涨到
sell.triggerPercentage × 均价(示例'1.05',即 +5%)后,跟踪卖出启用:它记录买入后的最高价,价格回撤到high × sell.trailingStopPercentage(示例'0.98',即回撤 2%)就卖出,比固定止盈能多拿一段涨幅。先跌的话:硬止损与冷却
价格先跌破
sell.stopLossPercentage × 均价(示例'0.97',即 −3%)就按止损卖出;同一 tick 若两条都想触发,硬止损优先。卖出后buy.lossCooldownMinutes(默认 60 分钟)会压住再进场,避免立刻买回同一个下跌。
官方文档给出的可复制起步配置(单币区间交易):candleInterval: 1h、entrySizing fixed 15、lossCooldownMinutes 60、maxSymbolExposureQuote 60、两档网格(1 → 15、0.97 → 30)、stopLossPercentage 0.97、triggerPercentage 1.05、trailingStopPercentage 0.98、protectiveStop.enabled true、forceSellMinProfitPercent 0.3、并把你真实的 fees.takerBps / fees.makerBps 填进去。
| 参数 | 作用 | 默认值 / 示例 | 什么时候改 | 会看到什么 |
|---|---|---|---|---|
buy.entrySizing | 首买(或网格第一档)花多少:固定金额或按账户比例 | 新建 Profile 向导播种为 fixed 15 | 想每笔金额一致便于比较时用 fixed;想让仓位随账户涨缩时改用比例 | 金额低于交易所最小下单额时订单直接被拒,表现为「它从来不买」 |
buy.gridLevels[] | 网格每一档:触发用的价格乘数 + 该档买入金额 | 示例两档 1→15、0.97→30 | 希望在下跌中分步建仓、摊低均价时使用 | 档位越多、下跌中投入越多;不设网格就是单次首买 |
buy.candleLimit | 首买判定要参考多少根 K 线 | 默认 60;上限已由 1000 收紧为 999 | 用不到就别动——超过新上限的旧配置会走不进解析路径 | 数值超限不会自己改回,但会让保存、孤儿单归属证明等解析路径静默降级(详见排错页) |
buy.lossCooldownMinutes / buy.maxSymbolExposureQuote | 亏损后多久不许再买 / 这个币最多占用多少计价资金 | 示例 60 分钟 / 60 | 只要用了网格摊低均价,就应显式设上限 | 上限是硬天花板:达到后不再加仓,不管价格继续跌多少 |
sell.stopLossPercentage | 硬止损位,按均价乘数写(示例 0.97 = −3%) | 向导播种 '0.97' | 亏损容忍度变了就改,通常先于实盘设定 | 与跟踪卖出同 tick 冲突时,硬止损赢 |
sell.triggerPercentage / sell.trailingStopPercentage | 涨到多少开始跟踪 / 从高点回撤多少卖出 | 向导播种 '1.05' / '0.98' | 回撤参数太紧会被正常波动甩出,太松会把一段涨势还回去 | 跟踪止损启用后不断上移;触发前价格回落不卖 |
sell.breakEven | 夹在硬止损与利润跟踪之间的一层保本机制:收盘价确认到 armAtPercentage × 进场价(默认 '1.01')后武装,之后回落到 floorPercentage × 进场价(默认 '1')就市价卖出 | 默认关闭;官方给出的两个默认值是 '1.01' 与 '1' | 出现「冲一下然后一路跌回止损」的情况时开 | 只在利润跟踪尚未启用前起作用;跟踪启用后由跟踪接管 |
sell.timeStopBars | 进场后走了多少根收盘 K 线还没起色就市价卖出 | 默认关闭(0) | 不想要长期僵住的仓位时开 | 只对非发现类仓位生效,且只在利润跟踪未启用前;达到触发线的仓位交给跟踪处理 |
sell.protectiveStop.* | 把止损挂到币安上(enabled)、限价相对触发价的偏移(limitOffsetPercentage,模式 priced 时示例为 0.995)、被拒时怎么办(onBandBlock) | 默认关闭;onBandBlock 默认 notify,可选 clamp / native-trail | 希望机器人离线时仓位仍有保护就开 | 币安不接受过深的挂单时会拒单(-1013);clamp 会把止损抬到币安愿意接受的最深位置,但那个位置锚定当前市价、会随价回落,不是更紧的跟踪离场 |
fees.takerBps / fees.makerBps | 你真实的手续费(基点),影响「赚不到手续费就绝不卖出」这个地板 | 示例 '10' / '10'(对应 VIP0 的 0.1%) | 开通了费率优惠或换了档位就改 | 填错会让回测与真实成交的费用模型不一致 |
Momentum:等突破进场,用跟踪离场
它赌的是「已经在涨的会继续涨」,所以只在确认的突破处进场,并且默认不设固定止盈——离场靠跟踪,让趋势自己跑完。
等快线 EMA 上穿慢线 EMA
进场信号是快线 EMA 高于慢线 EMA。可以要求最小超出幅度
entryMarginPct(例如1表示要求 1% 的领先幅度,0表示裸交叉即进场)。要求幅度会让进场更少、更晚,但能过滤掉马上反向的假突破。可选的两道进场过滤
trendFilter(默认关闭)要求价格在长期均线之上(默认period 200、maType sma),还可以要求均线本身在上升(requireRising);entryExtension(默认关闭)则反过来,价格高出基线均线超过maxPercent(默认0.4)时跳过进场,避免追在垂直拉升的顶部。两者都只影响进场,不影响离场。按仓位规则买入
买入金额由
entrySizing.mode决定:fixed只读amount,percentOfAccount只读percent——官方特别提示「填错字段是它从不买入的常见原因」。还可以用accountCap限制同时持仓占账户的比例。用跟踪止损离场
默认只配了一个离场条件
trailingStopPct(默认0.05):从进场后的最高点回撤 5% 就卖。想更抗波动可用atrTrailingStop按该币自身 ATR 缩放回撤距离(它与固定百分比跟踪互斥,且波动放大时允许往下移、不是单向棘轮)。可选的两层保护
protectiveStop(默认关闭)把止损挂到币安,机器人离线仍在;profitTrail(默认关闭)在盈利达到activationPct(默认0.05)后启用一条更快的跟踪(trailPct默认0.03,按ratchetMinutes默认 5 分钟上移),用官方原话说是「把已经到手的涨幅锁住的那道闸」。
| 参数 | 作用 | 默认值 | 什么时候改 | 会看到什么 |
|---|---|---|---|---|
candleInterval | 计算 EMA 交叉所用的 K 线周期 | 1h(可选 1m/5m/15m/30m/1h/4h/1d) | 错过很快结束的行情就缩短;在噪声上乱进场就拉长 | 其余按「多少根 K 线」计的参数都跟着这个周期换算:1h 上的 200 周期趋势过滤≈200 小时,1d 上≈200 天 |
trailingStopPct | 从进场后最高点回撤多少就卖出 | 0.05 | 总被甩出但之后还在涨 → 放宽;赢单总把涨幅还回去 → 收紧 | 这是默认配置里的离场条件;太紧正常波动就结束交易,太宽一次往返可能白跑 |
entryMarginPct | 快线必须领先慢线多少才确认进场 | 官方文档该行默认值为空(可留空即裸交叉) | 快慢线来回交叉被反复甩打时,设一个正的幅度 | 进场更少更晚,交出行情最早的一段,换来跳过立刻反向的交叉 |
entrySizing.mode / .amount / .percent | 每笔买入的规模:固定金额或按账户权益百分比 | mode fixed,amount/percent 默认空 | 学习阶段用 fixed 便于横向比较;想让仓位随权益涨缩再用百分比 | 两个字段互斥:填错那个不是模式在读的字段,订单永远不会下出去 |
accountCap.mode / .percent | 同时持仓占账户权益的上限 | off | 一个 Profile 跑超过一两个币时就打开,避免多点信号同时吃掉全部额度 | 达到比例后只拦新进场,已有仓位与其离场不受影响 |
ema.fast / ema.slow | 快慢 EMA 的周期(按 K 线根数) | 两项均为必填;ema.slow 范围 2–998 | 两者成对设置,间距越大交叉越少、把握度越高 | 快线必须短于慢线,否则配置直接被拒;慢线上限 998,超限的旧配置会让解析路径降级 |
atrTrailingStop.enabled / .period / .multiple | 用币自身波动率(ATR)缩放跟踪距离,替代固定百分比 | false / 14 / 3 | 同一个固定百分比不适合同一个 Profile 里的所有币时打开 | 回撤许可随波动率变化;波动放大时允许止损往下移,给剧烈行情留空间 |
riskSizing.enabled / .riskPct | 按「这笔止损会亏多少」反推仓位,而不是按固定金额 | false / 0.01 | 发现同样金额买到的跳币和稳币,一次止损代价差很多时打开 | 波动大的币仓位更小、涨起来也赚得少;它绝不会买得比 entrySizing 允许的更多。设得太低会让很多进场低于交易所最小下单额而被跳过 |
protectiveStop.mode / .limitOffsetPercentage / .onBandBlock | 交易所侧保护止损:谁移动止损、限价相对触发价的偏移、被币安拒绝时怎么办 | priced / 0.98 / notify(可选 clamp、native-trail) | 希望保护在进程重启后依然存在时开启 | native-trail 由币安逐笔上抬触发价,但触发后按市价成交、且距离从币安看到的最高价算起;clamp 在典型币种上大约落在市价下方 7% 左右(文档另一处按 0.995 偏移描述为约 8.6%),且会随价回落而非触发 |
trendFilter.* / entryExtension.* | 长期趋势过滤 / 过热过滤(都只作用于进场) | 均关闭;period 200 / 50,maType sma,maxPercent 0.4 | 回测显示亏损主要来自逆势进场或追高进场时分别打开 | 开启后交易变少:趋势过滤会让你错过复苏初期;过热过滤在强势单边里可能让你长时间空仓 |
onBandBlock 的诚实说明:币安会拒绝价格离市价过远的挂单(-1013)。官方给了三条出路:notify 什么都不挂、只告警;clamp 把止损抬到币安愿意接受的最深位置(锚定市价,会随价回落,因此不是更紧的跟踪离场);native-trail 交给币安原生跟踪止损(触发后市价成交)。官方原话是:这三种选择各自都有代价,没有一种能让深度止损免费通过价格带。Rebalance:不判断方向,只把篮子维持在目标占比
它是一套跨币种策略:每个币的 tick 都需要知道整个篮子的价值,因此每个 tick 会把自己的市值发布到 Profile 级键值存储里,再读回兄弟币的数字拼出篮子总值。所有订单都是市价单,它从不往盘口挂单。
先决定目标权重从哪来
weightMode: fixed(默认)时,目标就是你写的targets[].weight;weightMode: momentum时你写的权重被忽略,targets变成候选池,按近期收益排名后只等权持有前topK名。用现金把篮子买到位
按目标占比用可用现金买入,直到部署满
basketBudgetQuote。权重合计 至多 1,没有配到的部分就是留作现金——官方明确说没有「现金目标」这个字段,现金就是没被分配的那部分。偏离超过阈值才动手
某币实际占比偏离目标超过
driftThreshold(默认0.05)才触发纠正。默认值下,60% 的目标在 55%–65% 之间都不动;把阈值减半大致会让再平衡频率翻倍。太小的纠正直接跳过
小于
minTradeQuote(默认10)的纠正被跳过,避免手续费和灰尘把篮子搅动起来。但该值必须≥你所交易对的最小下单额,否则订单会被交易所直接拒绝。动量模式下的两处保护
历史不足或数据有缺口的币会得到
null分数并保持不动(绝不在缺口上卖出);并且在足够多的币发布分数之前(收敛门),任何币都不会开始部署,避免最先热起来的那个币吃掉整个预算。
| 参数 | 作用 | 默认值 | 什么时候改 | 会看到什么 |
|---|---|---|---|---|
enabled | 总开关。默认关闭,官方要求先用目标篮子回测再打开 | false | 回测过你要持有的篮子之后才打开 | 关闭时这个 Profile 什么都不做:不买、不卖、不纠偏;打开后每个 tick 比较持仓与目标并交易差额 |
weightMode | 目标权重从哪来:你写的固定权重,还是按近期收益排名后的等权前 K 名 | fixed(可选 momentum) | 已经知道想要 60/40 这种配比就用 fixed;想让篮子跟着近期最强走就用 momentum | momentum 模式下你写的权重被忽略:目标清单只是候选池,篮子成分会随时间变化 |
candleInterval | 策略评估所用的 K 线周期 | 1h(可选 5m/15m/30m/1h/4h/1d) | 想让它多久检查一次漂移就怎么选;1h 或 4h 适合慢篮子,1d 接近「按月再平衡」 | 周期越短,篮子跟目标跟得越紧,但交易更多、手续费更高;周期越长,漂移被允许走得越远 |
driftThreshold | 某币占比偏离目标多少才触发再平衡。5 表示偏离 5 个百分点就动手 | 0.05 | 小波动把篮子搅得起费用时调大;想贴紧目标时调小 | 没超过阈值就完全不交易:默认值下 60% 的目标在 55%–65% 之间不动。阈值减半大致让再平衡频率翻倍 |
minTradeQuote | 小于该计价金额的纠正直接跳过(防费用与灰尘) | 10 | 看到大量很小的纠正单时调大 | 必须≥交易所对你的交易对的最小下单额,否则这些单会被直接拒;调得过高,篮子就永远不纠偏 |
basketBudgetQuote | 这个篮子一共投入多少计价货币。策略先用可用现金买到这个总额,之后只维持权重 | 0 | 想从现金建仓就设成你要投入的金额 | 0 表示只维持已有持仓、永远不花现金——官方点名这是「新篮子看起来什么都不做」的常见原因 |
momentum.lookbackCandles | 算各币近期收益时回看多少根 K 线 | 30(范围 2–500) | 只在 momentum 模式下有意义;想追近期强势就缩短 | 短回看会让篮子频繁轮动、在震荡市里来回挨打;1h 上的 30 根≈30 小时的区间收益。官方另有一处硬约束:保持在 199 及以下——超过 199 时窗口不够,所有币都算不出分数,篮子会静默地永不部署 |
momentum.topK | 等权持有排名前几名的币,其余轮出到现金 | 3(范围 1–50) | 只在 momentum 模式下有意义;想更分散就调大,想更集中就调小 | K 小则风险集中、轮动更剧烈;K 大则接近「把手里的清单整个持有」 |
targets[].symbol / .weight | 篮子成员:交易对与目标占比 | 两项均为必填 | fixed 模式下每次都要填;momentum 模式下权重被忽略 | symbol 必须同时出现在该 Profile 的币种列表里,否则它会被静默地永不交易,看起来像「篮子漏掉了某个目标」;权重合计至多 1,少于 1 就是有意留现金 |
官方给出的起步配置是三币固定权重篮子:weightMode: fixed、candleInterval: 4h、basketBudgetQuote: '1000'、driftThreshold: '0.05'、minTradeQuote: '10'、targets 为 BTCUSDT 0.5 / ETHUSDT 0.3 / SOLUSDT 0.2。想让三者变成「轮动池」而不是固定配比,就把 weightMode 改成 momentum 并设 momentum.topK: 2。
执行模式:market 与 maker 的真实差别
这是最容易被误读的一块。执行模式只影响策略的买入,而且官方专门用一整段警告来纠正一个常见误解:maker 模式并不会让手续费更便宜。
| 模式 | 买点怎么定 | 你得到 | 你承担 | 什么时候改 |
|---|---|---|---|---|
market(默认) | 按市场当前要价立刻买入 | 确定的成交,就在当下 | 付点差;订单足够大要吃掉多档价格时还要付滑点 | 默认即可;这也是与「确定成交」做交换的选项 |
maker | 在现价或其下方挂一张限价买单,留在盘口等 | 省下点差、不付滑点 | 这笔买入可能永远不会发生:价格直接涨走就完全错过进场 | 只有当你对 maker 配置做过回测、并且结果显示对你的币确实更好时才切换 |
makerOffsetBps(maker 偏移,基点) | 挂在现价下方多少个基点 | 偏移越大,买得越便宜 | 偏移越大,成交越少 | 想在盘口真挂住而不是立刻成交时,用一个小的正偏移 |
entryTimeoutBars(进场超时,根) | 挂单在这根数内未成交就撤销,下一个 tick 重新定价 | 避免买单被留在一个市场已经走远的价格上 | 超时设 0 时,那张单会一直挂着而不重新定价 | 不想让买单「僵在旧价格」时设置;在 market 模式下它不起作用 |
| 零偏移的实际行为 | 限价恰好等于现价 | 看起来像「挂单」 | 仍可能与盘口已有的卖单立刻成交,也就是变成了吃单 | 真想挂在盘口上,就设一个小的正偏移 |
| 深度偏移的回退行为 | 算出来的价格低于该币最小价格或最小变动价位 | — | 订单会改为市价买入:你在没有主动要求的情况下也可能变成吃单 | 低价币配大偏移时要特别留意这一点 |
| 卖出与突破买单 | 不适用 maker 模式 | — | — | 所有离场(跟踪止损、止损、技术指标强制卖出、行情状态退出)与突破网格档位始终市价:离场要的是出得去,挂在市价之上的耐心卖单在下跌中根本不会成交 |
| 与回测放行的关系 | 改执行参数会改变 Profile 的配置指纹 | — | market 模式的回测不能授权一个 maker 模式的 Profile | 切换模式后必须重新跑一次回测,才能过实盘放行门禁 |
叠加在策略之上的两件事:技术指标门禁与扩展契约
策略的规则之上还有一层可选的技术指标门禁(Technicals),它既能拦住买入,也能强制卖出;而策略本身是一个扩展,新增一套策略不需要改 api 或 worker。
技术指标门禁(Technicals)
官方把它描述成一个评级流程:先取 K 线,让每个指标各投一票,再把票平均成三个数字,最后按档位给出推荐读数。这个读数可以用于两件事:① 买入门禁——在一个或多个周期上读数为看跌时,直接否掉这次买入;② 强制卖出——对持仓在读到看跌时直接卖出,并可配置确认窗口(连续确认才动作)与再入冷却(强制卖出后多久不许再进)。门禁的基础字段由共享契约拥有,所以所有使用它的策略行为一致。
| 环节 | 做什么 | 边界与注意点 | 你可以怎么用 |
|---|---|---|---|
| 评级计算 | 取 K 线 → 各指标投票 → 平均成三个数字 → 分档成推荐 | 它是基于历史 K 线的读数,不预测方向 | 判断「现在这个读数是否允许我买」 |
| 重算时机 | 按配置的周期重算,结果供门禁读取 | 读数有更新节奏,不是逐笔实时 | 门禁生效前要给它足够的历史 K 线 |
| 买入门禁 | 读数为看跌时否掉买入 | 只会减少进场,不会增加 | 在震荡策略里防止逆着明显走势一直加仓 |
| 强制卖出 | 持仓读到看跌时直接卖出,可配确认窗口与再入冷却 | 官方在趋势跟随配置里建议把它关掉,避免把还能继续跑的赢单刮掉 | 只在确实想「看跌就撤」时启用 |
| 可观测性 | 进场被谁拦住、为什么拦住会被记录 | — | 排查「为什么不买」时先看这一层,再看策略本身 |
策略扩展契约
| 契约项 | 官方怎么说 | 为什么这对你重要 | 依据 |
|---|---|---|---|
| 新增一套策略 | 是「新增一个 package + 加一条注册条目」,不需要修改 api 或 worker | 说明三套内置策略不是硬编码的分支,扩展点是有意留出来的 | 官方 extensibility 文档、README「Strategy-pluggable」 |
| tick 必须是纯函数 | 只用 Decimal 做数学、不做 I/O,也不自带时钟或随机数(由 worker 注入) | 这是它可被回测与「同 tick 重放」验证的前提 | 官方策略文档的 Internals 段落 |
| 策略只做决定 | 策略产出决定,执行器把决定变成订单并保证不重复下单(崩溃跨越也一样) | 解释了为什么「重启会续跑、不会重复下单」 | README「Reliability-first」、官方可靠性文档 |
| 状态范围 | 状态按 (profile, symbol) 保存;需要跨币协调的策略(如 Rebalance)通过 Profile 级键值存储声明自己的需求 | 是「哪个策略能互相看到对方」的边界所在 | 官方 Rebalance 文档的 Internals 与 State 段落 |
| 回放一致性 | Trailing Trade 有提交在仓库里的合成 fixture 重放测试,断言与当前 tick 的差异为 0 | 行为改动会被测试抓住,不会静默漂移 | 官方 Trailing Trade 文档的 Internals 段落 |
关于 binance-trading-bot 策略的常见问题
新手第一次应该选哪套策略?
先按你对行情的判断来选,而不是按「哪套更赚钱」——三套的差别是各自假设的行情不同:预计来回震荡用 Trailing Trade,已经在涨且会继续涨用 Momentum,不判断方向只要一个稳定配比用 Rebalance。无论选哪套,官方都要求先用同一份配置跑通过回测再启用实盘,且官方明确该项目不建议投入真实资金。具体默认值与字段以官方文档为准。
它支持网格交易吗?网格是不是第四套策略?
支持,但网格不是独立的第四套策略。网格是 Trailing Trade 内部的分批建仓方式:buy.gridLevels 的每一档给出触发乘数与买入金额,价格越跌买得越多以摊低均价。使用网格时官方特别提醒要主动设置 maxSymbolExposureQuote、maxPositionLossQuote、accountCap 这类上限。以官方 strategies 文档为准。
为什么我把 Rebalance 配好了却什么都不做?
最常见的原因就是 basketBudgetQuote 保持默认的 0:官方明确写「0 表示只维持已有篮子、永远不花现金」,所以一个新建的空篮子看起来毫无动作。要从现金建仓,就把它设成你准备投入的金额。第二个常见坑是 momentum 模式下把 lookbackCandles 设到 199 以上——窗口不够时所有币都算不出分数,篮子会静默地永不部署。以官方 Rebalance 文档与配置参考为准。
maker 模式是不是更省钱?值得开吗?
不一定,而且不要指望它降手续费:官方明确说在币安现货 VIP0 档位下 maker 与 taker 费率相同(VIP1 起才分开,约需 30 天 100 万 USDT 成交量)。maker 模式真正换来的是「不穿越点差、不付滑点」,代价是可能完全错过进场。官方建议只有在针对你的币做过 maker 配置的回测、并且结果确实更好时才切换;零偏移仍可能立刻吃单,深度偏移低于最小价格时还会回退成市价买。费率以币安当前现货费率页为准。
能不能在同一个账户里同时跑几套不同策略?
可以。策略是按 Profile 选的,而一个币安账户可以跑多个互相独立的 Profile,各自有自己的币种、预算与策略——所以在账户层面并行跑几套策略是这套系统的设计用法。要注意两点:这些 Profile 共享同一个账户钱包,预算必须按账户整体来规划;中途更换某个 Profile 的策略会把配置重置为新策略的默认值(官方明确两种策略的旋钮之间没有自动换算),换完必须重新回测。以官方 configure 文档与官方 README 为准。
我只想研究策略、不想真下单,有别的办法吗?
有,但那是另一条任务路线。EasyClaw 本机技能里包含策略回测与风险指标、加密货币行情数据与出图这类研究类能力,不需要服务器、不需要币安账户,也不会替你下单。需要说清楚的是:EasyClaw 没有下单类技能,binance-trading-bot 与 EasyClaw 之间无已证实集成,两条路线解决的是不同任务;研究结论仅供研究,不构成投资建议。各技能的具体边界与前置条件见对比页。