| 时间 | A 费率 | B 费率 | 净资金费 | 累计 |
|---|
BasisScope
设置
机会搜索参考交易所 / DEX
DEX 市场地址配置
按账号保存,最多 24 个市场。请核对官方合约地址及精度;同名币不代表同一资产。保存不会下单。
保存已确认的地址和精度后,“找机会”会读取 DEX-DEX 与 DEX-CEX 组合;上游凭证需管理员在服务器配置,详见设置中的帮助文档。
统一标的映射
| 时间 | A 交易所合约 | A OI | A 风险金 | B 交易所合约 | B OI | B 风险金 |
|---|
按账号保存,最多 24 个市场。请核对官方合约地址及精度;同名币不代表同一资产。保存不会下单。
保存已确认的地址和精度后,“找机会”会读取 DEX-DEX 与 DEX-CEX 组合;上游凭证需管理员在服务器配置,详见设置中的帮助文档。
| 时间 | A 费率 | B 费率 | 净资金费 | 累计 |
|---|
| 时间 | A 交易所合约 | A OI | A 风险金 | B 交易所合约 | B OI | B 风险金 |
|---|
Ctrl+Enter 等同于点击“找机会”,普通 Enter 等同于点击“确认”。
页面默认方向是多 A、空 B。FF 表示 A 和 B 都是合约;SF 表示 A 是现货,B 是合约。
价差百分比 = 2 × (B - A) / (A + B) × 100%。如果 B 需要倍率换算,系统会先把右侧价格换成等效价再计算。
映射规则保存在服务器,不是只存在浏览器。添加并保存或删除后刷新页面仍然存在;除非你删除规则、手动改服务器文件,或者服务器文件丢失。
现货名和统一标的名不一样时,设置现货 S。合约名和统一标的名不一样时,设置合约 F。S/F 都不同名时,对同一个统一标的名分别添加两条规则。
只有设置合约 F 时需要倍率。比如现货是 NEX,合约是 10000NEX,倍率填 10000 或 10000:1,系统会用合约价格除以 10000 后和现货比较。
如果统一标的名是 NEX,合约名是 10000NEX:添加一条 NEX / 合约 F / 10000NEX / 10000。之后搜索 NEX 或 10000NEX 都能识别。
“交易所实际名”既可以填写面板上的显示名称,也可以填写官方 API 名。Hyperliquid 会把面板名 CL 解析为 xyz:CL;当前 Brent 合约的官方名称是 xyz:BRENTOIL,不是 BZ,所以查询 PAXG-BZ 时应给 Hyperliquid 合约规则填写 BRENTOIL 或 xyz:BRENTOIL。完整名称也可以直接填写。Aster 会根据官方 exchangeInfo 将面板名 Brent Oil 解析为 BZUSDT。如果 Hyperliquid 的同一个面板名在多个 HIP-3 DEX 都存在,请填写带 DEX 前缀的 API 名,程序不会自行猜测。
交易所 API Key、Secret、Passphrase、DEX Router 凭证和韩国日历 Key 只配置在服务器的 /etc/trade-viewer.env,不在此网页填写,也不要写进项目目录、Git 或截图。服务器终端执行:
if ! sudo test -e /etc/trade-viewer.env; then
sudo install -o root -g root -m 600 /home/ubuntu/trade/trade-viewer.env.example /etc/trade-viewer.env
fi
sudo chown root:root /etc/trade-viewer.env
sudo chmod 600 /etc/trade-viewer.env
sudoedit /etc/trade-viewer.env
如果文件已经存在,不要覆盖已有值;只编辑对应变量。保存后必须重启服务,浏览器刷新不会加载新的环境变量。
每行写 KEY=VALUE,不加 export,不在等号两侧加空格;含空格的值使用双引号,避免同名变量重复。不要把模板中的空值覆盖到旧配置。不要 source 环境文件、不要用 cat/printenv 或 systemctl show Environment 输出密钥;sudoedit 只在受信任终端使用。保持 MALLOC_ARENA_MAX=2,它不是凭据。后端只监听 127.0.0.1:8765,公网使用 Nginx HTTPS;切勿为排查故障开放公网 8765。
所有交易所 Key 只开“读取 / Management Read / General Read”权限,关闭交易、提现、转账、资金划转和下单权限;能设置 IP 白名单时加入生产服务器出口 IP。Bitget UTA 使用 Management Read,Bitget Classic 只读 Key 仅用于 Classic Savings;KuCoin 使用 General/Read。API 凭证缺失时,CEX 公共行情仍可用,但账户借贷、额度和理财数据会显示未配置或不可用。
操作顺序:在交易所官方后台为监控单独创建 Key → 选择对应只读权限和正确账户模式 → 配置服务器出口 IP → 安全保存一次性显示的 Secret/Passphrase → 将整组变量写入服务器 → 重启 → 按币种验收。Passphrase 是创建 API Key 时的口令,不是登录密码。不要为解决“权限不足”直接开启交易权限;MEXC Key 仅补充网络充提查询,不代表本系统实现了 MEXC 借贷接口。
下面是全部模板变量;仅填写要启用的功能,不要把空白模板覆盖到已有环境文件。Router 不需要钱包私钥,不会签名、下单或广播。OKX CEX 和 OKX DEX 是不同凭据组。
MALLOC_ARENA_MAX=2
BINANCE_API_KEY=
BINANCE_API_SECRET=
BITGET_API_KEY=
BITGET_API_SECRET=
BITGET_API_PASSPHRASE=
BITGET_CLASSIC_API_KEY=
BITGET_CLASSIC_API_SECRET=
BITGET_CLASSIC_API_PASSPHRASE=
OKX_API_KEY=
OKX_API_SECRET=
OKX_API_PASSPHRASE=
BYBIT_API_KEY=
BYBIT_API_SECRET=
GATE_API_KEY=
GATE_API_SECRET=
MEXC_API_KEY=
MEXC_API_SECRET=
KUCOIN_API_KEY=
KUCOIN_API_SECRET=
KUCOIN_API_PASSPHRASE=
JUPITER_API_KEY=
OKX_DEX_API_KEY=
OKX_DEX_SECRET=
OKX_DEX_PASSPHRASE=
OKX_DEX_PROJECT_ID=
PCS_HUB_TOKEN=
UNISWAP_API_KEY=
UNISWAP_QUOTE_SWAPPER=
KYBERSWAP_CLIENT_ID=
KYBERSWAP_API_KEY=
ONEINCH_API_KEY=
KRX_OPEN_API_KEY=
KOREA_HOLIDAY_API_KEY=
BASISSCOPE_ADMIN_USERNAME=admin
BASISSCOPE_ADMIN_PASSWORD=
KRX_OPEN_API_KEY 用于韩国 ETF 补充目录;KOREA_HOLIDAY_API_KEY 用于韩国法定节假日,缺失时使用公开回退源。香港节假日和普通公共行情不需要 Key。BASISSCOPE_ADMIN_USERNAME、BASISSCOPE_ADMIN_PASSWORD 只在首次没有 users.json 时初始化管理员;系统已经有用户后修改它们不会自动改现有密码。旧的 SKH_ADMIN_* 仅为兼容,不建议新部署使用。
KRX:在官方 Data Marketplace 的 Open API 申请 Key 与“ETF 日别交易信息”服务,获批后填入变量,不使用官方示例 Key 冒充生产 Key。韩国节假日:在 data.go.kr 申请公休日历服务,按项目 API 手册选择 Service Key 格式;验收目录/休市状态及来源,而不是仅看到变量有值。账号初始化只用于首次部署;已有用户通过“设置 → 用户管理”维护,禁止删除 users.json 来强制重建管理员。
官方申请入口与 API 文档(点击在新标签页打开):
Jupiter 的 JUPITER_API_KEY 可不填,当前代码会尝试无 key 报价;有额度或认证错误时检查供应商账号。OKX DEX 是独立 Web3 开发者项目,不复用 OKX 交易所 Key:从官方开发者项目取得 Key、Secret、Passphrase、Project ID,必须填写完整四项。
PancakeSwap:通过官方 Hub/API 接入流程申请 secure token,填 PCS_HUB_TOKEN;这里只接入 BSC(56)Hub 报价,不是全部链。Uniswap:在官方 Developer Platform 申请 API key,另填你选定的公开 EVM 地址 UNISWAP_QUOTE_SWAPPER 作为模拟身份;不要填私钥或助记词。当前仅 V2/V3/V4 CLASSIC 路由,不接 UniswapX、跨链或无法确认费用输出的报价。详细官方接口出处在 docs/API_CREDENTIALS.md。未配置、未获授权、无流动性是不同状态;代码上线不等于 key 已开通。
KyberSwap:选择 kyberswap。无需密钥可使用公开 routes 预览接口;KYBERSWAP_CLIENT_ID 留空时使用 BasisScope,也可填不含空格的应用标识。可向官方 business@kyber.network 申请 KYBERSWAP_API_KEY,填入后改走官方 API gateway,不回退到匿名接口以绕过限制。本应用只读 GET routes,不调用 swap、route/build 或 RFQ 交易构建。公开额度为 3 次/秒;配置 key 后仍保守使用相同请求预算,不自动假定更高套餐。
Raydium:选择 raydium,仅 Solana,无需 API key 或钱包地址;只读取 compute/swap-base-in 的精确输入报价,不调用 transaction 构建或发送接口。报价接口额度为每 IP 120 次/分钟;固定 50 bps(0.5%)滑点参数仅用于上游最小输出阈值,模拟毛收益使用预期 outputAmount,不代表最低保证收益。
1inch:选择 1inch,到官方 1inch Business / Developer Portal 创建应用,开通 Classic Swap API 后把密钥填入 ONEINCH_API_KEY。仅用 Bearer 认证读取 v6.1 quote,不使用 swap、Fusion、订单、授权或交易广播;无需钱包私钥、Secret 或 Passphrase。未配置会直接提示 ONEINCH_API_KEY,不请求上游;默认保守预算为 1 次/秒,实际还受账号套餐和总额度限制。若支持 IP 限制,添加服务器出口 IP;不要为报价开通交易所账户的交易或提现权限。
聚合器可能共享底层池,更多来源不等于独立可成交套利。
新变量仍写入 /etc/trade-viewer.env,不要写进仓库模板或浏览器;只在受信任终端使用 sudoedit,保持 root:root / 600。修改后按“管理员:更新后验收”重启正式服务,再配置对应市场并“找机会”。429、Retry-After、额度耗尽或报价不完整会让部分档位不可用;缺 key、停服或过期不能显示为零成本/保证利润。1inch 尚未配置时不要把健康检查通过当成其报价已验收。
Ondo Perps 公共市场目录和订单簿无需 Key,点击“找机会”可读独立永续深度;没有对应市场显示无匹配,不需要伪造 DEX 地址。
飞书/钉钉 Webhook 不写入环境文件:在当前账号的“订阅 → 通知 Webhook”选择平台、填写群机器人地址、测试并保存。测试会真的发消息,请先通知群成员;地址属于秘密,不发截图。仅支持关键词“交易监控”或出口 IP 白名单等现有安全方式,不支持只启用签名 Secret。两平台地址可保留,但自动通知只用选中平台;保存目标后还需添加对应指数、OI、正股溢价或借币额度订阅。凭证未配置时不能宣称借币额度通知已生效。
映射、模板、DEX 市场、Webhook 都是账号级数据,不是管理员全局配置;要在需要监控的账号保存。正股上市地/代码、ADR 换股比例、合约倍率须核对实际标的;不确定时保持未知,不用同名 ticker 代替确认。Webhook 泄露后在群平台撤销旧机器人/令牌并重新配置,本地移除地址不会撤销供应商端令牌。
登录管理员账号后打开“设置 → DEX 市场地址配置 → 添加市场”。每个市场必须填写统一标的、Router、链 ID、Token 地址、报价币地址、两边精度,并勾选“我已核对资产身份、报价币地址和精度”后保存。Jupiter / Raydium 只填 solana 和 Solana Mint;PancakeSwap Hub 只填 56;Uniswap / 1inch 填对应上游支持的 EVM 链 ID。KyberSwap 本次支持 Ethereum 1、BSC 56、Polygon 137、Arbitrum 42161、Optimism 10、Base 8453、Avalanche 43114、Linea 59144、Sonic 146,不代表其全部网络。地址必须是真实合约地址,不能只凭币名或相同 ticker 判断相同资产。配置保存在账号目录 user_data/<用户名>/dex_markets.json,最多 24 个市场。
逐项核对:统一标的与查询/映射一致;报价币只选 USDT 或 USDC;从该链官方资产信息或区块浏览器核实两边地址及 decimals,不能假定所有 USDT 精度都是 6;修改字段后需重新勾选确认。DEX-DEX 必须同链、同地址、同精度、同报价币且不同 Router;只配置一个 Router 可以有 DEX-CEX,但没有 DEX-DEX。保存后搜索相同标的并点击“找机会”,读取 100/1,000/10,000 档。完整毛收益不是净利润:尚未扣齐 Gas、手续费和转移成本,聚合器也可能使用同一个底层池。
编辑 /etc/trade-viewer.env 后执行:
systemctl show basisscope.service -p MainPID -p ActiveEnterTimestamp
sudo systemctl restart basisscope.service
systemctl is-active basisscope.service
systemctl show basisscope.service -p MainPID -p ActiveEnterTimestamp
curl --fail --silent --show-error --retry 5 --retry-connrefused --retry-delay 1 http://127.0.0.1:8765/health
sudo journalctl -u basisscope.service -n 100 --no-pager
必须看到 active、健康接口返回 {"ok":true},并确认日志没有启动错误。然后登录页面,用实际币种查询:CEX 检查盘口和资金费,FS 检查借贷状态;配置 DEX 后点击“找机会”,检查 DEX-DEX、DEX-CEX、CEX-DEX 三档模拟。Ondo Perps 是独立 USD 永续深度,不等同现货,也不自动产生套利毛收益。
必须看到新 PID/启动时间。健康接口只证明服务存活,不证明供应商授权成功。登录后可在浏览器开发者工具 Network 中确认 router-quote、dex-opportunities、lending-products 请求状态与目标币种;不要把浏览器 Cookie 或完整请求头复制到聊天。未登录的业务接口返回 401/403 不等于供应商 Key 失效;环境变量不能靠另起临时端口或 Nginx reload 激活。
“未配置”:核对整组变量拼写、空值、文件路径并重启;“权限不足”:核对只读权限、出口 IP、账户模式、Key 是否过期,不开启交易权限;“API 未提供”:本系统或上游没有该能力,加 Key 不能解决;“无额度”:平台/账户库存不足,不是利率为零;429/限频:等待退避,不反复重启或密集刷新;无路由:核对链、地址、精度、资产流动性;盘口过期/深度不足:不能视为可成交利润。中文单币可查借贷,币对需分别查询,FS 查现货卖腿要借的币。
常规轮换:先创建新只读 Key并设白名单 → 在受保护位置备份旧配置 → 替换完整凭据组 → 重启并验收实际查询 → 成功后到供应商撤销旧 Key。若怀疑泄露,优先撤销泄露 Key再恢复服务,不等待验收。未获新 Key 前不要用模板空值覆盖旧凭据。服务器 IP 变化时同步检查所有供应商、机器人白名单。
先完成加密备份并记录旧版本(以下更新命令不包含运行数据备份;备份失败应停止更新):
cd /home/ubuntu/trade
git status --short --ignored
git rev-parse HEAD
git pull --ff-only origin main
./scripts/check.sh
逐条执行,任何一步失败立即停止。存在未备份本地修改时不要拉取,不用 reset --hard 或 git clean 强行清理。对比新 trade-viewer.env.example,仅手动合并新增变量到 /etc 文件。仅当 systemd 单元有更新时执行:
sudo install -o root -g root -m 644 /home/ubuntu/trade/basisscope.service /etc/systemd/system/basisscope.service
sudo systemctl daemon-reload
然后按前一节重启与验收。备份需包含 users.json、user_data/、订阅和监控基线、环境文件及一致 SQLite 副本;源码 Git 备份不含这些数据。不要运行中直接复制 SQLite 主文件忽略 WAL。按 docs/SERVER_MIGRATION.md 准备恢复端 GPG 公钥、核对指纹后,可运行 sudo ./scripts/server_migration.py export --recipient '<完整GPG指纹>' --output-dir /root;该导出会涉及短暂停服,须安排窗口。未准备公钥不要照抄占位符命令。加密归档与校验文件保存在受控离机位置,不能上传 GitHub。
更新前先备份 /etc/trade-viewer.env 和账号运行数据;不要备份到 GitHub。拉取新版本后运行项目要求的 ./scripts/check.sh,再重启正式服务并重复健康检查。若回滚到不认识新 Router 的旧版本,先在 DEX 市场编辑器删除 pancake、uniswap 市场项,或恢复旧版 user_data/<用户名>/dex_markets.json;不要删除用户账号、订阅、资金费历史或 SQLite 文件。详细迁移与凭据清单见项目文档 docs/API_CREDENTIALS.md、docs/DEPLOYMENT.md、docs/SERVER_MIGRATION.md。
| 来源交易所 | 现货交易对 | 权重 | 成分价格 | 现货充提 |
|---|
(买1深度 - 卖1深度) ÷ (买1深度 + 卖1深度) × 100%
买1、卖1深度均为当前最佳一档的名义金额,即对应价格乘以该档基础币数量。
正数表示买一更厚,负数表示卖一更厚,接近 0 表示两边最佳一档较均衡。它只描述当前一档挂单,不代表价格一定上涨或下跌。
--
2 × (卖1价 - 买1价) ÷ (卖1价 + 买1价) × 100%
使用对称中间价作为分母,便于比较不同价格数量级的交易对。数值越小,当前最佳买卖盘越紧。
≤ 0.05% 较紧;0.05%~0.15% 一般;0.15%~0.30% 偏宽;> 0.30% 很宽。
该范围只是界面参考,不是交易所标准或收益保证。低流动性、剧烈波动、较大下单金额和手续费都会提高实际成交成本。
--