clodds 1.2.9 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/skills/bundled/acp/SKILL.md +188 -0
- package/dist/skills/bundled/acp/index.d.ts +0 -3
- package/dist/skills/bundled/acp/index.js +1 -1
- package/dist/skills/bundled/acp/index.js.map +1 -1
- package/dist/skills/bundled/agentbets/SKILL.md +19 -0
- package/dist/skills/bundled/agentbets/index.js +1 -1
- package/dist/skills/bundled/agentbets/index.js.map +1 -1
- package/dist/skills/bundled/ai-strategy/SKILL.md +111 -0
- package/dist/skills/bundled/ai-strategy/index.js +1 -1
- package/dist/skills/bundled/ai-strategy/index.js.map +1 -1
- package/dist/skills/bundled/alerts/SKILL.md +87 -0
- package/dist/skills/bundled/analytics/SKILL.md +252 -0
- package/dist/skills/bundled/analytics/index.js +2 -2
- package/dist/skills/bundled/analytics/index.js.map +1 -1
- package/dist/skills/bundled/arbitrage/SKILL.md +287 -0
- package/dist/skills/bundled/arbitrage/index.js +6 -1
- package/dist/skills/bundled/arbitrage/index.js.map +1 -1
- package/dist/skills/bundled/auto-reply/SKILL.md +285 -0
- package/dist/skills/bundled/auto-reply/index.js +2 -2
- package/dist/skills/bundled/auto-reply/index.js.map +1 -1
- package/dist/skills/bundled/automation/SKILL.md +242 -0
- package/dist/skills/bundled/automation/index.js +2 -2
- package/dist/skills/bundled/automation/index.js.map +1 -1
- package/dist/skills/bundled/backtest/SKILL.md +225 -0
- package/dist/skills/bundled/bags/SKILL.md +131 -0
- package/dist/skills/bundled/bankr/SKILL.md +114 -0
- package/dist/skills/bundled/betfair/SKILL.md +113 -0
- package/dist/skills/bundled/binance-futures/SKILL.md +84 -0
- package/dist/skills/bundled/binance-futures/index.d.ts +0 -3
- package/dist/skills/bundled/binance-futures/index.js +1 -2
- package/dist/skills/bundled/binance-futures/index.js.map +1 -1
- package/dist/skills/bundled/botchan/SKILL.md +66 -0
- package/dist/skills/bundled/botchan/index.d.ts +0 -3
- package/dist/skills/bundled/botchan/index.js +0 -1
- package/dist/skills/bundled/botchan/index.js.map +1 -1
- package/dist/skills/bundled/bridge/SKILL.md +215 -0
- package/dist/skills/bundled/bridge/index.js +6 -0
- package/dist/skills/bundled/bridge/index.js.map +1 -1
- package/dist/skills/bundled/bybit-futures/SKILL.md +84 -0
- package/dist/skills/bundled/bybit-futures/index.d.ts +0 -3
- package/dist/skills/bundled/bybit-futures/index.js +0 -1
- package/dist/skills/bundled/bybit-futures/index.js.map +1 -1
- package/dist/skills/bundled/clanker/SKILL.md +125 -0
- package/dist/skills/bundled/clanker/index.d.ts +0 -3
- package/dist/skills/bundled/clanker/index.js +0 -1
- package/dist/skills/bundled/clanker/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading/SKILL.md +285 -0
- package/dist/skills/bundled/copy-trading/index.js +15 -8
- package/dist/skills/bundled/copy-trading/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading-solana/SKILL.md +66 -0
- package/dist/skills/bundled/credentials/SKILL.md +261 -0
- package/dist/skills/bundled/credentials/index.js +4 -0
- package/dist/skills/bundled/credentials/index.js.map +1 -1
- package/dist/skills/bundled/crypto-hft/SKILL.md +121 -0
- package/dist/skills/bundled/crypto-hft/index.js +18 -3
- package/dist/skills/bundled/crypto-hft/index.js.map +1 -1
- package/dist/skills/bundled/dca/SKILL.md +27 -0
- package/dist/skills/bundled/dex/SKILL.md +92 -0
- package/dist/skills/bundled/dex/index.js +77 -29
- package/dist/skills/bundled/dex/index.js.map +1 -1
- package/dist/skills/bundled/divergence/SKILL.md +83 -0
- package/dist/skills/bundled/doctor/SKILL.md +267 -0
- package/dist/skills/bundled/doctor/index.js +2 -8
- package/dist/skills/bundled/doctor/index.js.map +1 -1
- package/dist/skills/bundled/drift/SKILL.md +53 -0
- package/dist/skills/bundled/drift-sdk/SKILL.md +103 -0
- package/dist/skills/bundled/drift-sdk/index.d.ts +0 -3
- package/dist/skills/bundled/drift-sdk/index.js +0 -1
- package/dist/skills/bundled/drift-sdk/index.js.map +1 -1
- package/dist/skills/bundled/edge/SKILL.md +84 -0
- package/dist/skills/bundled/embeddings/SKILL.md +244 -0
- package/dist/skills/bundled/endaoment/SKILL.md +65 -0
- package/dist/skills/bundled/endaoment/index.d.ts +0 -3
- package/dist/skills/bundled/endaoment/index.js +0 -1
- package/dist/skills/bundled/endaoment/index.js.map +1 -1
- package/dist/skills/bundled/ens/SKILL.md +63 -0
- package/dist/skills/bundled/ens/index.d.ts +0 -3
- package/dist/skills/bundled/ens/index.js +0 -1
- package/dist/skills/bundled/ens/index.js.map +1 -1
- package/dist/skills/bundled/erc8004/SKILL.md +79 -0
- package/dist/skills/bundled/erc8004/index.d.ts +0 -3
- package/dist/skills/bundled/erc8004/index.js +0 -1
- package/dist/skills/bundled/erc8004/index.js.map +1 -1
- package/dist/skills/bundled/execution/SKILL.md +278 -0
- package/dist/skills/bundled/farcaster/SKILL.md +80 -0
- package/dist/skills/bundled/farcaster/index.js +12 -0
- package/dist/skills/bundled/farcaster/index.js.map +1 -1
- package/dist/skills/bundled/features/SKILL.md +20 -0
- package/dist/skills/bundled/feeds/SKILL.md +288 -0
- package/dist/skills/bundled/harden/SKILL.md +74 -0
- package/dist/skills/bundled/history/SKILL.md +257 -0
- package/dist/skills/bundled/hyperliquid/SKILL.md +200 -0
- package/dist/skills/bundled/hyperliquid/index.d.ts +0 -3
- package/dist/skills/bundled/hyperliquid/index.js +0 -1
- package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
- package/dist/skills/bundled/identity/SKILL.md +228 -0
- package/dist/skills/bundled/identity/index.js +2 -2
- package/dist/skills/bundled/identity/index.js.map +1 -1
- package/dist/skills/bundled/integrations/SKILL.md +321 -0
- package/dist/skills/bundled/integrations/index.js +2 -2
- package/dist/skills/bundled/integrations/index.js.map +1 -1
- package/dist/skills/bundled/jupiter/SKILL.md +163 -0
- package/dist/skills/bundled/jupiter/index.js +2 -2
- package/dist/skills/bundled/kamino/SKILL.md +69 -0
- package/dist/skills/bundled/ledger/SKILL.md +20 -0
- package/dist/skills/bundled/lighter/SKILL.md +83 -0
- package/dist/skills/bundled/lighter/index.d.ts +0 -3
- package/dist/skills/bundled/lighter/index.js +0 -1
- package/dist/skills/bundled/lighter/index.js.map +1 -1
- package/dist/skills/bundled/marginfi/SKILL.md +62 -0
- package/dist/skills/bundled/market-index/SKILL.md +242 -0
- package/dist/skills/bundled/market-index/index.js +1 -3
- package/dist/skills/bundled/market-index/index.js.map +1 -1
- package/dist/skills/bundled/markets/SKILL.md +49 -0
- package/dist/skills/bundled/mcp/SKILL.md +235 -0
- package/dist/skills/bundled/mcp/index.js +1 -3
- package/dist/skills/bundled/mcp/index.js.map +1 -1
- package/dist/skills/bundled/memory/SKILL.md +209 -0
- package/dist/skills/bundled/metaculus/SKILL.md +62 -0
- package/dist/skills/bundled/metaculus/index.js +4 -1
- package/dist/skills/bundled/metaculus/index.js.map +1 -1
- package/dist/skills/bundled/meteora/SKILL.md +28 -0
- package/dist/skills/bundled/meteora-dbc/SKILL.md +25 -0
- package/dist/skills/bundled/metrics/SKILL.md +338 -0
- package/dist/skills/bundled/mev/SKILL.md +239 -0
- package/dist/skills/bundled/mev/index.js +2 -2
- package/dist/skills/bundled/mev/index.js.map +1 -1
- package/dist/skills/bundled/mexc-futures/SKILL.md +86 -0
- package/dist/skills/bundled/mexc-futures/index.d.ts +0 -3
- package/dist/skills/bundled/mexc-futures/index.js +0 -1
- package/dist/skills/bundled/mexc-futures/index.js.map +1 -1
- package/dist/skills/bundled/mm/SKILL.md +142 -0
- package/dist/skills/bundled/mm/index.js +28 -27
- package/dist/skills/bundled/mm/index.js.map +1 -1
- package/dist/skills/bundled/monitoring/SKILL.md +249 -0
- package/dist/skills/bundled/news/SKILL.md +95 -0
- package/dist/skills/bundled/news/index.js +1 -2
- package/dist/skills/bundled/news/index.js.map +1 -1
- package/dist/skills/bundled/onchainkit/SKILL.md +83 -0
- package/dist/skills/bundled/opinion/SKILL.md +87 -0
- package/dist/skills/bundled/opportunity/SKILL.md +308 -0
- package/dist/skills/bundled/orca/SKILL.md +28 -0
- package/dist/skills/bundled/orca/index.js +11 -7
- package/dist/skills/bundled/orca/index.js.map +1 -1
- package/dist/skills/bundled/pairing/SKILL.md +275 -0
- package/dist/skills/bundled/pancakeswap/SKILL.md +93 -0
- package/dist/skills/bundled/pancakeswap/index.d.ts +0 -3
- package/dist/skills/bundled/pancakeswap/index.js +0 -1
- package/dist/skills/bundled/pancakeswap/index.js.map +1 -1
- package/dist/skills/bundled/percolator/SKILL.md +22 -0
- package/dist/skills/bundled/permissions/SKILL.md +269 -0
- package/dist/skills/bundled/permissions/index.js +2 -2
- package/dist/skills/bundled/permissions/index.js.map +1 -1
- package/dist/skills/bundled/plugins/SKILL.md +263 -0
- package/dist/skills/bundled/plugins/index.js +2 -2
- package/dist/skills/bundled/plugins/index.js.map +1 -1
- package/dist/skills/bundled/portfolio/SKILL.md +161 -0
- package/dist/skills/bundled/portfolio/index.js +1 -1
- package/dist/skills/bundled/portfolio/index.js.map +1 -1
- package/dist/skills/bundled/portfolio-sync/SKILL.md +466 -0
- package/dist/skills/bundled/positions/SKILL.md +262 -0
- package/dist/skills/bundled/predictfun/SKILL.md +109 -0
- package/dist/skills/bundled/predictfun/index.js +1 -1
- package/dist/skills/bundled/predictfun/index.js.map +1 -1
- package/dist/skills/bundled/predictit/SKILL.md +66 -0
- package/dist/skills/bundled/predictit/index.js +4 -1
- package/dist/skills/bundled/predictit/index.js.map +1 -1
- package/dist/skills/bundled/presence/SKILL.md +217 -0
- package/dist/skills/bundled/presence/index.js +2 -2
- package/dist/skills/bundled/presence/index.js.map +1 -1
- package/dist/skills/bundled/processes/SKILL.md +254 -0
- package/dist/skills/bundled/pump-swarm/SKILL.md +309 -0
- package/dist/skills/bundled/pumpfun/SKILL.md +145 -0
- package/dist/skills/bundled/pumpfun/index.js +82 -8
- package/dist/skills/bundled/pumpfun/index.js.map +1 -1
- package/dist/skills/bundled/qmd/SKILL.md +129 -0
- package/dist/skills/bundled/qrcoin/SKILL.md +60 -0
- package/dist/skills/bundled/qrcoin/index.d.ts +0 -3
- package/dist/skills/bundled/qrcoin/index.js +0 -1
- package/dist/skills/bundled/qrcoin/index.js.map +1 -1
- package/dist/skills/bundled/raydium/SKILL.md +198 -0
- package/dist/skills/bundled/remote/SKILL.md +201 -0
- package/dist/skills/bundled/research/SKILL.md +83 -0
- package/dist/skills/bundled/research/index.js +2 -2
- package/dist/skills/bundled/research/index.js.map +1 -1
- package/dist/skills/bundled/risk/SKILL.md +323 -0
- package/dist/skills/bundled/router/SKILL.md +233 -0
- package/dist/skills/bundled/routing/SKILL.md +258 -0
- package/dist/skills/bundled/sandbox/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/index.js +2 -2
- package/dist/skills/bundled/search-config/index.js.map +1 -1
- package/dist/skills/bundled/sessions/SKILL.md +251 -0
- package/dist/skills/bundled/sessions/index.js +1 -1
- package/dist/skills/bundled/sessions/index.js.map +1 -1
- package/dist/skills/bundled/setup/SKILL.md +53 -0
- package/dist/skills/bundled/shield/SKILL.md +21 -0
- package/dist/skills/bundled/signals/SKILL.md +106 -0
- package/dist/skills/bundled/signals/index.d.ts +0 -3
- package/dist/skills/bundled/signals/index.js +3 -4
- package/dist/skills/bundled/signals/index.js.map +1 -1
- package/dist/skills/bundled/sizing/SKILL.md +238 -0
- package/dist/skills/bundled/slippage/SKILL.md +306 -0
- package/dist/skills/bundled/smarkets/SKILL.md +107 -0
- package/dist/skills/bundled/smarkets/index.js +3 -3
- package/dist/skills/bundled/smarkets/index.js.map +1 -1
- package/dist/skills/bundled/solend/SKILL.md +63 -0
- package/dist/skills/bundled/strategy/SKILL.md +266 -0
- package/dist/skills/bundled/streaming/SKILL.md +150 -0
- package/dist/skills/bundled/streaming/index.js +2 -2
- package/dist/skills/bundled/streaming/index.js.map +1 -1
- package/dist/skills/bundled/tailscale/SKILL.md +249 -0
- package/dist/skills/bundled/tailscale/index.js +2 -2
- package/dist/skills/bundled/tailscale/index.js.map +1 -1
- package/dist/skills/bundled/ticks/SKILL.md +61 -0
- package/dist/skills/bundled/token-security/SKILL.md +18 -0
- package/dist/skills/bundled/trading-evm/SKILL.md +329 -0
- package/dist/skills/bundled/trading-futures/SKILL.md +865 -0
- package/dist/skills/bundled/trading-kalshi/SKILL.md +629 -0
- package/dist/skills/bundled/trading-kalshi/index.js +2 -0
- package/dist/skills/bundled/trading-kalshi/index.js.map +1 -1
- package/dist/skills/bundled/trading-manifold/SKILL.md +387 -0
- package/dist/skills/bundled/trading-polymarket/SKILL.md +1080 -0
- package/dist/skills/bundled/trading-polymarket/index.js +28 -19
- package/dist/skills/bundled/trading-polymarket/index.js.map +1 -1
- package/dist/skills/bundled/trading-solana/SKILL.md +418 -0
- package/dist/skills/bundled/trading-solana/index.js +1 -1
- package/dist/skills/bundled/trading-solana/index.js.map +1 -1
- package/dist/skills/bundled/trading-system/SKILL.md +290 -0
- package/dist/skills/bundled/triggers/SKILL.md +433 -0
- package/dist/skills/bundled/tts/SKILL.md +220 -0
- package/dist/skills/bundled/tweet-ideas/SKILL.md +77 -0
- package/dist/skills/bundled/usage/SKILL.md +239 -0
- package/dist/skills/bundled/usage/index.js +2 -2
- package/dist/skills/bundled/usage/index.js.map +1 -1
- package/dist/skills/bundled/veil/SKILL.md +76 -0
- package/dist/skills/bundled/veil/index.d.ts +0 -3
- package/dist/skills/bundled/veil/index.js +0 -1
- package/dist/skills/bundled/veil/index.js.map +1 -1
- package/dist/skills/bundled/verify/SKILL.md +199 -0
- package/dist/skills/bundled/verify/index.d.ts +0 -3
- package/dist/skills/bundled/verify/index.js +0 -1
- package/dist/skills/bundled/verify/index.js.map +1 -1
- package/dist/skills/bundled/virtuals/SKILL.md +82 -0
- package/dist/skills/bundled/voice/SKILL.md +217 -0
- package/dist/skills/bundled/voice/index.js +2 -2
- package/dist/skills/bundled/voice/index.js.map +1 -1
- package/dist/skills/bundled/weather/SKILL.md +80 -0
- package/dist/skills/bundled/weather/index.js +3 -0
- package/dist/skills/bundled/weather/index.js.map +1 -1
- package/dist/skills/bundled/webhooks/SKILL.md +297 -0
- package/dist/skills/bundled/webhooks/index.js +2 -2
- package/dist/skills/bundled/webhooks/index.js.map +1 -1
- package/dist/skills/bundled/whale-tracking/SKILL.md +287 -0
- package/dist/skills/bundled/whale-tracking/index.js +2 -2
- package/dist/skills/bundled/whale-tracking/index.js.map +1 -1
- package/dist/skills/bundled/yoink/SKILL.md +54 -0
- package/dist/skills/bundled/yoink/index.d.ts +0 -3
- package/dist/skills/bundled/yoink/index.js +0 -1
- package/dist/skills/bundled/yoink/index.js.map +1 -1
- package/dist/skills/executor.js +5 -3
- package/dist/skills/executor.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: risk
|
|
3
|
+
description: "Unified risk engine with VaR, stress testing, volatility regimes, and automated controls"
|
|
4
|
+
emoji: "🛑"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Risk - Complete API Reference
|
|
8
|
+
|
|
9
|
+
Full risk management engine: circuit breakers, loss limits, Value-at-Risk, volatility regime detection, stress testing, and kill switches.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Chat Commands
|
|
14
|
+
|
|
15
|
+
### View Risk Status
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/risk Current risk status
|
|
19
|
+
/risk status Detailed status with portfolio metrics
|
|
20
|
+
/risk limits View all limits
|
|
21
|
+
/risk dashboard Real-time risk metrics (VaR, regime, HHI, etc.)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Risk Analytics
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/risk var Value-at-Risk and CVaR numbers
|
|
28
|
+
/risk regime Current volatility regime and size multiplier
|
|
29
|
+
/risk stress [scenario] Run stress test (flash_crash, black_swan, etc.)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Available stress scenarios:** `flash_crash`, `liquidity_crunch`, `platform_down`, `correlation_spike`, `black_swan`
|
|
33
|
+
|
|
34
|
+
### Configure Limits
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
/risk set max-loss 1000 Max daily loss ($)
|
|
38
|
+
/risk set max-loss-pct 10 Max daily loss (%)
|
|
39
|
+
/risk set max-drawdown 20 Max drawdown (%)
|
|
40
|
+
/risk set max-position 25 Max single position (%)
|
|
41
|
+
/risk set max-trades 50 Max trades per day
|
|
42
|
+
/risk set consecutive-losses 5 Stop after N losses
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Circuit Breaker
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
/risk trip "manual stop" Manually trip breaker
|
|
49
|
+
/risk reset Reset after cooldown
|
|
50
|
+
/risk kill Emergency stop all trading
|
|
51
|
+
/risk check 500 Check if a $500 trade is allowed
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## TypeScript API Reference
|
|
57
|
+
|
|
58
|
+
### Unified Risk Engine
|
|
59
|
+
|
|
60
|
+
The risk engine is the single entry point for all pre-trade validation. It orchestrates 10 checks in order:
|
|
61
|
+
|
|
62
|
+
1. Kill switch (SafetyManager)
|
|
63
|
+
2. Circuit breaker (execution-level)
|
|
64
|
+
3. Max order size
|
|
65
|
+
4. Exposure limits
|
|
66
|
+
5. Daily loss limit
|
|
67
|
+
6. Max drawdown
|
|
68
|
+
7. Position concentration
|
|
69
|
+
8. VaR limit
|
|
70
|
+
9. Volatility regime
|
|
71
|
+
10. Kelly sizing recommendation
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { createRiskEngine } from 'clodds/risk';
|
|
75
|
+
|
|
76
|
+
const engine = createRiskEngine(
|
|
77
|
+
{
|
|
78
|
+
varLimit: 500, // Reject trades if portfolio VaR > $500
|
|
79
|
+
varConfidence: 0.95,
|
|
80
|
+
varWindowSize: 100,
|
|
81
|
+
volatilityConfig: {
|
|
82
|
+
lookbackWindow: 30,
|
|
83
|
+
haltOnExtreme: true, // Stop trading in extreme volatility
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
riskContext, // From trading/risk.ts
|
|
88
|
+
safetyManager, // From trading/safety.ts
|
|
89
|
+
circuitBreaker, // From execution/circuit-breaker.ts
|
|
90
|
+
kellyCalculator, // From trading/kelly.ts
|
|
91
|
+
getPositions: () => positions,
|
|
92
|
+
getPositionValues: () => positions.map(p => p.value),
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Validate a Trade
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
const decision = engine.validateTrade({
|
|
101
|
+
userId: 'user-123',
|
|
102
|
+
platform: 'polymarket',
|
|
103
|
+
marketId: 'market-456',
|
|
104
|
+
outcome: 'YES',
|
|
105
|
+
side: 'buy',
|
|
106
|
+
size: 500,
|
|
107
|
+
price: 0.65,
|
|
108
|
+
estimatedEdge: 0.05, // 5% edge
|
|
109
|
+
confidence: 0.8,
|
|
110
|
+
category: 'politics',
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (decision.approved) {
|
|
114
|
+
// Use adjustedSize — may be smaller than requested (Kelly + regime)
|
|
115
|
+
await executeTrade(decision.adjustedSize);
|
|
116
|
+
console.log(`Regime: ${decision.regime}`);
|
|
117
|
+
console.log(`Warnings: ${decision.warnings}`);
|
|
118
|
+
} else {
|
|
119
|
+
console.log(`Blocked: ${decision.reason}`);
|
|
120
|
+
// Check which step failed:
|
|
121
|
+
for (const check of decision.checks) {
|
|
122
|
+
console.log(` ${check.name}: ${check.passed ? 'PASS' : 'FAIL'} — ${check.message}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Record Trade P&L (feeds VaR + volatility)
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
engine.recordPnL({
|
|
131
|
+
pnlUsd: -45.20,
|
|
132
|
+
pnlPct: -0.09,
|
|
133
|
+
positionId: 'polymarket:market-456:YES',
|
|
134
|
+
timestamp: new Date(),
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Portfolio Risk Snapshot
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
const risk = engine.getPortfolioRisk();
|
|
142
|
+
console.log(`Total value: $${risk.totalValue}`);
|
|
143
|
+
console.log(`VaR (95%): $${risk.var95}`);
|
|
144
|
+
console.log(`VaR (99%): $${risk.var99}`);
|
|
145
|
+
console.log(`CVaR (95%): $${risk.cvar95}`);
|
|
146
|
+
console.log(`Regime: ${risk.regime}`);
|
|
147
|
+
console.log(`Drawdown: ${risk.drawdownPct}%`);
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Value-at-Risk
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
import { createVaRCalculator, calculateVaR, calculateCVaR } from 'clodds/risk';
|
|
154
|
+
|
|
155
|
+
// Full calculator with rolling window
|
|
156
|
+
const calc = createVaRCalculator({ windowSize: 100, confidenceLevel: 0.95 });
|
|
157
|
+
calc.addObservation({ pnlUsd: -50, pnlPct: -0.05, timestamp: new Date() });
|
|
158
|
+
const result = calc.calculateAt(0.99);
|
|
159
|
+
console.log(`VaR (99%): $${result.historicalVaR}`);
|
|
160
|
+
console.log(`CVaR (99%): $${result.cvar}`);
|
|
161
|
+
|
|
162
|
+
// Quick one-liners
|
|
163
|
+
const var95 = calculateVaR(pnlArray, 0.95);
|
|
164
|
+
const cvar95 = calculateCVaR(pnlArray, 0.95);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Volatility Regime Detection
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
import { createVolatilityDetector, detectRegime } from 'clodds/risk';
|
|
171
|
+
|
|
172
|
+
const detector = createVolatilityDetector({
|
|
173
|
+
lookbackWindow: 30,
|
|
174
|
+
haltOnExtreme: false,
|
|
175
|
+
regimeMultipliers: { low: 1.2, normal: 1.0, high: 0.5, extreme: 0.25 },
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
detector.addObservation(0.03); // 3% P&L
|
|
179
|
+
const snapshot = detector.detect();
|
|
180
|
+
console.log(`Regime: ${snapshot.regime}`); // 'low' | 'normal' | 'high' | 'extreme'
|
|
181
|
+
console.log(`Size multiplier: ${snapshot.sizeMultiplier}x`);
|
|
182
|
+
console.log(`Should halt: ${snapshot.shouldHalt}`);
|
|
183
|
+
|
|
184
|
+
// One-shot from array
|
|
185
|
+
const regime = detectRegime(recentPnLPcts);
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Stress Testing
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
import { runStressTest, runAllScenarios, getAvailableScenarios } from 'clodds/risk';
|
|
192
|
+
|
|
193
|
+
const result = runStressTest(positions, 'flash_crash');
|
|
194
|
+
console.log(`Estimated loss: $${result.estimatedLoss} (${result.estimatedLossPct}%)`);
|
|
195
|
+
console.log(`Severity: ${result.severity}`);
|
|
196
|
+
console.log(`Recommendations: ${result.recommendations.join(', ')}`);
|
|
197
|
+
|
|
198
|
+
// Run all scenarios at once
|
|
199
|
+
const all = runAllScenarios(positions); // sorted by severity
|
|
200
|
+
|
|
201
|
+
// Override scenario parameters
|
|
202
|
+
const custom = runStressTest(positions, 'flash_crash', {
|
|
203
|
+
scenarios: { flash_crash: { lossPct: 30, description: 'Severe crash' } },
|
|
204
|
+
});
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Risk Dashboard
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
import { getRiskDashboard } from 'clodds/risk';
|
|
211
|
+
|
|
212
|
+
const dashboard = engine.getDashboard();
|
|
213
|
+
console.log(`VaR (95%): $${dashboard.portfolioVaR95}`);
|
|
214
|
+
console.log(`Regime: ${dashboard.regime} (${dashboard.regimeSizeMultiplier}x)`);
|
|
215
|
+
console.log(`Daily P&L: $${dashboard.dailyPnL} / $${dashboard.dailyLossLimit}`);
|
|
216
|
+
console.log(`Drawdown: ${dashboard.currentDrawdown}% / ${dashboard.maxDrawdown}%`);
|
|
217
|
+
console.log(`Concentration HHI: ${dashboard.concentrationHHI}`);
|
|
218
|
+
console.log(`Kill switch: ${dashboard.killSwitchActive}`);
|
|
219
|
+
console.log(`Warnings: ${dashboard.warnings}`);
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Circuit Breaker (Standalone)
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
import { createCircuitBreaker, MODERATE_CONFIG } from 'clodds/risk';
|
|
226
|
+
|
|
227
|
+
// Feature-engineering circuit breaker (market-condition-aware)
|
|
228
|
+
const breaker = createCircuitBreaker(MODERATE_CONFIG);
|
|
229
|
+
breaker.startMonitoring();
|
|
230
|
+
|
|
231
|
+
if (!breaker.canTrade('polymarket', marketId)) {
|
|
232
|
+
return; // Trading halted
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
breaker.recordTrade({ success: true, pnl: 2.5 });
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Kill Switch
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
// Emergency stop via SafetyManager — no auto-resume
|
|
242
|
+
safetyManager.killSwitch('Market anomaly detected');
|
|
243
|
+
|
|
244
|
+
// Resume manually after review
|
|
245
|
+
safetyManager.resumeTrading();
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Risk Engine Checks
|
|
251
|
+
|
|
252
|
+
| # | Check | Module | Blocks Trade? |
|
|
253
|
+
|---|-------|--------|---------------|
|
|
254
|
+
| 1 | Kill switch | SafetyManager | Yes |
|
|
255
|
+
| 2 | Circuit breaker | CircuitBreaker | Yes |
|
|
256
|
+
| 3 | Max order size | trading/risk | Yes |
|
|
257
|
+
| 4 | Exposure limits | trading/risk | Yes |
|
|
258
|
+
| 5 | Daily loss limit | SafetyManager | Yes |
|
|
259
|
+
| 6 | Max drawdown | SafetyManager | Yes |
|
|
260
|
+
| 7 | Concentration | SafetyManager | Yes |
|
|
261
|
+
| 8 | VaR limit | VaRCalculator | Yes (if configured) |
|
|
262
|
+
| 9 | Volatility regime | VolatilityDetector | Yes (if extreme + halt) |
|
|
263
|
+
| 10 | Kelly sizing | DynamicKelly | No (adjusts size) |
|
|
264
|
+
|
|
265
|
+
## Circuit Breaker Triggers
|
|
266
|
+
|
|
267
|
+
| Trigger | Default | Description |
|
|
268
|
+
|---------|---------|-------------|
|
|
269
|
+
| **Daily loss (USD)** | $1,000 | Absolute loss limit |
|
|
270
|
+
| **Daily loss (%)** | 10% | Percentage of capital |
|
|
271
|
+
| **Drawdown** | 20% | Peak-to-trough |
|
|
272
|
+
| **Consecutive losses** | 5 | Losses in a row |
|
|
273
|
+
| **Error rate** | 50% | Failed order rate |
|
|
274
|
+
| **Max trades** | 50 | Trades per day |
|
|
275
|
+
|
|
276
|
+
## Volatility Regimes
|
|
277
|
+
|
|
278
|
+
| Regime | Size Multiplier | Description |
|
|
279
|
+
|--------|----------------|-------------|
|
|
280
|
+
| `low` | 1.2x | Calm markets, slightly larger positions |
|
|
281
|
+
| `normal` | 1.0x | Baseline conditions |
|
|
282
|
+
| `high` | 0.5x | Elevated volatility, half size |
|
|
283
|
+
| `extreme` | 0.25x | Crisis — quarter size or halt trading |
|
|
284
|
+
|
|
285
|
+
## Stress Test Scenarios
|
|
286
|
+
|
|
287
|
+
| Scenario | Loss | Description |
|
|
288
|
+
|----------|------|-------------|
|
|
289
|
+
| `flash_crash` | 20% | All positions lose value instantly |
|
|
290
|
+
| `liquidity_crunch` | 10% | Slippage doubles, partial fills |
|
|
291
|
+
| `platform_down` | 15% | Primary platform offline |
|
|
292
|
+
| `correlation_spike` | 25% | All positions move together |
|
|
293
|
+
| `black_swan` | 40% | 3-sigma tail event |
|
|
294
|
+
|
|
295
|
+
## Status Levels
|
|
296
|
+
|
|
297
|
+
| Status | Description |
|
|
298
|
+
|--------|-------------|
|
|
299
|
+
| `armed` | Normal, trading allowed |
|
|
300
|
+
| `warning` | Approaching limits (80%) |
|
|
301
|
+
| `tripped` | Limit exceeded, trading stopped |
|
|
302
|
+
| `killed` | Emergency stop, manual reset required |
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Recovery Process
|
|
307
|
+
|
|
308
|
+
1. **Auto-reset**: Next day at midnight (daily counters)
|
|
309
|
+
2. **Cooldown**: Circuit breaker auto-resets after cooldown period
|
|
310
|
+
3. **Manual reset**: `/risk reset` to re-arm
|
|
311
|
+
4. **Kill recovery**: `/risk reset` after manual review (no auto-resume)
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Best Practices
|
|
316
|
+
|
|
317
|
+
1. **Start conservative** — Lower limits while learning
|
|
318
|
+
2. **Don't override** — Respect the circuit breaker
|
|
319
|
+
3. **Review trips** — Understand why limits were hit
|
|
320
|
+
4. **Monitor VaR** — Use `/risk var` and `/risk dashboard` regularly
|
|
321
|
+
5. **Run stress tests** — Use `/risk stress` before large position changes
|
|
322
|
+
6. **Watch regime** — Use `/risk regime` to understand current volatility
|
|
323
|
+
7. **Adjust limits** — Based on strategy performance and regime
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: router
|
|
3
|
+
description: "Smart order routing for best price, liquidity, and execution"
|
|
4
|
+
emoji: "🔀"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Router - Complete API Reference
|
|
8
|
+
|
|
9
|
+
Route orders to the best platform based on price, liquidity, fees, and execution quality.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Chat Commands
|
|
14
|
+
|
|
15
|
+
### Route Order
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/route "Trump 2028" YES 1000 Find best route for $1000
|
|
19
|
+
/route BTCUSDT long 0.5 Route futures order
|
|
20
|
+
/route --mode best-price "Fed" YES Optimize for price
|
|
21
|
+
/route --mode best-liquidity ... Optimize for fills
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Compare Routes
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/route compare "Trump" YES 1000 Compare all platforms
|
|
28
|
+
/route fees "Trump" Compare fee structures
|
|
29
|
+
/route liquidity "Trump" Compare orderbook depth
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Execution
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
/route execute <route-id> Execute routed order
|
|
36
|
+
/route split "Trump" YES 5000 Split across platforms
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## TypeScript API Reference
|
|
42
|
+
|
|
43
|
+
### Create Smart Router
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { createSmartRouter } from 'clodds/router';
|
|
47
|
+
|
|
48
|
+
const router = createSmartRouter({
|
|
49
|
+
// Supported platforms
|
|
50
|
+
platforms: ['polymarket', 'kalshi', 'manifold'],
|
|
51
|
+
|
|
52
|
+
// Default mode
|
|
53
|
+
defaultMode: 'balanced',
|
|
54
|
+
|
|
55
|
+
// Fee structures
|
|
56
|
+
fees: {
|
|
57
|
+
polymarket: { maker: -0.005, taker: 0.01 },
|
|
58
|
+
kalshi: { maker: 0, taker: 0.01 },
|
|
59
|
+
manifold: { maker: 0, taker: 0 },
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Find Best Route
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
const route = await router.findBestRoute({
|
|
68
|
+
market: 'trump-win-2028',
|
|
69
|
+
side: 'YES',
|
|
70
|
+
size: 1000,
|
|
71
|
+
mode: 'best-price', // 'best-price' | 'best-liquidity' | 'lowest-fee' | 'balanced'
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
console.log(`Best platform: ${route.platform}`);
|
|
75
|
+
console.log(`Expected price: ${route.expectedPrice}`);
|
|
76
|
+
console.log(`Expected slippage: ${route.expectedSlippage}%`);
|
|
77
|
+
console.log(`Fees: $${route.fees}`);
|
|
78
|
+
console.log(`Net cost: $${route.netCost}`);
|
|
79
|
+
console.log(`Fill probability: ${route.fillProbability}%`);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Compare All Platforms
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
const comparison = await router.compare({
|
|
86
|
+
market: 'trump-win-2028',
|
|
87
|
+
side: 'YES',
|
|
88
|
+
size: 1000,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
console.log('Platform Comparison:');
|
|
92
|
+
for (const platform of comparison) {
|
|
93
|
+
console.log(`\n${platform.name}:`);
|
|
94
|
+
console.log(` Price: ${platform.price}`);
|
|
95
|
+
console.log(` Liquidity: $${platform.liquidity}`);
|
|
96
|
+
console.log(` Slippage: ${platform.slippage}%`);
|
|
97
|
+
console.log(` Fees: $${platform.fees}`);
|
|
98
|
+
console.log(` Net cost: $${platform.netCost}`);
|
|
99
|
+
console.log(` Score: ${platform.score}`);
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Split Order Across Platforms
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// Large orders split for better execution
|
|
107
|
+
const split = await router.splitOrder({
|
|
108
|
+
market: 'trump-win-2028',
|
|
109
|
+
side: 'YES',
|
|
110
|
+
size: 10000,
|
|
111
|
+
maxSlippage: 0.02,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
console.log('Order Split:');
|
|
115
|
+
for (const leg of split.legs) {
|
|
116
|
+
console.log(` ${leg.platform}: $${leg.size} @ ${leg.price}`);
|
|
117
|
+
}
|
|
118
|
+
console.log(`Total slippage: ${split.totalSlippage}%`);
|
|
119
|
+
console.log(`Avg price: ${split.avgPrice}`);
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Execute Route
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// Execute the routed order
|
|
126
|
+
const result = await router.execute(route);
|
|
127
|
+
|
|
128
|
+
console.log(`Order ID: ${result.orderId}`);
|
|
129
|
+
console.log(`Platform: ${result.platform}`);
|
|
130
|
+
console.log(`Fill price: ${result.fillPrice}`);
|
|
131
|
+
console.log(`Slippage: ${result.actualSlippage}%`);
|
|
132
|
+
console.log(`Fees: $${result.fees}`);
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Routing Modes
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
// Best price - minimize price paid
|
|
139
|
+
const priceRoute = await router.findBestRoute({
|
|
140
|
+
...order,
|
|
141
|
+
mode: 'best-price',
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// Best liquidity - maximize fill probability
|
|
145
|
+
const liquidityRoute = await router.findBestRoute({
|
|
146
|
+
...order,
|
|
147
|
+
mode: 'best-liquidity',
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Lowest fees - minimize transaction costs
|
|
151
|
+
const feeRoute = await router.findBestRoute({
|
|
152
|
+
...order,
|
|
153
|
+
mode: 'lowest-fee',
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// Balanced - weighted optimization
|
|
157
|
+
const balancedRoute = await router.findBestRoute({
|
|
158
|
+
...order,
|
|
159
|
+
mode: 'balanced',
|
|
160
|
+
weights: {
|
|
161
|
+
price: 0.4,
|
|
162
|
+
liquidity: 0.3,
|
|
163
|
+
fees: 0.3,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Fee Analysis
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
const fees = await router.analyzeFees({
|
|
172
|
+
market: 'trump-win-2028',
|
|
173
|
+
side: 'YES',
|
|
174
|
+
size: 1000,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
for (const platform of fees) {
|
|
178
|
+
console.log(`${platform.name}:`);
|
|
179
|
+
console.log(` Maker fee: ${platform.makerFee}%`);
|
|
180
|
+
console.log(` Taker fee: ${platform.takerFee}%`);
|
|
181
|
+
console.log(` For this order: $${platform.totalFee}`);
|
|
182
|
+
console.log(` Rebate available: ${platform.hasRebate}`);
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Liquidity Analysis
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
const liquidity = await router.analyzeLiquidity({
|
|
190
|
+
market: 'trump-win-2028',
|
|
191
|
+
side: 'YES',
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
for (const platform of liquidity) {
|
|
195
|
+
console.log(`${platform.name}:`);
|
|
196
|
+
console.log(` Best bid: ${platform.bestBid}`);
|
|
197
|
+
console.log(` Best ask: ${platform.bestAsk}`);
|
|
198
|
+
console.log(` Spread: ${platform.spread}%`);
|
|
199
|
+
console.log(` Depth at 1%: $${platform.depth1Pct}`);
|
|
200
|
+
console.log(` Depth at 2%: $${platform.depth2Pct}`);
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Routing Modes
|
|
207
|
+
|
|
208
|
+
| Mode | Optimizes For | Best When |
|
|
209
|
+
|------|---------------|-----------|
|
|
210
|
+
| `best-price` | Lowest price | Small orders |
|
|
211
|
+
| `best-liquidity` | Fill probability | Large orders |
|
|
212
|
+
| `lowest-fee` | Minimize fees | High frequency |
|
|
213
|
+
| `balanced` | Weighted combo | Default choice |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Platform Comparison
|
|
218
|
+
|
|
219
|
+
| Platform | Maker Fee | Taker Fee | Notes |
|
|
220
|
+
|----------|-----------|-----------|-------|
|
|
221
|
+
| **Polymarket** | 0% | 0% | Zero fees on most markets; 15-min crypto markets have dynamic fees |
|
|
222
|
+
| **Kalshi** | ~0.17% | ~1.2% | Formula-based fees, capped at ~2% |
|
|
223
|
+
| **Manifold** | 0% | 0% | Play money |
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Best Practices
|
|
228
|
+
|
|
229
|
+
1. **Compare before trading** — Always check alternatives
|
|
230
|
+
2. **Use maker orders** — Pay no fees on Polymarket (vs dynamic fees on 15-min crypto markets)
|
|
231
|
+
3. **Split large orders** — Reduce slippage
|
|
232
|
+
4. **Check liquidity** — Don't trade thin markets
|
|
233
|
+
5. **Account for fees** — Polymarket: 0% most markets; Kalshi: ~1.2% average
|