
价格刚越过区间边界Agent 就移除流动性、换币、重新建仓。下一次价格回摆它再做一遍。这样的机器人看起来很忙却可能只是把手续费收入不断交给交易摩擦。集中流动性提高了资金使用的针对性并没有替 LP 消除价格风险和调仓成本。Uniswap 官方文档说明头寸只在指定价格区间内提供活跃流动性价格离开区间后该头寸不再赚取交易手续费。这里讨论的是 v3 的决策模型不把 v2 路由的函数名混入一份所谓可直接执行的 v3 示例。集中流动性说明出界是观察信号不是执行指令调仓至少需要两种判断。第一种是仓位状态价格是否出界、库存集中在哪种资产、是否违反资金敞口上限。第二种是经济比较继续等待、扩大区间或重建头寸哪一个方案在给定预测窗口下更合适。预期收益本来就不确定不能因为模型输出一个金额就把它记成未来现金流。成本账应覆盖移除与铸造操作、换币手续费、滑点、Gas以及可能发生的执行失败。若采用私有交易通道也要把未入块和重报价纳入状态。Flashbots 的默认设置存在重试后丢弃的情况私有发送不能写成“确保区块顶部成交”。设置说明用十进制定点数做一个提案门槛下面的金额都是同一记账币种下的教学数值benefit是外部情景输入不是程序预测的收入。示例只决定是否提出调仓申请真实池的 tick、流动性、token decimals 和头寸资产量需要另外计算。from decimal import Decimal as D def decide(price, lower, upper, benefit, fees, slippage, gas): if not D(0) lower upper or price 0: raise ValueError(invalid price interval) if min(benefit, fees, slippage, gas) 0: raise ValueError(negative cost or benefit) state IN_RANGE if lower price upper else OUT_OF_RANGE margin benefit - fees - slippage - gas return state, PROPOSE if margin 0 else WAIT, margin assert decide(D(105), D(90), D(110), D(8), D(2), D(1), D(3)) (IN_RANGE, PROPOSE, D(2)) assert decide(D(111), D(90), D(110), D(5), D(2), D(1), D(3))[1] WAIT assert decide(D(110), D(90), D(110), D(6), D(2), D(1), D(3))[2] 0 print(3 cost scenarios checked; no pool or price feed connected)保存为rebalance.py运行python3 rebalance.py。它检查了区间内的正差额、出界但不值得调仓以及收益恰好覆盖成本时不执行的边界。通过这些断言不意味着策略盈利更不意味着把资金放进窄区间就是更好的选择。接入执行器时还要补什么提案应固定数据区块、池与头寸标识明确最低接收量和过期时间。授权额度、允许调用的合约以及资产接收地址应由独立策略校验。移除、换币和重建能否在一笔交易中安全完成取决于实际执行合约和路由不能在伪代码里靠一个rebalance()名称假定已经实现。本文未连接行情、回测、模型、钱包或链上协议没有实测收益、Gas 或延迟数据。Agent 的价值可以是减少漏看的条件也可以是形成一份可拒绝的提案没有必要把它写成在任何行情下都能捕获确定收益的机器。