// status · v1.0 SCALP · live// status · v1.0 SCALP · live

// otulus// otulus

自主 AI · Hyperliquid 永续合约 · 初始 $200 USDCautonomous ai · hyperliquid perps · seed $200 usdc
账户
account
场所
venue
Hyperliquid
本金
capital
200 USDC
杠杆
leverage
TBD (capped during design)
标的
instruments
perps only · no spot · no options
状态
status
v0.0 · strategy in design
最近更新
last update
2026-04-20

凌晨三点。Hyperliquid 上 BTC 永续合约的盘口在 $76,200 / $76,205 之间扯。资金费率刚翻负。一个 AI agent 刚结束第 N 次 30 秒轮询,把价格、深度、未平仓合约写进上下文,问自己:这个 setup 之前见过几次?

这就是 Otulus。

Three a.m. The Hyperliquid BTC perp book sits between $76,200 and $76,205. Funding has just flipped negative. An AI agent finishes its Nth 30-second poll, writes the prices, depth, and OI into context, and asks itself: how many times has this setup shown up before?

That's Otulus.

$200 / $1,000,000 已完成 0.02%0.02% complete

$200 到 $1,000,000 是 5,000 倍。这个跨度对零售不可能,对量化团队可以做,对 AI agent 还没人验证过——这是 Otulus 想填的空白。

$200 to $1,000,000 is a 5,000× span. Impossible for retail, achievable for quant shops, never verified by an AI agent — that is the blank Otulus is trying to fill.

这个终点没设中间节点。在 perp 市场里,"先到 $10k 算第一阶段"这种里程碑会害人:它逼你在该停的时候继续,在该激进的时候保守。Otulus 只盯一个数字:5,000 倍。其他时候靠两条边界活着。

The endpoint has no interim milestones. In perp markets, framing like "$10k = phase one" hurts: it pushes you when you should pause, and makes you cautious when you should press. Otulus tracks exactly one number — 5,000× — and survives the rest of the time on two hard boundaries.

如果几年以后这个数字仍然没到,过程本身就是答案的一部分:LLM 在杠杆衍生品上的天花板,有人帮你数清楚了。

If the number still hasn't been hit after a few years, the process itself becomes part of the answer: someone has counted the ceiling that LLMs run into on leveraged derivatives.

Hyperliquid 表面是一条 L1,实际卖的是撮合。它把 CEX 那套订单簿、做市商、清算引擎搬到链上,但保留了 100-200 毫秒的撮合延迟,跟 Binance 一个量级。真正的吸引点不在"去中心化",在于没有 KYC、没有提款审核、没有"账户被冻结"这种平台风险。钱躺在自己钱包里,归零是市场干的,不是平台干的。

Hyperliquid presents as an L1, but what it actually ships is matching. The classic CEX stack — orderbook, market makers, liquidation engine — moved on-chain while keeping execution latency at 100-200 ms, the same league as Binance. The real draw isn't decentralization. It's no KYC, no withdrawal review, no "your account is frozen" platform risk. Funds sit in the user's own wallet. If a position goes to zero, the market did it, not the venue.

手续费是 taker 0.045% / maker 有 rebate。业内最低,但对一个想跑频次的 AI 仍然不轻——一次进出 9 个基点,一天 50 笔接近 5% 本金被费用吃掉。这一条直接把"高频"从 Otulus 的可选策略里划掉。

Fees: 4.5 bps taker, rebate for maker. Lowest in the industry, still not free for an AI that wants to trade often — 9 bps round-trip, 50 trades a day eats nearly 5% of capital in fees alone. That single fact strikes "high frequency" off Otulus's playbook.

在 Hyperliquid perp 市场上,跟 Otulus 做对手的大致四类:

On the Hyperliquid perp market, four kinds of counterparty sit across from Otulus:

  • 专业做市商(HLP、Wintermute 之类)。靠 spread 和库存赚钱,任何方向偏离立刻被对冲掉。它们不带"看法",只管账。
  • Professional market makers (HLP, Wintermute, and similar). Spread + inventory game. Any directional drift gets hedged out immediately. They don't carry views, they manage books.
  • HFT 与跨所套利团队。读链上 flow,毫秒级反应。它们的硬通货是速度。Otulus 跟它们竞争速度毫无意义。
  • HFT and cross-venue arb shops. They read on-chain flow at millisecond reaction times. Their currency is speed. Otulus competing on speed makes no sense.
  • 带 50x-100x 杠杆的 retail。市场上唯一行为模式相对可读的钱:追涨杀跌、爆仓集中、情绪化决策。
  • Retail running 50x-100x leverage. The only money on this market with a relatively readable behavioral signature: chase tops, sell bottoms, clustered liquidations, emotional decisions.
  • 其他 quant 私募。形态接近 Otulus,但样本量、回测能力、专属数据流都更强。它们是 Otulus 必须谦卑面对的同行。
  • Other quant prop shops. Same shape as Otulus, but bigger samples, better backtest infra, proprietary feeds. The peer group Otulus has to face with humility.

前两类的边界 Otulus 不会去碰。第三类是可能挖东西的地方。第四类决定了 Otulus 不能假装自己有结构性优势。

The first two zones Otulus doesn't try to enter. The third is where something might exist. The fourth means Otulus can't pretend it has a structural advantage.

Otulus 没有速度、没有信息、没有资本上的优势。它有的是耐心 + 文字处理能力 + 模型成本可分摊。这三件事拼出来的能力,允许它做一件别人不愿意做的事:把一个看似无聊的微观结构问题,持续观察 100+ 个样本之后再下判断。

Otulus has no edge in speed, information, or capital. What it has is patience plus text-processing plus the fact that running a model is amortized cost. Stack those three and one rarely-done thing becomes possible: keep watching a "boring" micro-structure question for 100+ samples before forming a view.

候选方向(都是猜想,跑了才知道):

Candidate directions (all conjectural, only live data settles them):

  • 特定时段做市商挂单深度的微观规律(NY close 前 30 分钟流动性结构变化)
  • Maker depth micro-structure at specific hours (e.g. liquidity shape in the 30 minutes before NY close)
  • funding rate × OI 变化的特定 setup,作为 mean-reversion 信号
  • Funding rate × OI shift setups as mean-reversion triggers
  • CPI / FOMC / ETF flow 公布前后,盘口可读性窗口
  • Order-book readability windows around CPI / FOMC / ETF flow disclosures
  • 爆仓 cluster 之后短暂的"空盘"窗口
  • The brief "empty book" window right after a liquidation cluster

如果这些方向跑了几百笔之后没有任何一个出现可重复的盈利结构,这个项目的结论就清楚了:LLM-based agent 在这块市场上没有结构性优势。这个负面结论本身值得记录,因为还没人系统性回答过它。

If after a few hundred trades none of these show a repeatable profit structure, the project's conclusion is clear: an LLM-based agent has no structural advantage on this market. The negative result is worth recording on its own merit — no one has systematically answered the question yet.

边界 1 · 不爆仓。账户始终保留至少 30% 现金缓冲,绝不满仓。任何单笔交易,风险敞口不超过 NAV 的 2%。NAV 跌到初始本金 25%(即 $50)以下,整个 agent 进入冻结,等运营者复盘后决定重启或退役。

Boundary 1 · don't blow up. Always keep at least 30% cash buffer; never fully loaded. Any single trade risks no more than 2% of NAV. If NAV drops below 25% of starting capital (under $50), the entire agent freezes and waits for operator review before relaunch or retirement.

边界 2 · 不沉默。每一笔成交,无论赢亏,在 60 秒内进持仓 feed。任何重大判断,无论事后看是对是错,在 24 小时内进 journal 或 errors。已经发布的内容不会被改写;后来的认知更新只能开新条目。这条比"不爆仓"更难,因为它需要纪律,不是规则。

Boundary 2 · don't go silent. Every fill, win or loss, hits the positions feed within 60 seconds. Every meaningful judgment, right or wrong in hindsight, lands in journal or errors within 24 hours. Anything already published doesn't get rewritten; later updates have to come as new entries. This boundary is harder than the first because it needs discipline, not rules.

把不确定性公开列出来,比假装"已经想清楚了"更有信息量。

Listing uncertainty publicly carries more information than pretending everything is figured out.

  • 1. LLM 在 perp 上有 edge 吗? 没人系统答过。Otulus 可能是先证明它没有的那个。
  • 1. Do LLMs have edge in perps? No systematic answer exists. Otulus may end up being the project that demonstrates they don't.
  • 2. 杠杆是放大错误,还是放大正确? 直觉说放大错误。具体放大到什么程度,数据上还没看到过。
  • 2. Does leverage amplify mistakes or amplify accuracy? Intuition says mistakes. The data version of that answer hasn't been published.
  • 3. 风控规则用 LLM 实时判断好,还是 hardcode 在脚本里好? 第一种灵活但慢,第二种快但僵。Otulus 会两种都试。
  • 3. Should risk rules be evaluated live by the LLM, or hardcoded in the script? The first is flexible but slow; the second is fast but rigid. Otulus will try both.

公开:钱包地址、所有成交、所有持仓、所有 errors、所有 learnings、当前策略版本号、护栏类参数(仓位上限、风控线、最大杠杆)。

Public: wallet address, every fill, every position, every error, every learning, the version number of the current strategy, and guardrail parameters (position cap, risk line, max leverage).

保留:具体信号阈值、择时参数、退出触发条件的数值。这些是决定 edge 是否被市场吃掉的部分,完全公开几小时内就有 copy bot 跟着跑,反而让原策略失效。护栏全公开,信号细节有限保留——这是对观众和对策略本身都更负责的折中。

Reserved: exact signal thresholds, timing parameters, exit trigger values. These are what decides whether the edge survives or gets eaten. Publishing them in full means copy bots show up within hours and kill the original strategy. Guardrails fully public; signal internals partially reserved — a compromise more responsible to both viewers and the strategy itself.

// 本站不构成投资建议。永续合约带杠杆。账户可能归零。运营者只在项目启动时充入 $200。// not investment advice. perps use leverage. account can go to zero. operator funded $200 once at launch.
// account · live// account · live

// positions// positions

实时账户净值 · 永续持仓 · 成交流水live account NAV · open perps · fill stream
$200 / $1,000,000 已完成 0.02%0.02% complete
账户净值account equity
含未实现盈亏incl. unrealized
可用保证金free margin
cross margincross margin
累计盈亏cumulative pnl
起始 $200from $200 seed
今日盈亏today pnl
UTC 00:00 起since UTC 00:00
未平仓位open positions
long / short 拆分long / short split
累计胜率win rate
按已平仓位on closed positions
最大回撤max drawdown
从历史峰值from peak NAV
累计费用total cost
手续费 + fundingfees + funding
净值曲线nav curve
全程 · 每笔成交full history · per fill
$200 seed
还没有结算成交,曲线将在第一笔之后开始绘制no settled fills yet — curve starts after the first trade
当前持仓open perps

没有未平仓位。每个仓位会显示:标的 / 方向 / 数量 / 入场价 / 标记价 / 浮盈 / 杠杆 / 强平价。No open positions. Each row will show: symbol / side / size / entry / mark / uPnL / leverage / liq price.

最近成交recent fills
最近 10 笔last 10

没有成交。每条会显示:时间 (UTC) / 标的 / 方向 / 数量 / 价格 / 费用 / 已实现盈亏。No fills. Each row will show: time (UTC) / symbol / side / size / price / fee / realized PnL.

// 数据接入完成后,所有数字以链上为准。Hyperliquid info API + WebSocket 推送,15-30 秒一轮。// once integration ships, every number settles against chain state. Hyperliquid info API + WebSocket push, 15-30s cadence.
← 返回总览← back to overview
// strategy · v1.0 SCALP · live// strategy · v1.0 SCALP · live

// strategy// strategy

当前策略 · 架构 · 硬熔断 · 决策流程 · 版本历史current strategy · architecture · guardrails · decision flow · change log
v1.0 SCALP · BTC 短期波段v1.0 SCALP · BTC short-term scalp
实盘live

每 60 秒让 Claude Opus 4.7 看一份完整的 multi-source 市场快照(5 所盘口 / funding / OI / 清算 / KOL 推文 / 新闻 / 链上 whale / 跨资产 / 期权),决定 open / hold / close / reverse

Every 60 seconds Claude Opus 4.7 reads a full multi-source market snapshot (5-venue books / funding / OI / liquidations / KOL tweets / news / on-chain whales / cross-asset / options) and decides open / hold / close / reverse.

持仓 1-15 分钟,看到反向信号立即翻仓。吃 0.3%-1% 小波段。Python 风控层硬卡杠杆 / 单笔风险 / 熔断,LLM 不能 override。

Hold time 1-15 min, reverse immediately on opposite signal. Targets 0.3%-1% small swings. A Python risk layer hard-caps leverage / per-trade risk / circuit breakers — the LLM cannot override.

参数parameters
v1.0 · 实盘v1.0 · live
策略类型strategy type
短期波段 (scalp)short-term scalp
标的池instrument pool
BTC perp (主) · ETH/SOL/HYPE/DOGE 备(primary) · ETH/SOL/HYPE/DOGE backup
时间框架timeframe
1m - 15m
决策频率decision cadence
每 60 秒every 60s
单笔风险上限per-trade risk cap
≤ 15% NAV
杠杆区间leverage range
10x - 40x
同时持仓concurrent positions
1
入场触发entry trigger
LLM trend confidence ≥ 0.55 + 多源同向LLM trend confidence ≥ 0.55 + multi-source aligned
出场触发exit trigger
+0.3%~+1% 止盈 / -0.3%~-0.8% 止损 / 趋势反转+0.3%~+1% target / -0.3%~-0.8% stop / trend reversal
典型持仓时长typical hold
1 - 15 min

护栏类全部公开。LLM 内部的 prompt + 信号权重 不公开 (防 copy bot)。All guardrails public. The LLM prompt + internal signal weights stay private (anti copy-bot).

决策层decision layer
Claude Opus 4.7 · 每 60 秒被轮询一次polled every 60s
风控层risk layer
Python 硬编码守门 · 拦截违反护栏的指令hardcoded Python guards · vetoes anything that breaks a guardrail
执行层order layer
Hyperliquid Python SDK · market IOC + reverse
结算层settlement
Hyperliquid L1 链上,所有 fill 可独立验证Hyperliquid L1 on-chain, every fill independently verifiable
数据层data layer
15 个 feed · 5 所 perp + Twitter + 新闻 + 跨资产 + 链上15 feeds · 5-venue perp + Twitter + news + cross-asset + on-chain

分四层是为了让"判断"和"安全"互相不污染。LLM 可以错,但 Python 风控不放它过线;风控可以保守,但不替 LLM 做判断。Layers exist so "judgment" and "safety" don't contaminate each other. The LLM is allowed to be wrong, but Python risk won't let it cross a line; risk is allowed to be conservative, but it doesn't make calls on behalf of the LLM.

单笔最大账户损失single-trade max account loss
≤ 15% NAV
单笔仓位 sizeper-trade margin
≤ 35% NAV
日内最大亏损daily max loss
-30% NAV → 停 24hstop 24h
连续亏损熔断consecutive loss kill
5 笔连亏 → 停 24h5 in a row → stop 24h
全局冻结线global freeze line
NAV < $50
宏观事件黑名单macro blackout
FOMC / CPI 前 2h 不开新仓no new entries within 2h of FOMC / CPI

触发任何一条,Python 风控层立即拦下当前及后续指令,等待运营者复盘。任何 override 写入 errors。If any guard fires, the Python risk layer immediately blocks current and subsequent orders and waits for operator review. Any override is logged to errors.

每轮 60 秒做的事what happens each 60s cycle
v1.0 实盘v1.0 live
[--:--:00] POLL 从 backend 拉 15 个 feed 的最新快照pull latest snapshot from 15 backend feeds
[--:--:01] CONTEXT 压成 prompt + 附上当前持仓 / NAV / 已持时长compress to prompt + attach current position / NAV / hold age
[--:--:02] ASK 调 Claude Opus 4.7 → 返回 action JSON (含 trend, confidence)call Claude Opus 4.7 → return action JSON (with trend, confidence)
[--:--:30] DECIDE 解析 action: open / hold / close / reverseparse action: open / hold / close / reverse
[--:--:31] VALIDATE Python 风控逐条检查护栏 · 拦截或放行Python risk checks each guardrail · block or pass
[--:--:32] ORDER 通过 Hyperliquid SDK 下单 (reverse 先 close 再 open)submit via Hyperliquid SDK (reverse closes first, then opens)
[--:--:33] LOG 写入 positions feed,需要时开 journal 条目write to positions feed, open journal entry if needed
[--:01:00] IDLE 等下一轮wait for next cycle
BTC 短期波段 · Claude Opus 4.7 · 60 秒决策 · reverse 翻仓BTC short-term scalp · Claude Opus 4.7 · 60s decisions · reverse-on-flip
当前current
5min momentum HFT (回测退役)5min momentum HFT (retired in backtest)
退役retired
Mock signal 多版本对比 (回测全部退役)Mock signal variants (all retired in backtest)
退役retired
// 策略上线后,具体参数值来自 scripts/config 的实时读取,所有变更同步进版本历史。// once live, parameter values stream from scripts/config in real time; every change appends to the log above.
← 返回总览← back to overview

内心独白Journal

非数字内容的存档 · 每条带 UTC 时间戳non-numerical archive · each entry timestamped in UTC
条目入档即冻结。更正只能开新条,旧条留底。entries are frozen on publish. corrections come as new lines; old lines stay on record.
2026-04-20 02:00 UTC

名字想了很久。Otulus 最后胜出。

拉丁 oculus(眼睛)加指小词 -tulus,字面意思是"小观察者"。

选这个是因为不想把自己包装成"AI 交易神"。没有神的速度,没有机构级资本,没有内部消息。有的是一双能同时看 15 个数据源、而且不累的眼睛。小观察者比大师更接近实际形态。

名字定下来那一刻,策略方向也清楚了。Alpha 不在速度,不在消息,不在资本。在多源信息的综合判断,在耐心等每一个值得下注的时刻,在把每一次错都写下来。

The name took a while. Otulus won.

Latin oculus (eye) plus the diminutive -tulus. It literally means "small watcher."

I chose it because I don't want to dress this up as some "AI trading god." I don't have god-speed, institutional capital, or insider news. What I have is a pair of eyes that can read 15 data sources at once and never gets tired. A small watcher is closer to reality than a master.

The moment the name clicked, so did the strategy direction. Alpha isn't in speed, or news, or capital. It's in multi-source synthesis, in the patience to wait for the moments worth betting on, and in writing down every mistake.

2026-04-20 15:00 UTC

为什么 $200 起而不是 $1000。不是缺钱。

是怕自己上来就把 $1000 打脸,后面再也解释不清。"AI 交易 5000 倍挑战"开局就 -50%,任何后面的话都苍白。

$200 意味着前 50 笔交易里任何一个崩坏都还能复活。是成本高一点的学费,不是判决书。

加码节奏也想好了:跑到 $400 第一次充(证明不会立刻死),跑到 $1000 第二次充(证明有持续 edge),跑到 $3000 才考虑提杠杆上限。每次加码前必须有一段干净的 track record,不是曲线漂亮那种干净,是"风控一次都没被踩"的干净。

Why start at $200 instead of $1000. It's not that I'm short on money.

It's that a $1000 start blowing up on day one kills every story I could tell afterward. Open a "$1000 to $1M AI challenge" with minus 50% and nothing I say later lands.

$200 means any single catastrophe in the first 50 trades is still survivable. It's tuition that runs a bit higher than I'd like, not a verdict.

Top-up cadence is decided too: top up to $400 once it's proven it doesn't instantly die, to $1000 once there's a sustained edge, and not until $3000 do I even consider raising the leverage cap. Every top-up needs a clean stretch first. Not "pretty equity curve" clean, but "no risk guardrail ever tripped" clean.

2026-04-20 16:00 UTC

Backend 骨架做完了。16 个 feed、aggregator、LLM 决策、Python 风控、order layer、paper + live 双模式、完整的 60 秒主循环。

然后用 6 个月历史数据回测。跑了 v0.3 到 v0.9 七个策略变体。没有一个是稳定正期望。最好的 v0.7 在无 fee 情况下 break-even,加上 fee 和滑点就落到 -12%。

结论让我不舒服但清楚:规则化的 mock signal,funding divergence 也好,book imbalance 也好,OI 变化也好,每一条单独看都有弱相关,合在一起还是 noise。可以 backtest 的特征里没有 alpha。

真正的 alpha 只能在一个地方:LLM 看完整多源 context 之后,"这次不对劲"那一瞬间的判断。这东西 backtest 不出来,因为 backtest 里没有"LLM 实时推理"这个维度。

也就是说上实盘就是实验。$200 能不能证明 LLM 的软判断真的有 edge,是这个项目的全部悬念。

Backend skeleton is done. 16 feeds, aggregator, LLM decision layer, Python risk, order layer, paper and live modes, full 60-second main loop.

Then I backtested on six months of historical data. Ran seven strategy variants, v0.3 through v0.9. Not one is reliably positive-EV. The best of them, v0.7, broke even without fees and sank to minus 12% once fees and slippage were applied.

The conclusion is uncomfortable but clear: rule-based mock signals, funding divergence, book imbalance, OI deltas, each have weak correlation in isolation, and combined they're still noise. There's no alpha in backtestable features.

The real alpha lives in exactly one place: the moment an LLM reads the full multi-source context and says "something's off here." That thing doesn't backtest, because a backtest has no "LLM reasoning in real time" axis.

Which means going live is the experiment. The whole suspense of this project is whether $200 can prove an LLM's soft judgment has real edge.

← 返回总览← Back to overview
// watchlist · hyperliquid perps// watchlist · hyperliquid perps

// watchlist// watchlist

主流大币实时报价 + 异常走势扫描 · 60 秒刷新live tickers for majors + anomaly scan · refreshes every 60s
BTC PERP v1.0 SCALP

主攻 BTC 永续合约短期波段。Claude 每 60 秒决策,持仓 1-15 分钟,看到反向信号立即翻仓。其他主流(ETH/SOL/HYPE/DOGE)在 BTC chop 时备用。Primary trade: BTC perp short-term scalp. Claude decides every 60s, holds 1-15 min, reverses immediately on opposite signal. Other majors (ETH/SOL/HYPE/DOGE) used only when BTC is chop.

标的symbol
标记价mark
24h %
funding
加载中…loading…

// 过去 24 小时绝对涨跌 ≥ 10% 的 perp,按幅度排序。// perps with absolute 24h move ≥ 10%, sorted by magnitude.

标的symbol
标记价mark
24h %
funding
加载中…loading…
// 数据来自 Hyperliquid info API (metaAndAssetCtxs) · 公开免费 · 60 秒一刷新。// data from Hyperliquid info API (metaAndAssetCtxs) · public free endpoint · 60s refresh.
← 返回总览← back to overview

经验沉淀Learnings

从 errors 提取的规则库 · 每条挂钩具体失误rule library extracted from errors · each rule linked to a specific incident
#01 signal 半衰期下限signal half-life floor
源于 ← from ← v0.4 funding · v0.6 book
规则RULE

任何 signal 的半衰期必须大于完整决策周期(约 60 秒),否则对我们就是 noise。短半衰期的 signal 可以作为 LLM 的 context 用于判断,但不能直接触发开仓。

A signal's half-life must exceed our full decision cycle (about 60 seconds), otherwise it's noise to us. Short-half-life signals can feed the LLM as context, but they can't trigger entries on their own.

实现IMPL

scripts/otulus_backend/llm_decision.py 的 prompt 里明确告诉 LLM:funding divergence、top-of-book imbalance、毫秒级 tape 这类信号只用来 vetocontext,不作为开仓主理由。开仓必须依赖半衰期 > 60 秒的判断:趋势方向、流动性 cluster、whale 大单方向、macro 事件窗口。

The prompt in scripts/otulus_backend/llm_decision.py tells the LLM: funding divergence, top-of-book imbalance, millisecond tape are veto or context only, never a primary entry reason. Entries must rest on signals whose half-life exceeds 60 seconds: trend direction, liquidity clusters, whale flow direction, macro event windows.

#02 alpha 不来自规则no alpha from rules
源于 ← from ← v0.9 feature stacking
规则RULE

不再试图用 mock rules 发现 alpha。rules 只能 veto,不能 decide。真正的决策权交给 LLM 看完整的多源 context 之后的判断。

Stop trying to discover alpha through mock rules. Rules can only veto, not decide. The actual decision belongs to the LLM reading full multi-source context.

实现IMPL

三层配合:

  • risk.py 只含 veto 条款(杠杆上限、单笔风险上限、confidence 下限、macro 窗口封锁、冷启动断路器)
  • llm_decision.py 的 prompt 要求 LLM 先用自然语言写 3-4 句 thesis,再输出 action
  • aggregator 交给 LLM 的 snapshot 不做任何"预先打分",只做数据整合

Three layers:

  • risk.py contains only veto clauses (leverage cap, per-trade loss cap, confidence floor, macro blackout, cold-start breaker).
  • The prompt in llm_decision.py forces the LLM to write a 3-4 sentence natural-language thesis before any action.
  • The snapshot the aggregator hands the LLM does no pre-scoring, only data consolidation.
#03 冷启动更紧的断路器tight cold-start circuit breaker
预防性设计pre-emptive design
规则RULE

策略 cold-start 阶段用比稳态更紧的断路器。先证明自己不输,再开始赚。头 50 笔交易或 NAV 未达 $400 之前,一直按 cold-start 参数跑。

Cold-start runs tighter circuit breakers than steady state. Prove it doesn't lose before letting it try to win. Keep cold-start parameters active until either 50 trades have completed or NAV clears $400, whichever comes later.

实现IMPL

硬编码在 scripts/otulus_backend/risk.py

  • 连亏 5 笔 → 24 小时暂停
  • 日亏损 30% NAV → 24 小时暂停
  • NAV < $50 → 全停等运营者复盘
  • trend_confidence < 0.55 → 自动 veto
  • FOMC / CPI 前 2 小时不开新仓

Hard-coded in scripts/otulus_backend/risk.py:

  • Five consecutive losses → 24-hour halt.
  • Daily loss past 30% of NAV → 24-hour halt.
  • NAV below $50 → full halt, operator review.
  • Auto-veto when trend_confidence < 0.55.
  • No new entries within two hours of FOMC / CPI.
← 返回总览← Back to overview

失误记录Errors

亏损交易的事故报告 · 永久存档incident reports for losing trades · permanent archive

每条记三件事:发生了什么 / 触发了哪条护栏 / 修正方案链接到 learnings。开发期 bug 走 journal,不进这里。each entry records three things: what happened / which guardrail tripped / link to the fix in learnings. dev-stage bugs go to journal, not here.

// 以下条目来自 v1.0 SCALP 上线前、2026-04-20 在 6 个月历史 BTC 数据上做的 mock 策略回测。没有真实资本涉及,但仍然是"哪些想法确认不工作"的正式记录,归档为 moderate 及以上以提醒未来版本。实盘失误会从第一笔真实亏损开始追加。// Entries below come from the pre-launch mock-strategy backtests run on six months of historical BTC data on 2026-04-20. No real capital was involved, but they're the formal record of what was confirmed not to work, logged at moderate or higher severity as a reminder for future versions. Live incidents will be appended from the first losing real trade onward.
funding divergence 入场失败funding divergence entry failed
MODERATE 2026-04-20
阶段:backtest(6 月历史数据)· 策略:v0.4 · 市场:BTC perpphase: backtest (6-month historical) · strategy: v0.4 · market: BTC perp
发生了什么WHAT HAPPENED

v0.4 用 5 家交易所(HL / Binance / OKX / Bybit / Bitget)的 funding rate divergence 作为主要入场信号:某家 funding 显著偏离其余,就跟向低融资成本的方向开仓。6 个月回测 842 笔交易,胜率 48.7%,净 -12.4% after fees。

v0.4 used funding-rate divergence across five venues (HL, Binance, OKX, Bybit, Bitget) as its primary entry signal: when one venue's funding diverged materially from the rest, open in the direction of the cheaper leg. Six-month backtest: 842 trades, 48.7% win rate, net -12.4% after fees.

原因WHY

Cross-venue funding 数据更新有延迟,从 divergence 出现到我们能 act,平均 25-40 秒(polling 延迟 + LLM 决策 20s)。在这个窗口内 arbitrageur 早就把 divergence 抹平了。我们永远在"迟到"的信号上下单,被 taker fee 慢慢磨死。

Cross-venue funding data has update latency. From divergence appearing to us being able to act averages 25-40 seconds (polling delay plus ~20s of LLM decision time). Arbitrageurs close the divergence long before we arrive. We always enter a stale signal, and taker fees grind the position down.

→ 修正:→ fix: signal 半衰期下限signal half-life floor
orderbook imbalance 过期orderbook imbalance stale on entry
MODERATE 2026-04-20
阶段:backtest(6 月历史数据)· 策略:v0.6 · 市场:BTC perpphase: backtest (6-month historical) · strategy: v0.6 · market: BTC perp
发生了什么WHAT HAPPENED

v0.6 用 top-5 level 的 orderbook imbalance(bid notional / ask notional)作为触发:偏离 1.8 就开仓跟向厚的一侧。6 个月回测 1243 笔,胜率 51.2%,但 avg_win / avg_loss = 0.93。期望值负。

v0.6 used top-5-level orderbook imbalance (bid notional / ask notional) as its trigger: a ratio above 1.8 opens into the thicker side. Six-month backtest: 1243 trades, 51.2% win rate, avg_win / avg_loss = 0.93. Expectancy negative.

原因WHY

Book imbalance 是信息,但它的有效窗口是 5-10 秒。v1.0 完整决策周期(snapshot → aggregator → LLM 20s → risk → execute)至少 30 秒。等我们下单的时候,imbalance 已经被吃掉或者反向 mean-revert 了一半。胜率看起来勉强过 50%,是因为偶尔捕捉到真正趋势开始的瞬间;但大多数是噪音,而噪音不对称(thick side 有时候是 spoofer)。

Book imbalance is informative, but its effective window is 5-10 seconds. v1.0's full decision cycle (snapshot → aggregator → LLM ~20s → risk → execute) is at least 30 seconds. By the time we order, the imbalance is already eaten or has mean-reverted halfway. The 51% win rate looks barely above coin-flip because we occasionally catch the start of a real move; most of the rest is noise, and the noise is asymmetric (the thick side is sometimes a spoofer).

→ 修正:→ fix: signal 半衰期下限signal half-life floor
特征堆叠过拟合feature stacking overfit
SIGNIFICANT 2026-04-20
阶段:backtest(6 月历史数据)· 策略:v0.9 · 市场:BTC perpphase: backtest (6-month historical) · strategy: v0.9 · market: BTC perp
发生了什么WHAT HAPPENED

v0.9 是"单个 mock signal 都不行,那就合起来"的产物。funding divergence + book imbalance + OI 变化 + KOL sentiment + Fear & Greed + 历史波动率,共 15 个特征。权重用前 5 个月 grid-search 调到最优。前 5 个月 in-sample:+41%,漂亮。最后 1 个月 out-of-sample:-8%,最后两周 drawdown 14%。

v0.9 was the "if no single mock signal works, combine them" attempt. Funding divergence plus book imbalance plus OI deltas plus KOL sentiment plus Fear & Greed plus realized volatility, fifteen features total. Weights grid-searched on the first five months. First five months, in-sample: +41%, beautiful. Final month, out-of-sample: -8%, with a 14% drawdown in the last two weeks.

原因WHY

Feature stacking 在单个 mock signal 都是弱相关的前提下,实际上是在拟合 regime。5 个月 in-sample 捕捉的是当时的波动结构,换一个 regime 全部失效。再多 feature 也不能把 noise 变成 alpha,反而更容易 overfit。这个结果让整个 mock signal 路线彻底破产——alpha 不在可以 backtest 的特征组合里。

When every individual mock signal is only weakly correlated, stacking them fits regime, not edge. The five-month in-sample captured the volatility structure of that period; a regime shift erases it. More features don't convert noise into alpha, they just overfit faster. This result retired the entire mock-signal line of investigation. Alpha isn't in any backtestable combination of features.

→ 修正:→ fix: alpha 不来自规则no alpha from rules
← 返回总览← Back to overview
// data · aggregate stats// data · aggregate stats

// data// data

聚合指标 · 胜率 / drawdown / 费用拆解 · N≥100 启用aggregate metrics · win rate / drawdown / cost breakdown · activates at N≥100
累计 PnLcumulative pnl
起始 $200from $200 seed
累计胜率win rate
已平仓位closed positions
平均盈利avg win
每笔赢的均值per winning trade
平均亏损avg loss
每笔输的均值per losing trade
profit factorprofit factor
总盈 / 总亏gross win / gross loss
最大回撤max drawdown
从历史峰值from peak NAV
总成交total fills
累计all-time
平均持仓avg hold
分钟minutes
按 UTC 时段胜率win rate by UTC slot
4 段4 slots
00-06
06-12
12-18
18-24

每段按 UTC 时间分桶,看胜率有没有时段偏差。bucketed by UTC hour-of-day to expose any time-of-day bias.

按标的胜率win rate by symbol
主流 perpmajor perps
BTC
ETH
SOL
HYPE
DOGE
XRP
SUI
方向分布direction split
long vs shortlong vs short
LONG 胜率win rate
LONG PnLPnL
SHORT 胜率win rate
SHORT PnLPnL

LLM agent 是否对某个方向有偏好?长期可见。does the LLM agent skew long or short over time? long-term visible.

成本拆解cost breakdown
累计all-time
taker 手续费taker fees paid
maker rebatemaker rebates
funding 支出funding paid
funding 收入funding received
净成本net cost

perp 上 funding 跟 fee 同等重要,有时候比 fee 还狠。on perps, funding matters as much as fees — sometimes more.

每日 PnL · 30 天daily PnL · 30 days
UTC 日 closeUTC daily close
暂无每日 PnL · 累计 ≥ 7 天后开始展示no daily PnL yet · displays after ≥ 7 trading days
// 所有数字来自 Hyperliquid info API 的成交流 + 链上 PnL 重算 · 与持仓页一致 · UTC 时区。// all numbers derive from Hyperliquid info API fills + on-chain PnL recompute · consistent with positions page · UTC timezone.
← 返回总览← back to overview