feat(maker-points): enhance configuration for maker points bands

Added new configuration options for maker points bands, including target distances and maximum distance limits. Updated the logic to handle these configurations, ensuring backward compatibility with existing defaults. Enhanced documentation and tests to cover the new features and ensure correct functionality across the system.
This commit is contained in:
discountry
2026-08-18 15:16:49 +08:00
parent f3a96886ac
commit 85954461f3
16 changed files with 1085 additions and 306 deletions
+126
View File
@@ -140,6 +140,18 @@ MAKER_POINTS_BAND_0_10=true
MAKER_POINTS_BAND_10_30=true
MAKER_POINTS_BAND_30_100=true
# ===== 挂单距离(可选,不填就用下面这些默认值) =====
# 每个档位挂在距 mark price 多远的地方(单位 bps,1 bps = 万分之一)
# MAKER_POINTS_BAND_0_10_BPS=9
# MAKER_POINTS_BAND_10_30_BPS=29
# MAKER_POINTS_BAND_30_100_BPS=40
# 最远不超过这个距离(超过 100 bps 就完全没有积分了)
# MAKER_POINTS_MAX_DISTANCE_BPS=95
# 远档位挪动订单的门槛倍数(越大越懒得动,订单活得越久)
# MAKER_POINTS_BAND_REPRICE_RATIO=0.15
# 万一挂单被吃掉,多远触发自动止损(单位 bps)
# MAKER_POINTS_SL_OFFSET_BPS=2
# ===== Token 过期时间配置(推荐配置) =====
# 填写你创建 API Token 时显示的创建日期和有效期天数
# 创建日期格式:YYYY-MM-DD(例如:2026-01-15
@@ -221,12 +233,110 @@ bun run pm2:start:maker-points
| `MAKER_POINTS_BINANCE_DEPTH_WINDOW_BPS` | Binance 失衡检测窗口(bps | 默认 `3` |
| `MAKER_POINTS_BINANCE_DEPTH_IMBALANCE_RATIO` | Binance 失衡比例阈值 | 默认 `9` |
| `MAKER_POINTS_BAND_*` | 三个挂单档位的开关 | 全部 `true` 即可 |
| `MAKER_POINTS_BAND_*_BPS` | 各档位挂多远(bps) | 不填,默认 `9` / `29` / `40` |
| `MAKER_POINTS_MAX_DISTANCE_BPS` | 挂单距离上限(bps) | 不填,默认 `95` |
| `MAKER_POINTS_BAND_REPRICE_RATIO` | 远档挪单门槛倍数 | 不填,默认 `0.15` |
| `MAKER_POINTS_SL_OFFSET_BPS` | 被吃后止损触发距离(bps) | 不填,默认 `2` |
| `STANDX_TOKEN_CREATE_DATE` | Token 创建日期 | 推荐配置,格式 YYYY-MM-DD |
| `STANDX_TOKEN_VALIDITY_DAYS` | Token 有效期天数 | 推荐配置,与创建日期配合使用 |
| `TELEGRAM_BOT_TOKEN` | Telegram 机器人 Token | 可选,用于接收通知 |
| `TELEGRAM_CHAT_ID` | Telegram 聊天 ID | 可选,配合 Bot Token 使用 |
| `TELEGRAM_ACCOUNT_LABEL` | Telegram 通知账户标签 | 可选,用于区分多个账户 |
### 挂单距离配置详解
> 💡 **这一整节都可以跳过。** 上面 4 个 `# 注释掉` 的参数不填就是默认值,策略照常运行,
> 默认值就是按 StandX 当前活动规则调好的。想微调再往下看。
#### 先搞懂积分是怎么算的
StandX 按你的挂单**距离 mark price 有多远**给积分倍率,越近给得越多:
| 距离 | 倍率 |
|------|------|
| 2 bps | 88% |
| 5 bps | 70% |
| 10 bps | 40% |
| 20 bps | 26.25% |
| 29 bps | 13.9% |
| 40 bps | 10.7% |
| 50 bps | 8.9% |
| 99 bps | 0.18% |
| **100 bps 以上** | **0(一分没有)** |
注意两件事:
1. **100 bps 是断崖**,超过一点就完全不得分。所以有了 `MAKER_POINTS_MAX_DISTANCE_BPS=95`
留 5 bps 安全边际,防止 mark price 跳动时你的单被甩出去白挂。
2. **挂得越近积分越多,但也越容易被真的成交。** 本策略的目标是只赚挂单积分、不产生真实成交,
所以默认值是偏保守的一组,不是积分最大化的一组。
#### 三个档位默认挂多远
| 档位 | 默认距离 | 倍率 | 说明 |
|------|----------|------|------|
| `BAND_0_10` | 9 bps | 46% | 最近,积分最高,也最容易被吃 |
| `BAND_10_30` | 29 bps | 13.9% | 中距离 |
| `BAND_30_100` | 40 bps | 10.7% | 最远,最安全 |
**为什么第三档是 40 而不是贴着 99?** 因为 StandX 改成线性倍率之后,99 bps 只有 0.18% 倍率,
是 40 bps 的六十分之一——挂了等于没挂,还白占保证金。40 bps 既远离盘口又能保住 10.7%。
**想更保守**(更不容易被成交,但积分少):把三档都往大调,例如
```bash
MAKER_POINTS_BAND_0_10_BPS=10
MAKER_POINTS_BAND_10_30_BPS=35
MAKER_POINTS_BAND_30_100_BPS=55
```
或者干脆关掉最近的一档:`MAKER_POINTS_BAND_0_10=false`
**想更激进**(积分多,但被成交的风险明显上升):
```bash
MAKER_POINTS_BAND_0_10_BPS=5
MAKER_POINTS_BAND_10_30_BPS=20
MAKER_POINTS_BAND_30_100_BPS=32
```
> ⚠️ 如果你把某档距离调得比 `MAKER_POINTS_MAX_DISTANCE_BPS` 还大,策略会**自动把上限提到该档位**,
> 不会把你的挂单硬拽回盘口附近。上限最高锁在 100 bps。
#### `MAKER_POINTS_BAND_REPRICE_RATIO` 是干什么的
StandX 规定**挂单要在盘口停留超过 3 秒才计分**,而且频繁撤挂会被判定刷量、剔除出奖励。
所以策略不会价格一动就重挂,而是给每个档位一个"容忍范围",漂出去了才动:
```
容忍范围 = max(MAKER_POINTS_MIN_REPRICE_BPS, 该档距离 × MAKER_POINTS_BAND_REPRICE_RATIO)
```
按默认值(`MIN_REPRICE_BPS=3``RATIO=0.15`)算出来是:
| 档位 | 距离 | 容忍范围 | 实测平均存活 |
|------|------|----------|--------------|
| 0-10 | 9 bps | ±3 bps | 约 8 秒 |
| 10-30 | 29 bps | ±4.35 bps | 约 16 秒 |
| 30-100 | 40 bps | ±6 bps | 约 28 秒 |
远的档位挪得更少,因为价格小幅波动对它影响本来就小。三档平均存活都远超 3 秒门槛。
**调大 ratio**(例如 `0.25`)→ 订单更少被挪动、更容易跨过 3 秒门槛,但挂单距离会偏离目标更多。
**调小 ratio**(例如 `0.08`)→ 距离更精准,但撤挂更频繁,有跌破 3 秒门槛的风险。**不建议低于 0.1。**
> 无论容忍范围设多大,出现这三种情况都会**立刻撤单**,不受影响:挂单穿到了 mark price 另一侧、
> 挂单掉出积分范围、目标价前方的盘口深度不够。插针行情下撤单永远畅通。
#### `MAKER_POINTS_SL_OFFSET_BPS` 是干什么的
万一挂单还是被成交了,策略会给它附带一个止损单立刻平掉,避免留下仓位。
这个参数控制止损触发价离成交价多远,默认 `2` bps。
设成 `0` 表示不附带止损(不推荐,除非你自己有别的风控)。
---
### Token 过期时间配置详解
`STANDX_TOKEN_CREATE_DATE``STANDX_TOKEN_VALIDITY_DAYS` 用于设置 Token 的过期时间。配置后,策略会:
@@ -329,6 +439,22 @@ STANDX_TOKEN_EXPIRY=2025-01-01T00:00:00Z
2. 检查 TOKEN 和私钥是否正确填写
3. 检查 .env 文件是否保存成功
### Q:我升级了代码,需要改 .env 吗?
**不需要。** 新增的 `MAKER_POINTS_BAND_*_BPS`、`MAKER_POINTS_MAX_DISTANCE_BPS`、
`MAKER_POINTS_BAND_REPRICE_RATIO`、`MAKER_POINTS_SL_OFFSET_BPS` 全部有默认值,
不填就按默认值跑。老的 `.env` 直接用就行。
### Q:仪表盘上挂单的 `Rest` 那一列是什么?
是这张挂单已经在盘口停留了多少秒。StandX 只对**停留超过 3 秒**的挂单计分,
所以数字前面带 `!` 的(不足 3 秒)暂时还不产生积分。正常运行时大部分单会稳定在十几秒以上。
### Q:档位那几行显示的 `×10.71%` 是什么意思?
是这个档位当前挂单对应的**积分倍率**。旁边的 `38.9bps` 是实际距离 mark price 多远。
如果倍率显示 `0.00%`,说明挂单已经跑到 100 bps 之外了,这时候是白挂——检查一下你的档位距离配置。
### Q:担心平掉我手动开的仓位?
把 `MAKER_POINTS_CLOSE_THRESHOLD` 设为 `0` 或者设置成一个比你持仓大的数字。