File size: 4,724 Bytes
449f353 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | ---
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,也不应作为模拟盘或实盘信号源。
|