Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

配置参考

配置文件为 TOML。生产约定路径:

文件权限建议内容
/etc/alphabound/alphabound.toml0640 root:alphabound非密钥运行参数
/etc/alphabound/secrets.env0600 root:rootOKX / LLM 密钥(systemd EnvironmentFile)
/etc/alphabound/prompts/0640版本化系统 Prompt

密钥绝不写入 TOML,也绝不进入 Agent Context。

仓库示例:config/alphabound.toml。


完整示例

[app]
environment = "production"       # development | production
instance_id = "azure-btc-01"     # 写入事件,便于多实例区分

[exchange]
provider = "okx"
instrument = "BTC-USDT"
mode = "shadow"                  # shadow | demo | live
# rest_url = "https://www.okx.com"
poll_interval_ms = 5000

[risk]
max_drawdown = 0.10              # 不可热加载;Agent 不可修改
valuation = "conservative_liquidation"
allow_runtime_override = false
taker_fee_rate = 0.001
slippage_rate = 0.0005
initial_capital = 100.0          # shadow 模拟起始资金 (USDT)

[agent]
provider = "configured-adapter"
model = "configured-model"
decision_timeout_ms = 180000
prompt_dir = "/etc/alphabound/prompts"

[storage]
path = "/var/lib/alphabound/trading.db"
wal = true

[web]
bind = "127.0.0.1:8080"
static_dir = "/opt/alphabound/ui/current"   # 预留;当前 Dashboard 已嵌入二进制

[review]
short_interval_ms = 28800000   # 定期复盘·小周期 8h(小时级;4h = 14400000,最小 600000;0 = 关闭)
long_interval_ms = 604800000   # 定期复盘·大周期 7d(最小 3600000;0 = 关闭)
timeout_ms = 180000            # 复盘 LLM 超时,默认 180000,最小 30000;独立于 [agent] decision_timeout_ms,不被其封顶

分段说明

[app]

键类型默认说明
environmentstring—环境标签,进日志/事件
instance_idstring—实例标识

[exchange]

键类型默认说明
providerstringokx交易所适配器
instrumentstringBTC-USDT交易标的
modestringshadow见 运行模式
rest_urlstringhttps://www.okx.comREST 根地址
poll_interval_msu322000shadow 轮询间隔;下限 200ms(防打爆公共 API)

[risk] — 硬边界区

键类型默认说明
max_drawdowndecimal0.10HWM 相对最大回撤。启动时加载,禁止热改
valuationstringconservative_liquidation净值口径
allow_runtime_overrideboolfalse必须为 false;解析保留字段
taker_fee_ratedecimal0.001保守估值 taker 费率
slippage_ratedecimal0.0005退出滑点缓冲
initial_capitaldecimal100shadow 模拟账户起始 USDT;须 > 0
min_trade_notionaldecimal0每笔最低名义金额(USDT)。只抬高交易所 min_notional,不降低。低于此值的再平衡会 plan_hold;0 = 仅用交易所下限

改 max_drawdown / 费率类参数 = 版本发布 + 人工确认,不是运行中调参。

[agent]

详见专章 Agent 配置(OpenAI)。

键类型默认说明
providerstringopenai适配器名(当前仅 openai 兼容)
modelstringgpt-4o-mini可被 LLM_MODEL 覆盖
base_urlstringhttps://api.openai.com/v1可被 LLM_API_URL 覆盖
decision_timeout_msu32120000单次 LLM chat 墙钟超时(超时→HOLD,不阻塞 daemon)
decision_interval_msu32600000慢环基础间隔(活跃时段);0 表示不按间隔调度
decision_interval_quiet_msu320静默时段间隔;0 = 同基础间隔
decision_min_interval_msu32120000任意两次决策的硬性冷却下限(事件触发也受限)
active_hours_utcstring""UTC 活跃时段 "start-end"(end 不含,可跨 0 点如 "22-4");空 = 全天基础间隔
event_price_movedecimal0.005距上次决策价格偏离 ≥ 该比例提前触发;0 关闭
event_drawdown_stepdecimal0.01回撤较上次决策加深 ≥ 该比例提前触发;0 关闭
volatility_enterdecimal0约 15 分钟 (最高−最低)/最低 ≥ 该比例进入高波动档,放宽 HOLD 等待;0 关闭
volatility_exitdecimal0.006振幅 ≤ 该比例且持续 volatility_exit_hold_ms 才退出高波动档
volatility_interval_msu32180000高波动档的复查间隔;仍受 decision_min_interval_ms 约束
volatility_exit_hold_msu32900000退出高波动档所需的连续低振幅时长
prompt_dirpathpromptsPrompt 目录
enabledbooltruefalse 时永不调 LLM
llm_reflectionbooltrue有效提案后跑 LLM 结构化反思;失败回退确定性
llm_reflection_on_holdboolfalseHOLD 提案是否也跑 LLM 反思;false 时 HOLD 只用确定性反思

慢环调度是多因素的:活跃/静默时段各有基础节奏,价格突变、回撤加深、 风险模式切换会提前触发一次决策,且所有触发都受 decision_min_interval_ms 冷却下限约束。HOLD 以及因低于最小下单额而 plan_hold 的 REBALANCE 会按提案的 review_after 推迟常规节奏(价格/回撤/风险模式/高波动事件仍可穿透)。 事件触发的复查不会取消已生效的 review_after:只有新的可解析 review_after、 实际成交,或一次未产出建议的失败(LLM 失败/提案无效)才会改变它。 风险内核不受此影响——它始终在快环独立执行。 每次触发在事件流记录 AGENT_TRIGGER(含 reason),便于审计调用频率。

[storage]

键类型默认说明
pathpath—SQLite 文件路径;父目录须可写
walbooltrue强制 WAL 语义(单 writer)

不要把 DB 放在网络文件系统上。

[web]

键类型默认说明
bindstring127.0.0.1:8080仅 127.0.0.1:port 或容器 0.0.0.0:port;宿主机发布仍应绑 loopback
static_dirpath—预留静态目录;当前 Overview 页面 @embedFile 进二进制

[review]

定期复盘节奏。每次运行至多一次 LLM 调用,只读账本、只写复盘报告与一条低置信度参考记忆,接触不到提案与下单路径。

键类型默认说明
short_interval_msu3228800000(8h)小周期复盘间隔,按小时级设置(常用 4h = 14400000);最小 600000;0 = 关闭
long_interval_msu32604800000(7d)大周期复盘间隔;最小 3600000;0 = 关闭
timeout_msu32180000该次 LLM 调用的超时预算;最小 30000。独立于 [agent] decision_timeout_ms,不会被其封顶——复盘 prompt(窗口事实 + 记忆摘要 + 长周期时的短复盘摘要)通常比单次决策更大,调紧决策超时不应连带拖垮复盘可用性。实际生效值还会按 prompt 体量小幅上调(至多 +50%),见 periodicReviewTimeoutMs(src/main.zig)。

下限用于防止误配把复盘变成第二条决策回路。两个周期同时到期时大周期优先,小周期顺延到下一 tick(两次运行之间至少间隔 2 分钟)。进程重启后从库中该周期最新报告的时间戳恢复游标:停机数日只补跑一次,不会逐槽回放。


密钥环境变量(secrets.env)

密钥只经环境变量注入(systemd EnvironmentFile=、shell source、或 macOS 钥匙串导出)。禁止写入 TOML。

# secrets.env  (chmod 0600) — 见 secrets.env.example
OKX_API_KEY=...
OKX_API_SECRET=...
OKX_API_PASSPHRASE=...
# mode=demo  → OKX_SIMULATED=1
# mode=live  → OKX_REAL_MONEY_OK=1(小额子账号;禁止 SIMULATED)
LLM_API_KEY=
LLM_API_URL=https://api.openai.com/v1
LLM_MODEL=gpt-4o-mini

# Dashboard / MCP(可选;空 = 本机开放 API)
# ALPHABOUND_API_TOKEN=          # openssl rand -hex 32
# ALPHABOUND_TRUST_PROXY=1       # 仅受信任 TLS 反代后
# ALPHABOUND_TRUSTED_PROXY_HOPS=1
# ALPHABOUND_WEBAUTHN_RP_ID=localhost
# ALPHABOUND_WEBAUTHN_ORIGIN=http://127.0.0.1:18180

macOS 本地:

./scripts/load-okx-keychain.sh ./secrets.env   # Keychain → 0600 文件(值已 shell-quote)
set -a && source ./secrets.env && set +a

进程只记录 key_len / secret_len / pass_len,从不打印密钥。有密钥时 shadow 会 只读 调用 GET /api/v5/account/balance;引擎现金仍用 initial_capital 模拟,不下单。

私有探测结果 token含义
(成功)余额可用;日志打印 usdt/btc 数量
ip_whitelistOKX 50110:把本机公网 IP 加入 API Key 白名单
invalid_sign / invalid_key / invalid_passphrase密钥或签名问题
http_failed网络/TLS
Dashboard 环境变量含义
ALPHABOUND_API_TOKEN非空则保护 /api/v1/* 数据路由
ALPHABOUND_TRUST_PROXY仅反代后信任 X-Forwarded-For(右起 hops)
ALPHABOUND_WEBAUTHN_*Passkey rpId/origin;须与浏览器打开的 URL 一致

日志与事件经 observability/redaction.zig 脱敏;不要把 secrets.env 贴进 issue 或聊天。鉴权细节见 鉴权与 MCP。


校验与哈希

  • --self-check:解析 TOML、打开 DB、migration、bind;若有 OKX_* 则做私有只读探测。
  • 每次启动计算 config_hash(SHA-256),写入事件信封。
  • mode=live 需要 OKX_* + OKX_REAL_MONEY_OK=1(且禁止 OKX_SIMULATED);mode=demo 需要密钥 + OKX_SIMULATED=1。

热加载边界

可热加载(规划)不可热加载(必须发版)
Prompt 文本(SIGHUP,hash 变更进事件)max_drawdown、费率、滑点、mode→live 切换
日志级别(若后续支持)web bind、DB 路径、instrument

Agent 没有写配置的代码路径——这是能力缺失,不是 prompt 约定。