Files
ritmex-bot/docs/standx/maker-points-guide.md
discountry 85954461f3 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.
2026-08-18 15:16:49 +08:00

18 KiB
Raw Permalink Blame History

StandX 做市积分策略使用教程(超详细新手版)

本教程会 手把手 教你如何运行 StandX 做市积分策略。每一步都有详细说明,按顺序操作即可。


第一步:安装 Bun(运行环境)

本项目需要 Bun 才能运行。

macOS / Linux 用户:

打开终端,复制粘贴以下命令后按回车:

curl -fsSL https://bun.sh/install | bash

Windows 用户:

打开 PowerShell,复制粘贴以下命令后按回车:

powershell -c "irm bun.sh/install.ps1 | iex"

安装完成后,关闭终端,重新打开一个新的终端窗口,然后输入:

bun -v

如果显示版本号(如 1.2.x),说明安装成功。


第二步:下载项目并安装依赖

git clone https://github.com/discountry/ritmex-bot.git
cd ritmex-bot
bun install

第三步:获取 StandX API Token(最重要的一步)

⚠️ 这一步是 90% 新手卡住的地方,请仔细阅读!

⚠️ 这一步是 90% 新手卡住的地方,请仔细阅读!

⚠️ 这一步是 90% 新手卡住的地方,请仔细阅读!

策略需要两样东西才能帮你下单:

  1. TOKENAPI 令牌)
  2. 代理钱包私钥(用于签名交易)

获取步骤(图文说明):

3.1 打开 StandX 官方 API 创建页面

在浏览器打开这个网址:

https://standx.com/user/session

现在可以直接在 StandX 官网创建 API Token 了!

3.2 连接你的钱包并登录

如果还没登录,先连接钱包并登录你的 StandX 账户。

3.3 生成 API Token

点击页面上的 "Generate API Token" 按钮。

你会看到类似这样的信息:

  • Token(很长一串以 eyJ 开头的字符串)
  • Ed25519 Private KeyBase58 格式的私钥,类似 HdsyJD7oWgT756124j3taSPGv...
  • 创建日期(例如:2026-01-15
  • 有效期天数(例如:30 天)

🔴 请把这些值复制保存下来!

🔴 请把这些值复制保存下来!

🔴 请把这些值复制保存下来!

什么是 Ed25519 Private Key

  • 这是系统 自动为你生成 的一个 Ed25519 签名私钥
  • 只用于签名交易请求,不存放你的资金
  • 你的资产仍然在你自己的钱包里,非常安全
  • 你不需要手动创建,生成 API Token 时系统会自动创建
  • 格式为 Base58 编码(类似 HdsyJD7oWgT756124j3taSPGv17vo5u7FafDq3vrun4f

第四步:配置环境变量

在项目根目录创建一个 .env 文件(如果已存在就修改它)。

4.1 创建/编辑 .env 文件

macOS / Linux

nano .env

Windows 用记事本打开项目文件夹,新建一个文本文件,命名为 .env(注意前面有个点)

4.2 填入以下内容

⚠️ 请务必把下面的示例值替换成你自己的!

⚠️ 请务必把下面的示例值替换成你自己的!

⚠️ 请务必把下面的示例值替换成你自己的!

# ===== 交易所设置 =====
EXCHANGE=standx

# ===== 你的 API 凭证(第三步获取的) =====
# 把下面的 "你的TOKEN" 替换成你生成的 Token(很长一串以 eyJ 开头的)
STANDX_TOKEN=你的TOKEN

# 把下面的 "你的私钥" 替换成页面中显示的代理钱包私钥(按页面原样粘贴即可)
STANDX_REQUEST_PRIVATE_KEY=你的代理钱包私钥

# ===== 交易品种 =====
STANDX_SYMBOL=BTC-USD

# ===== 策略参数(新手直接用默认值就行) =====
MAKER_POINTS_ORDER_AMOUNT=0.01
MAKER_POINTS_CLOSE_THRESHOLD=0.1
MAKER_POINTS_STOP_LOSS_USD=0
MAKER_POINTS_MIN_REPRICE_BPS=3
MAKER_POINTS_BINANCE_DEPTH_WINDOW_BPS=3
MAKER_POINTS_BINANCE_DEPTH_IMBALANCE_RATIO=9

# ===== 挂单档位开关 =====
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
STANDX_TOKEN_CREATE_DATE=2026-01-15
# 有效期天数(例如:30
STANDX_TOKEN_VALIDITY_DAYS=30

# ===== Telegram 通知配置(可选) =====
# 配置后,策略会通过 Telegram 发送重要通知(订单成交、开仓、平仓、止损、Token过期等)
# 如何获取 Bot Token:在 Telegram 搜索 @BotFather,发送 /newbot 创建机器人,获取 Token
# 如何获取 Chat ID:在 Telegram 搜索 @userinfobot,发送任意消息即可看到你的 Chat ID
# TELEGRAM_BOT_TOKEN=你的BotToken
# TELEGRAM_CHAT_ID=你的ChatID
# TELEGRAM_ACCOUNT_LABEL=我的账户(可选,用于区分多个账户的通知)

正确填写示例

假设你生成的 API Token 信息是:

  • Token: eyJhbGciOiJFUzI1NiIsImtpZCI6IlhnaEJQSVNuN0RQVHlMcWJtLUVHVkVhOU1lMFpwdU9iMk1Qc2gtbUFlencifQ...
  • Ed25519 Private Key: HdsyJD7oWgT756124j3taSPGv17vo5u7FafDq3vrun4f
  • 创建日期: 2026-01-15
  • 有效期: 30

那么你的 .env 应该这样写:

EXCHANGE=standx
STANDX_TOKEN=eyJhbGciOiJFUzI1NiIsImtpZCI6IlhnaEJQSVNuN0RQVHlMcWJtLUVHVkVhOU1lMFpwdU9iMk1Qc2gtbUFlencifQ...
STANDX_REQUEST_PRIVATE_KEY=HdsyJD7oWgT756124j3taSPGv17vo5u7FafDq3vrun4f
STANDX_SYMBOL=BTC-USD
MAKER_POINTS_ORDER_AMOUNT=0.01
MAKER_POINTS_CLOSE_THRESHOLD=0.1
MAKER_POINTS_STOP_LOSS_USD=0
MAKER_POINTS_MIN_REPRICE_BPS=3
MAKER_POINTS_BINANCE_DEPTH_WINDOW_BPS=3
MAKER_POINTS_BINANCE_DEPTH_IMBALANCE_RATIO=9
MAKER_POINTS_BAND_0_10=true
MAKER_POINTS_BAND_10_30=true
MAKER_POINTS_BAND_30_100=true
STANDX_TOKEN_CREATE_DATE=2026-01-15
STANDX_TOKEN_VALIDITY_DAYS=30
# TELEGRAM_BOT_TOKEN=你的BotToken
# TELEGRAM_CHAT_ID=你的ChatID

🔴 不要加引号!不要加空格!直接粘贴值!

🔴 不要加引号!不要加空格!直接粘贴值!

🔴 不要加引号!不要加空格!直接粘贴值!


第五步:启动策略

普通启动(看实时仪表盘)

bun run index.ts --strategy maker-points --exchange standx

后台运行(推荐长期挂机)

bun run pm2:start:maker-points

配置参数说明

参数 含义 新手建议
STANDX_TOKEN API 令牌 必填,从第三步获取
STANDX_REQUEST_PRIVATE_KEY 代理钱包私钥 必填,从第三步获取
STANDX_SYMBOL 交易品种 默认 BTC-USD
MAKER_POINTS_ORDER_AMOUNT 每笔挂单数量 建议 0.01 起步
MAKER_POINTS_CLOSE_THRESHOLD 持仓达到多少开始平仓 设为 0 表示不自动平仓
MAKER_POINTS_STOP_LOSS_USD 亏损多少美元强制平仓 设为 0 表示关闭止损
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%。

想更保守(更不容易被成交,但积分少):把三档都往大调,例如

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

想更激进(积分多,但被成交的风险明显上升):

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=3RATIO=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_DATESTANDX_TOKEN_VALIDITY_DAYS 用于设置 Token 的过期时间。配置后,策略会:

  1. Token 过期前 1 小时:在日志中提醒你 Token 即将过期
  2. Token 过期后
    • 如果有持仓:进入平仓模式,只允许平仓和止损,不再开新仓
    • 如果无持仓但有挂单:自动取消所有挂单
    • 如果无持仓无挂单:进入静默模式,只接收数据,不下单

推荐配置方式(创建日期 + 有效期天数):

在 StandX 官网生成 API Token 时,页面会显示创建日期和有效期天数,直接填入即可:

# 创建日期(格式:YYYY-MM-DD
STANDX_TOKEN_CREATE_DATE=2026-01-15
# 有效期天数
STANDX_TOKEN_VALIDITY_DAYS=30

示例计算:

  • 创建日期:2026-01-15
  • 有效期:30 天
  • 过期时间:2025-02-14 00:00:00 UTC

兼容旧版配置(直接指定过期时间戳):

如果你之前使用的是 STANDX_TOKEN_EXPIRY,仍然可以继续使用:

# 方式1:使用时间戳(秒)
STANDX_TOKEN_EXPIRY=1735689600

# 方式2:使用 ISO 日期字符串
STANDX_TOKEN_EXPIRY=2025-01-01T00:00:00Z

💡 提示:推荐使用新的创建日期 + 有效期天数方式,更直观易懂。

Telegram 通知配置详解

配置 Telegram 通知后,策略会在以下情况发送通知:

  • 📝 订单成交:挂单被成交时
  • 📈 开仓:持仓从 0 变为非 0 时
  • 📉 平仓:持仓从非 0 变为 0 时
  • 🛑 止损触发:触发止损平仓时
  • Token 过期Token 过期时

配置步骤:

  1. 创建 Telegram 机器人

    • 在 Telegram 搜索 @BotFather
    • 发送 /newbot 命令
    • 按提示设置机器人名称和用户名
    • 获取 Bot Token(格式类似:123456789:ABCdefGHIjklMNOpqrsTUVwxyz
  2. 获取你的 Chat ID

    • 在 Telegram 搜索 @userinfobot
    • 发送任意消息
    • 机器人会返回你的 Chat ID(一串数字,例如:123456789
  3. 配置环境变量

    TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
    TELEGRAM_CHAT_ID=123456789
    TELEGRAM_ACCOUNT_LABEL=我的账户(可选)
    
  4. 测试通知

    • 启动策略后,如果配置正确,会在 Token 过期或重要事件时收到通知
    • 如果收不到通知,检查 Bot Token 和 Chat ID 是否正确

💡 提示TELEGRAM_ACCOUNT_LABEL 是可选的,如果你有多个账户在运行策略,可以用这个标签区分不同账户的通知。


常见问题

Q:报错说 Token 无效怎么办?

重新去 https://standx.com/user/session 生成新的 API Token。Token 可能过期了。

QEd25519 Private Key 从哪来的?

在 StandX 官网(https://standx.com/user/session)点击 "Generate API Token" 按钮时会显示。 私钥格式为 Base58 编码(类似 HdsyJD7oWgT756124j3taSPGv17vo5u7FafDq3vrun4f)。 你不需要自己创建,系统会自动生成! 你不需要自己创建,系统会自动生成! 你不需要自己创建,系统会自动生成!

Q.env 文件放在哪?

放在项目根目录,就是 ritmex-bot 文件夹里,和 package.json 同一个目录。

Q:为什么策略没有下单?

  1. 检查账户里有没有足够的保证金
  2. 检查 TOKEN 和私钥是否正确填写
  3. 检查 .env 文件是否保存成功

Q:我升级了代码,需要改 .env 吗?

不需要。 新增的 MAKER_POINTS_BAND_*_BPSMAKER_POINTS_MAX_DISTANCE_BPSMAKER_POINTS_BAND_REPRICE_RATIOMAKER_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 或者设置成一个比你持仓大的数字。

Q:如何知道 Token 什么时候过期?

配置 STANDX_TOKEN_CREATE_DATE(创建日期)和 STANDX_TOKEN_VALIDITY_DAYS(有效期天数),策略会在 Token 过期前 1 小时提醒你。这两个值在生成 API Token 时会显示。Token 过期后,如果有持仓会进入平仓模式,只允许平仓和止损。

Q:Telegram 通知收不到怎么办?

  1. 检查 TELEGRAM_BOT_TOKENTELEGRAM_CHAT_ID 是否正确填写
  2. 确保没有在 Bot Token 和 Chat ID 前后加引号或空格
  3. 在 Telegram 中先给机器人发送一条消息(任意内容),然后再启动策略
  4. 检查网络连接是否正常

安全提示

  1. 绝对不要把 TOKEN 和私钥分享给任何人!
  2. 绝对不要把 TOKEN 和私钥分享给任何人!
  3. 绝对不要把 TOKEN 和私钥分享给任何人!

代理钱包只用于签名,你的资产始终在你自己的主钱包里。但如果泄露了 TOKEN,别人可以用你的账户交易。


还是不会?

把你的报错信息截图发到 Telegram 群里,会有人帮你:

Telegram 群:https://t.me/+4fdo0quY87o4Mjhh