--- license: other library_name: pytorch tags: - time-series - finance - crypto - pnl - okx - pytorch --- # SuperPnL SuperPnL 是一个面向可交易 PnL 的加密货币现货预测模型。当前上传的是第一版 OKX spot Top20 / 1min K 线模型包,推荐只使用 `15m` horizon 的实时推理结果。 Hugging Face repo: ```text Shadowell/SuperPnL ``` ## 文件 ```text model.pt model_config.json feature_schema.json normalization_stats.npz universe.json data_contract.json metrics_summary.json manifest.json superpnl_full_feature_tcn_15m_top20_20260430.tar.gz ``` 下游服务应读取根目录文件。`.tar.gz` 是同一模型包的压缩备份。 ## 模型配置 ```text model = full_feature_tcn bar_size = 1m lookback = 256 horizons = [5m, 15m] recommended_horizon = 15m recommended_horizon_index = 1 bar_dim = 6 feature_dim = 33 hidden_dim = 64 ``` 输入 shape: ```text bar: [batch, 256, 6] features: [batch, 256, 33] ``` 输出: ```text pred_ret[:, 1] -> pred_ret_15m sigmoid(pos_logit[:, 1]) -> pos_score_15m score_bps = pred_ret_15m * 10000 ``` ## 下载 CLI: ```bash hf download Shadowell/SuperPnL \ --local-dir /opt/bitpro/artifacts/superpnl \ --exclude "*.tar.gz" ``` Python: ```python from huggingface_hub import snapshot_download model_dir = snapshot_download( repo_id="Shadowell/SuperPnL", local_dir="/opt/bitpro/artifacts/superpnl", ignore_patterns=["*.tar.gz"], ) ``` ## 加载模型 下游需要有 `SuperPnLModel` 结构定义,和训练仓库 `src/superpnl/model.py` 保持一致。源码仓库: ```text https://github.com/Shadowell/SuperPnL ``` ```python import json from pathlib import Path import numpy as np import torch from superpnl.model import SuperPnLModel model_dir = Path("/opt/bitpro/artifacts/superpnl") config = json.loads((model_dir / "model_config.json").read_text()) stats = np.load(model_dir / "normalization_stats.npz") checkpoint = torch.load(model_dir / "model.pt", map_location="cpu") model = SuperPnLModel( bar_dim=config["bar_dim"], feature_dim=config["feature_dim"], num_horizons=config["num_horizons"], hidden_dim=config["hidden_dim"], dropout=config["dropout"], use_features=True, ) model.load_state_dict(checkpoint["model"]) model.eval() ``` ## 实时推理流程 每根 1min K 线确认后执行: 1. 维护 `universe.json` 中 Top20 symbol 的 rolling 1min K 线窗口。 2. 至少保留 `lookback=256` 根;建议 `warmup_bars=300`,覆盖 30m rolling 特征。 3. 只使用 `timestamp <= t` 的已确认 K 线生成特征。 4. 按 `feature_schema.json` 的顺序生成 `bar` 和 `features`。 5. 使用 `normalization_stats.npz` 的训练集 mean/std 标准化。 6. 批量推理 `[n_symbols, 256, dim]`。 7. 读取 `recommended_horizon_index=1` 的 `pred_ret_15m`。 8. 策略层再做 threshold、top-k、最短持仓、冷却时间、再平衡间隔和成本约束。 不要直接用: ```text target_pos = 1 if pred_ret_15m > 0 else 0 ``` 这个逐分钟翻仓规则在零成本下表现好,但在真实手续费下会被高换手打穿。 ## 特征泄漏约束 - rolling / EMA / rank 都只能使用 `<= t` 的历史数据。 - 标准化参数只能使用模型包里的训练集 mean/std,不能在线重新拟合。 - 截面 rank 必须使用同一 timestamp 上已经可见的 universe 数据。 - 不能使用 future volume、future slippage、centered rolling、全样本 z-score。 - 不能用未来成交额或未来上市状态重新选择历史币池。 ## 当前实验结果 主实验是零成本回测: ```text fixed_fee_bps = 0 fixed_slippage_bps = 0 threshold_bps = 0 ``` | model | horizon | zero-cost total_return | sharpe | max_drawdown | turnover | conclusion | | --- | ---: | ---: | ---: | ---: | ---: | --- | | full_feature_tcn | 5m | -14.49% | -3.249 | -19.33% | 0.3167 | 不可用 | | full_feature_tcn | 15m | +62.46% | 9.099 | -5.79% | 0.2472 | 当前唯一主线 | | full_feature_tcn | 30m | -5.80% | -1.532 | -7.95% | 0.1594 | 暂不推荐 | 重要限制: - 当前收益是零成本 test PnL,不能直接当作实盘净收益。 - 加入 maker/taker 成本后,逐分钟翻仓策略会被成本打穿。 - 下游必须先做低换手策略层,再用真实成本重新回测。 - 本模型不是投资建议,也不是自动实盘交易系统。 ## 推荐下游架构 ```text BitPro 实时 1min K线 ↓ SuperPnL feature builder ↓ SuperPnL model inference ↓ pred_ret_15m / pos_score_15m ↓ 低换手策略层 ↓ BitPro broker / execution ``` 历史 prediction `.npz` 文件没有上传到 Hugging Face,也不应作为模拟盘或实盘信号源。