交易系统架构对比分析报告

交易系统架构对比分析报告

对比项目:passivbot(1,860 stars / 625 forks)
分析日期:2026-02-08
版本:v7.8.1


一、参考项目概览

Passivbot 是一个成熟的多交易所永续合约自动交易系统,采用 Python(编排/IO)+ Rust(计算引擎) 混合架构。核心策略为逆势网格做市(Martingale 变种),不预测价格走势,通过网格加仓拉低均价 + 反弹获利平仓。支持 Hyperliquid、Binance、Bybit、OKX、Bitget、GateIO、Kucoin 等 7+ 交易所。

项目结构

src/
├── main.py                        # 入口(Python 版本检查 + Rust 编译检查)
├── passivbot.py                   # 核心 Bot 类(~2500 行)
├── candlestick_manager.py         # K线数据管理(磁盘分片/原子写入/gap处理)
├── fill_events_manager.py         # 成交事件管理(跨进程限流/gap置信度)
├── config_utils.py                # 配置加载/转换/覆盖白名单
├── config_transform.py            # 配置格式转换
├── backtest.py                    # 回测引擎(调用 Rust)
├── backtest_suite.py              # 多场景回测套件
├── optimize.py                    # DEAP 进化算法优化器
├── optimize_suite.py              # 多场景优化
├── pareto_core.py                 # 帕累托前沿分析
├── pareto_store.py                # 帕累托结果存储
├── downloader.py                  # 历史数据下载
├── pure_funcs.py                  # 纯函数工具(无副作用)
├── utils.py                       # 通用工具
├── rust_utils.py                  # Rust FFI 编译/加载/同步
├── logging_setup.py               # 4级日志(WARN/INFO/DEBUG/TRACE)
├── exchanges/
│   ├── ccxt_bot.py                # CCXT 基类(Hook 分类法)
│   ├── hyperliquid.py             # Hyperliquid 适配器(514 行)
│   ├── binance.py                 # Binance 适配器
│   ├── bybit.py                   # Bybit 适配器
│   ├── bitget.py                  # Bitget 适配器
│   ├── okx.py                     # OKX 适配器
│   ├── gateio.py                  # GateIO 适配器
│   ├── kucoin.py                  # Kucoin 适配器
│   ├── paradex.py                 # Paradex 适配器
│   └── defx.py                    # Defx 适配器
├── optimization/
│   ├── bounds.py                  # 参数边界定义
│   ├── config_adapter.py          # 优化器配置适配
│   └── deap_adapters.py           # DEAP 适配器
└── tools/
    ├── fill_events_dash.py        # 成交事件仪表盘
    ├── pareto_dash.py             # 帕累托可视化
    ├── iterative_backtester.py    # 迭代回测工具
    └── ...                        # 其他辅助工具

passivbot-rust/src/
├── orchestrator.rs                # 订单规划编排器(核心)
├── entries.rs                     # 入场订单计算
├── closes.rs                      # 出场订单计算
├── trailing.rs                    # 追踪订单逻辑
├── risk.rs                        # 风控引擎(TWEL/WEL/unstuck)
├── backtest.rs                    # Rust 回测引擎
├── coin_selection.rs              # Forager 动态选币
├── analysis.rs                    # 回测分析(50+ 指标)
├── types.rs                       # 核心数据类型
├── utils.rs                       # 数学工具函数
├── constants.rs                   # 常量定义
├── python.rs                      # PyO3 绑定层
└── lib.rs                         # 库入口

configs/
├── template.json                  # 完整配置模板(~350 行)
├── approved_coins.json            # 允许交易的币种列表
├── custom_endpoints.json.example  # 自定义 API 端点
└── examples/                      # 示例配置

tests/                             # 80+ 测试文件

核心数据流

JSON Config → config_utils.load_config() (validated)
    ↓
Passivbot.__init__()
    ↓
┌─────────────────────────────────────────────────┐
│       EXECUTION LOOP (30s cycle)                │
│                                                 │
│  update_pos_oos_pnls_ohlcvs()                   │
│       ↓ (交易所→本地状态同步)                      │
│  CandlestickManager.get_candles()               │
│       ↓ (K线数据 + EMA 计算)                      │
│  pbr.calc_orders_py()  [Rust Orchestrator]      │
│       ↓ (理想订单集)                              │
│  filter_orders()  (actual vs ideal diff)        │
│       ↓                                         │
│  execute_cancellations() → execute_creations()  │
│       ↓                                         │
│  health_summary() (每15分钟)                     │
└─────────────────────────────────────────────────┘

技术栈

层面 技术
编排层 Python 3.12+(asyncio)
计算引擎 Rust(PyO3/maturin 绑定)
交易所接口 CCXT + 各所原生 API
数据格式 NumPy(float32 HLCV dtype)+ JSON 配置
优化算法 DEAP(NSGA-II 进化算法)
测试 pytest(80+ 测试文件)
部署 Docker + Docker Compose
文档 MkDocs + ReadTheDocs

二、值得借鉴的 10 大设计模式

1. Unstuck 机制(被套仓位渐进解套)⭐⭐⭐⭐⭐

参考项目做法

// risk.rs — calc_unstucking_action()
// 当某个仓位的 wallet_exposure 超过 unstuck_threshold * WEL 时触发

fn calc_unstucking_action(position, balance, config) -> Option<CloseOrder> {
    // 1. 计算亏损容忍预算 = (当前余额 - 峰值余额 * (1 - loss_allowance_pct))
    // 2. 如果预算 > 0,在 EMA band 价格处生成小额止损单
    // 3. 优先处理离市场价最近的被套仓位(unstuck 成本最低)
    // 4. close_pct 控制每次解套比例,防止一次性大额止损
}

核心逻辑:

  • 峰值余额追踪:记录历史最高余额,亏损预算 = 当前余额 - 峰值 × (1 - loss_allowance_pct)
  • 优先级排序:多个被套仓位时,优先处理 |entry_price - market_price| 最小的(止损成本最低)
  • 渐进式:每次只平一小部分(close_pct),不一次性割肉
  • EMA 锚定:在 EMA band 处挂单而非市价止损,争取更好价格

当前项目现状

  • risk_manager.pymax_drawdown_pctdaily_loss_limit 检查
  • 触发后是粗暴的全量平仓(通过 CircuitBreaker 或 KillSwitch)
  • 没有"渐进式小额止损"的概念 — 要么持有要么全平

改进方向

  • 对配对交易特别有价值 — 当一腿被深度套牢时,可渐进减仓而非等待均值回归
  • 结合已有 daily_loss_limit 作为总预算,在预算内自动渐进止损
  • |entry_price - mark_price| / entry_price 排序决定哪个仓位优先解套

2. 双层敞口限制系统(WEL + TWEL)⭐⭐⭐⭐⭐

参考项目做法

// risk.rs — gate_entries_by_twel()
// WEL = Wallet Exposure Limit(单仓位敞口上限)
// TWEL = Total Wallet Exposure Limit(全账户总敞口上限)

fn gate_entries_by_twel(orders, positions, balance, twel_threshold) -> Vec<Order> {
    let current_total_exposure = sum(positions.map(|p| p.notional / balance));

    if current_total_exposure >= twel_threshold {
        // 移除所有新入场单
        return orders.filter(|o| !o.is_entry());
    }

    // 二分查找:在 TWEL 限额内,最大可填充数量
    let max_fillable = binary_search_max_qty(remaining_budget, price, qty_step);
    // 优先移除离市场价最远的入场单
    remove_furthest_from_market_first(orders, max_fillable);
}

TWEL Enforcer(自动减仓):

fn calc_twel_enforcer_actions(positions, balance, config) -> Vec<CloseOrder> {
    // 当 total_exposure > twel_enforcer_threshold 时自动减仓
    // 优先减 price_diff 最小的仓位(最不亏)
    // 每个仓位有 floor exposure 保护,不会减到 0
    // 级联逻辑:如果最优先仓位已到 floor,转向下一个
}

当前项目现状

  • risk_manager.pymax_position_notional(单仓位上限)和 max_open_positions(持仓数上限)
  • 没有"全账户总敞口"的概念 — 理论上可以同时持有多对配对交易,总敞口超出安全范围
  • 没有自动减仓机制,超限只能拒绝新单

改进方向

  • 引入 TWEL 概念,确保所有配对交易的总敞口不超过账户权益的 N%
  • 当总敞口超标时,TWEL Enforcer 自动减仓最不亏的仓位
  • 配对交易场景下 WEL 可用于控制单对仓位的最大敞口

3. 订单容差匹配(避免无效撤单/挂单)⭐⭐⭐⭐⭐

参考项目做法

# pure_funcs.py — filter_orders()
def filter_orders(actual_orders, ideal_orders, price_tol=0.001, qty_tol=0.01):
    """比较实际挂单 vs 理想挂单,只操作差异部分"""
    to_cancel = []
    to_create = []

    for actual in actual_orders:
        matched = find_matching_ideal(actual, ideal_orders, price_tol, qty_tol)
        if not matched:
            to_cancel.append(actual)

    for ideal in ideal_orders:
        matched = find_matching_actual(ideal, actual_orders, price_tol, qty_tol)
        if not matched:
            to_create.append(ideal)

    return to_cancel, to_create

# passivbot.py — orders_matching()
def orders_matching(order_a, order_b, price_tol=0.003, qty_tol=0.02):
    """两个订单在容差范围内视为相同"""
    if order_a["side"] != order_b["side"]:
        return False
    if abs(order_a["price"] - order_b["price"]) / order_a["price"] > price_tol:
        return False
    if abs(order_a["qty"] - order_b["qty"]) / max(order_a["qty"], order_b["qty"]) > qty_tol:
        return False
    return True

当前项目现状

  • executor.py 每次执行都是「取消全部 → 重新挂单」的模式
  • 即使价格/数量只变了 0.01%,也会触发撤单+重挂
  • 高频操作浪费 API 调用额度,增加被限流风险

改进方向

  • 实现 ideal_vs_actual 差异对比,只撤/挂有变化的单
  • 设置合理容差(如价格 ±0.3%,数量 ±2%)
  • 对 PURR 这样低流动性品种尤其重要 — 减少不必要的订单变动对薄盘口的冲击

4. TradingMode 状态机(5 种运行模式)⭐⭐⭐⭐

参考项目做法

// orchestrator.rs
enum TradingMode {
    Normal,         // 正常交易(入场 + 出场)
    TpOnly,         // 只允许止盈平仓,不新开仓
    GracefulStop,   // 优雅停止:不开新仓,有序平现有仓
    Panic,          // 紧急模式:市价全平
    Manual,         // 人工接管:bot 不操作
}

// 在 Orchestrator 中根据 mode 过滤订单
fn compute_orders(input: OrchestratorInput) -> Vec<IdealOrder> {
    match input.trading_mode {
        Normal => compute_entries_and_closes(input),
        TpOnly => compute_closes_only(input),
        GracefulStop => compute_graceful_close(input),
        Panic => compute_panic_close_all(input),
        Manual => vec![],  // 不生成任何订单
    }
}

当前项目现状

  • KillSwitch 只有 on/off 两态
  • 没有"只平仓不开仓"的中间态
  • 没有"优雅停止"的概念 — 触发 KillSwitch 就是立即全停

改进方向

  • 引入 TradingMode 枚举替代简单的 kill_switch 布尔值
  • TpOnly:日损限额接近阈值时自动切换,只等待现有仓位止盈
  • GracefulStop:维护/升级前手动触发,不开新仓但允许有序平仓
  • Panic:等同于当前 KillSwitch,保留作为最后手段
  • Manual:远程调试时暂停 bot,手动操作

5. 进化算法参数优化器 ⭐⭐⭐⭐

参考项目做法

# optimize.py — 使用 DEAP 框架(NSGA-II 多目标优化)
class ConstraintAwareFitness:
    """带约束的适应度评估"""
    # 约束条件:最大回撤 < 30%, 亏损/利润比 < 0.5, 恢复时间 < 72h
    # 评估指标:ADG(日均增长)、Sharpe、Sortino、Omega...

# 优化流程:
# 1. 定义参数搜索空间(bounds.py)
# 2. 随机初始化种群(250 个个体)
# 3. 迭代 500K 次:
#    a. 交叉 + 变异生成新个体
#    b. 回测评估(调用 Rust 引擎,毫秒级)
#    c. Pareto 非支配排序 + 拥挤度距离
#    d. 淘汰劣势个体
# 4. 输出 Pareto 前沿上的最优配置集
// configs/template.json — 优化参数示例
"optimize": {
    "population_size": 250,
    "iters": 500000,
    "mutation_probability": 0.2,
    "crossover_probability": 0.7,
    "scoring": ["mdg", "sharpe_ratio"],
    "limits": {
        "lower_bound_drawdown_worst": 0.30,
        "lower_bound_loss_profit_ratio": 0.50,
        "upper_bound_time_at_max_exposure": 0.50,
        "upper_bound_peak_recovery_hours": 72.0
    }
}

当前项目现状

  • 配对交易参数(Z-score 阈值、EMA 窗口、止损百分比等)全靠手动调参
  • 没有系统化的回测框架
  • 参数选择基于经验而非数据验证

改进方向

  • 构建配对交易回测引擎(利用 TimescaleDB 中的历史数据)
  • 可优化参数:Z-score 开仓/平仓阈值、EMA 窗口组合、止损/止盈比例、仓位大小
  • 评估指标:Sharpe ratio、最大回撤、胜率、盈亏比
  • 约束条件:回撤 < X%、单日亏损 < Y、恢复时间 < Z 小时
  • 不必用 Rust,Python + NumPy 回测对配对交易足够快

6. 原子文件操作 + 跨进程锁 ⭐⭐⭐⭐

参考项目做法

# candlestick_manager.py — 原子写入
def _atomic_write_bytes(path, data):
    """防止写入中断导致文件损坏"""
    tmp_path = path.with_suffix(".tmp")
    with open(tmp_path, "wb") as f:
        f.write(data)
        f.flush()
        os.fsync(f.fileno())  # 确保写入磁盘
    os.replace(tmp_path, path)  # 原子替换

# 跨进程缓存锁
import portalocker
class CacheFileLock:
    """可重入的分布式文件锁"""
    # 自动清理过期锁(防止进程崩溃遗留死锁)
    # 300 秒超时
    # 支持多 bot 实例共享 OHLCV 缓存

当前项目现状

  • 主要通过 TimescaleDB 持久化,不太涉及文件写入
  • .env 配置文件、日志文件等无原子写入保护
  • 单实例运行,不考虑多进程竞争

改进方向

  • 如果未来支持多策略实例共享数据,需要引入跨进程锁
  • 对于任何文件写入(配置热更新、状态快照等),使用原子写入模式
  • 当前优先级较低,但架构意识值得保留

7. Warmup 交错预热系统 ⭐⭐⭐⭐

参考项目做法

# passivbot.py — warmup_candles_staggered()
async def warmup_candles_staggered(self, symbols, concurrency=4):
    """交错式 K 线预热,防止 API 风暴"""
    semaphore = asyncio.Semaphore(concurrency)

    async def fetch_one(symbol):
        async with semaphore:
            jitter = random.uniform(0.1, 0.5)  # 随机抖动
            await asyncio.sleep(jitter)

            # 每个 symbol 计算需要的 warmup 窗口
            window = compute_warmup_window(symbol, ema_spans)
            await self.cm.fetch_candles(symbol, window)

    # 并发但受控地预热所有 symbol
    await asyncio.gather(*[fetch_one(s) for s in symbols])

当前项目现状

  • realtime_kline_service_base.py 启动时批量获取 K 线
  • 没有并发控制和抖动机制
  • 如果同时请求多个品种的多个周期,可能触发 API 限流

改进方向

  • asyncio.Semaphore 控制 K 线请求并发数
  • 添加随机抖动(jitter)防止请求聚集
  • 根据 EMA 窗口大小动态计算每个品种需要的预热数据量

8. 定期健康摘要 + 内存监控 ⭐⭐⭐⭐

参考项目做法

# passivbot.py — _maybe_log_health_summary()
def _maybe_log_health_summary(self):
    """每 15 分钟输出一次系统健康报告"""
    if time.time() - self._last_health_summary < 900:
        return

    summary = {
        "uptime": format_duration(time.time() - self._start_time),
        "orders_placed": self._health_orders_placed,
        "fills": self._health_fills,
        "errors": self._health_errors,
        "ws_reconnects": self._health_ws_reconnects,
        "rate_limit_hits": self._health_rate_limits,
        "positions": len(self.positions),
        "unrealized_pnl": sum(p.upnl for p in self.positions.values()),
    }

    # 内存快照
    import resource
    rss_mb = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024 / 1024
    summary["memory_rss_mb"] = round(rss_mb, 1)
    summary["cm_cache_entries"] = self.cm.cache_size()
    summary["async_tasks"] = len(asyncio.all_tasks())

    logging.info(f"[health] {json.dumps(summary)}")
    self._reset_health_counters()

当前项目现状

  • 通过飞书通知发送关键事件(开仓/平仓/止损)
  • 没有定期的系统级健康报告
  • 没有内存使用监控 — 长时间运行后内存泄漏难以发现

改进方向

  • 每 N 分钟生成健康摘要(运行时长、下单数、成交数、错误数、WS 重连数、内存使用)
  • 通过飞书定期推送(而非只在异常时通知)
  • 追踪 WS 管理器的连接健康状态
  • 设置内存使用告警阈值,及早发现泄漏

9. 交易所适配器 Hook 分类法 ⭐⭐⭐

参考项目做法

# exchanges/ccxt_bot.py — 基于 Hook 的多交易所适配
class CCXTBot:
    """通用 CCXT 基类,子类通过覆盖 Hook 适配不同交易所"""

    # can_* hooks — 能力查询
    def can_hedge_mode(self) -> bool: ...      # 是否支持双向持仓
    def can_watch_orders(self) -> bool: ...     # 是否支持 WS 订单推送

    # _do_* hooks — API 调用(子类覆盖实际接口差异)
    async def _do_fetch_balance(self) -> dict: ...
    async def _do_fetch_positions(self) -> list: ...
    async def _do_create_order(self, params) -> dict: ...

    # _get_* hooks — 数据提取(从原始响应中提取标准字段)
    def _get_position_size(self, raw) -> float: ...
    def _get_order_status(self, raw) -> str: ...

    # _normalize_* hooks — 数据转换(统一格式)
    def _normalize_position(self, raw) -> Position: ...
    def _normalize_order(self, raw) -> Order: ...

    # _build_* hooks — 配置构建
    def _build_ccxt_config(self) -> dict: ...
    def _build_order_params(self, order) -> dict: ...

# exchanges/hyperliquid.py — Hyperliquid 特化
class HyperliquidBot(CCXTBot):
    def can_hedge_mode(self) -> bool:
        return False  # Hyperliquid 只支持单向持仓

    def _do_create_order(self, params):
        # HIP-3 stock perps 特殊处理(TSLA, NVDA 等)
        if params["symbol"].startswith("xyz:"):
            # 特殊精度处理...

        # $10 minimum 错误自动恢复
        try:
            return await super()._do_create_order(params)
        except MinCostError:
            self.adjust_min_cost_on_error(params["symbol"])
            return await super()._do_create_order(params)

当前项目现状

  • HyperliquidExecutor 直接耦合 Hyperliquid SDK
  • 没有交易所抽象层
  • 如果未来需要接入 dYdX、GMX 等 DEX,需要大量重写

改进方向

  • Hook 分类法(can_* / _do_* / _get_* / _normalize_*)是比简单 ABC 接口更灵活的适配方案
  • 子类只需覆盖差异部分,公共逻辑留在基类
  • 可作为 P2 长期目标,当前单交易所无紧迫需求

10. 回测场景套件(Scenario-Based Backtesting)⭐⭐⭐

参考项目做法

// configs/template.json — 多场景回测
"backtest": {
    "start_date": "2021-05-01",
    "end_date": "now",
    "starting_balance": 10000.0,
    "scenarios": {
        "base": {},
        "trump_troupe": {
            "coins": ["DOGE", "PEPE", "SHIB", "FLOKI"],
            "overrides": {"bot": {"long": {"n_positions": 4}}}
        },
        "pure_trailing": {
            "overrides": {"bot": {"long": {"entry_grid_spacing_pct": 100.0}}}
        },
        "twel_stress": {
            "overrides": {"bot": {"long": {"total_wallet_exposure_limit": 0.5}}}
        }
    }
}

回测分析输出(50+ 指标):

// analysis.rs
struct Analysis {
    adg: f64,           // 日均增长率
    mdg: f64,           // 中位日增长
    sharpe: f64,        // 夏普比率
    sortino: f64,       // 索提诺比率
    omega: f64,         // 欧米茄比率
    calmar: f64,        // 卡尔玛比率
    sterling: f64,      // 斯特林比率
    drawdown_worst: f64, // 最大回撤
    drawdown_mean: f64,  // 平均回撤
    peak_recovery_hours: f64, // 峰值恢复时间
    n_fills: usize,     // 成交次数
    n_entries: usize,   // 入场次数
    n_closes: usize,    // 平仓次数
    time_at_max_exposure: f64, // 最大敞口时间占比
    loss_profit_ratio: f64,    // 亏损/利润比
    // ... 50+ 指标
}

当前项目现状

  • 没有系统化的回测框架
  • 参数调优依靠实盘观察 + 手动调整
  • 没有多场景压力测试(如极端行情、低波动期等)

改进方向

  • 利用 TimescaleDB 中的历史数据构建回测引擎
  • 定义配对交易专用场景:高波动期、低波动期、趋势行情、震荡行情
  • 关键指标:Sharpe ratio、最大回撤、胜率、持仓时间分布、Pair spread 回归时间
  • 进化算法优化可作为 P2 目标,先实现基础回测

三、当前项目的独有优势

以下是当前项目已有但 passivbot 缺失的能力,不需要改动:

维度 当前项目优势 passivbot
数据库持久化 TimescaleDB 完整记录信号/仓位/订单/日统计 无 DB,仅文件缓存(.npy + .json),重启丢失交易状态
崩溃恢复 从 DB 恢复 open 仓位 + 交易所对账 依赖交易所状态重建,无本地持久化恢复
双腿配对交易 原生 pair mode(两腿对冲 + 回滚) 仅单腿方向性交易(网格做市)
三层安全防护 KillSwitch + RateLimiter + CircuitBreaker 无 CircuitBreaker,无 RateLimiter(依赖 CCXT 内置)
多周期信号融合 5m/1h/4h Z-score + 协整检验 仅 EMA 门控(3 个 EMA span)
日损限额 UTC 日自动重置的每日亏损限额 有 loss_allowance 但基于峰值余额而非日维度
飞书告警 开仓/平仓/止损全链路通知 仅日志输出,无即时通讯通知
审计追踪 信号拒绝原因、原始数据 JSON 存储 无信号级审计
线程安全 Lock/RLock 保护共享状态 单线程 asyncio,无需锁

四、改进优先级建议

P0 — 高价值、可立即实施

改进项 来源模块 预估工作量 影响范围
订单容差匹配 pure_funcs.py 3-4 小时 减少 50%+ 无效 API 调用
TradingMode 状态机 orchestrator.rs 4-6 小时 替代粗暴 KillSwitch,支持渐进式降级
定期健康摘要 passivbot.py 2-3 小时 提升可观测性,发现内存泄漏

P1 — 高价值、中等工作量

改进项 来源模块 预估工作量 影响范围
Unstuck 渐进解套 risk.rs 6-8 小时 被套仓位不再只能全平或死扛
WEL + TWEL 双层敞口限制 risk.rs 4-6 小时 全账户级风控提升
Warmup 交错预热 passivbot.py 3-4 小时 防止启动时 API 限流
基础回测框架 backtest.py 2-3 天 参数验证从经验驱动变为数据驱动

P2 — 中价值、可延后

改进项 来源模块 预估工作量 影响范围
进化算法优化器 optimize.py 3-5 天 自动搜索最优参数组合
Hook 分类法适配器 exchanges/ccxt_bot.py 3-5 天 支持多交易所扩展
原子文件操作 candlestick_manager.py 1-2 小时 防止文件写入损坏
多场景回测套件 backtest_suite.py 2-3 天 极端行情压力测试

五、关键设计理念对比

理念 passivbot 当前项目 借鉴建议
无状态设计 交易所状态即权威,本地只是缓存 DB 持久化 + 交易所校验 已有类似思想,可加强对账频率
计算与编排分离 Rust 做计算,Python 做 IO 全 Python 暂不需要 Rust,但可将信号计算独立为纯函数模块
理想 vs 实际对比 每个周期计算理想订单集,只操作差异 每次重新挂单 ⭐ 最值得借鉴
渐进式风控 Unstuck / Auto-reduce / TWEL Enforcer 阈值触发 → 全量操作 ⭐ 应从"全有或全无"进化为"渐进式"
多模式运行 Normal / TpOnly / GracefulStop / Panic / Manual Running / Killed ⭐ 扩展模式谱
参数验证循环 回测 → 优化 → 实盘 → 回测 经验调参 → 实盘 应补齐回测环节

六、总结

Passivbot 是目前分析的 5 个项目中最成熟的(1,860 stars、6 年迭代、Rust 性能优化、80+ 测试文件)。其核心价值不在策略(Martingale 网格做市与配对交易完全不同),而在于工程化的交易运营体系

最值得优先借鉴的 5 个点

  1. 订单容差匹配(3-4h)— 投入最小、收益最大。避免每个周期全量撤单+重挂,减少 API 调用,降低对薄盘口的冲击
  2. TradingMode 状态机(4-6h)— 从"运行/停止"二态进化为 5 态,支持 TpOnly(接近日损限额时)和 GracefulStop(维护时)
  3. Unstuck 渐进解套(6-8h)— 对配对交易被套仓位,不再只能全平或死扛,而是在亏损预算内渐进止损
  4. 定期健康摘要(2-3h)— 每 15 分钟发送系统健康报告到飞书,含内存/错误/WS 状态
  5. 基础回测框架(2-3d)— 利用 TimescaleDB 历史数据,验证参数有效性,从经验驱动升级为数据驱动

Read more

跑步的技巧(滚动落地)

“滚动落地(rolling contact / rolling foot strike)”不是一种教条式的“脚法”,而是一种 让冲击沿着整只脚、整条后链逐级传递的落地机制。 它的核心不是“你先用哪儿着地”,而是: 你的脚落地之后,冲击是不是像轮子一样滚过去,而不是像锤子一样砸下去。 这就是滚动落地的本质。 一、什么叫“滚动落地”? 你可以把它理解成两种完全不同的落地方式: 1. 砸地(撞击式) 脚像锤子一样拍到地上: * 要么后跟先砸 * 要么前掌先戳 * 冲击集中在一个点 * 一个结构瞬间吃掉大部分载荷 结果就是: * 后跟砸 → 膝盖难受 * 前掌戳 → 前脚掌磨烂 * 都不是长跑友好模式 这叫 撞击式着地(impact strike)。 2. 滚地(滚动式) 脚像轮胎一样“滚”过地面: * 不是某一点硬砸 * 而是外侧中足先轻触 * 再向前滚到前掌 * 最后从大脚趾蹬离

By SHI XIAOLONG

AMI的优越性

世界模型(World Models)的具体例子 如下,我按类型分类,便于理解。每类都附带实际实现、演示效果和应用场景。 1. Yann LeCun / Meta 的 JEPA 系列(最直接对应“世界模型”概念) 这些是 LeCun 主张的非生成式抽象预测世界模型代表。 * I-JEPA(Image JEPA,2023) 输入一张图像,模型把不同区域(context 和 target)编码成抽象表示,然后预测 target 的表示(不在像素级别重建)。 例子:给定一张遮挡了部分物体的图片,模型能预测“被遮挡物体的大致位置和属性”,构建对物体持久性和空间关系的理解。 这是一个“原始世界模型”,能学习物理常识(如物体不会凭空消失)。 * V-JEPA / V-JEPA 2(Video JEPA,

By SHI XIAOLONG

什么是:“世界模型(World Models)”

世界模型(World Models) 是人工智能领域的一个核心概念,尤其在 Yann LeCun 等研究者推动的下一代 AI 架构中占据中心位置。它指的是 AI 系统在内部构建的对现实世界的抽象模拟或内部表示,让机器能够像人类或动物一样“理解”物理世界、预测未来、规划行动。 简单比喻 想象你闭上眼睛也能“看到”房间里的物体会如何移动、碰撞或掉落——这就是你大脑里的世界模型。AI 的世界模型就是类似的“数字孪生”(digital twin)或“内部模拟器”:它不是简单记住数据,而是学习世界的动态、因果关系和物理直觉(如重力、物体持久性、遮挡、因果等)。 为什么需要世界模型? 当前主流的大型语言模型(LLM) 擅长处理文本(统计模式预测),但存在根本局限: * 缺乏对物理世界的真正理解 → 容易“幻觉”、无法可靠规划。 * 样本效率低 → 人类/

By SHI XIAOLONG

K线周期可配置化设计方案

K线周期可配置化设计方案 1. 背景与目标 当前 Beta 套利策略的 K 线周期硬编码为 "1h",分散在多个文件中。需要: 1. 将 K 线周期从 1h 改为 2h 2. 提取为环境变量 BETA_ARB_KLINE_INTERVAL,使其可在 .env 中配置 2. 影响范围分析 2.1 需要修改的文件(共 6 个) 文件 硬编码位置 修改内容 src/trading/config.py BetaArbConfig dataclass 新增 kline_interval 字段,

By SHI XIAOLONG