risk
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRisk - Complete API Reference
Risk - 完整API参考文档
Full risk management engine: circuit breakers, loss limits, Value-at-Risk, volatility regime detection, stress testing, and kill switches.
全功能风险管理引擎:包含熔断机制、损失限制、风险价值(VaR)、波动率机制检测、压力测试及紧急停止开关。
Chat Commands
聊天命令
View Risk Status
查看风险状态
/risk Current risk status
/risk status Detailed status with portfolio metrics
/risk limits View all limits
/risk dashboard Real-time risk metrics (VaR, regime, HHI, etc.)/risk 当前风险状态
/risk status 包含投资组合指标的详细状态
/risk limits 查看所有限制参数
/risk dashboard 实时风险指标(VaR、波动率机制、HHI等)Risk Analytics
风险分析
/risk var Value-at-Risk and CVaR numbers
/risk regime Current volatility regime and size multiplier
/risk stress [scenario] Run stress test (flash_crash, black_swan, etc.)Available stress scenarios: , , , ,
flash_crashliquidity_crunchplatform_downcorrelation_spikeblack_swan/risk var 风险价值(VaR)及条件风险价值(CVaR)数值
/risk regime 当前波动率机制及仓位乘数
/risk stress [scenario] 运行压力测试(支持flash_crash、black_swan等场景)可用压力测试场景: , , , ,
flash_crashliquidity_crunchplatform_downcorrelation_spikeblack_swanConfigure Limits
配置限制参数
/risk set max-loss 1000 Max daily loss ($)
/risk set max-loss-pct 10 Max daily loss (%)
/risk set max-drawdown 20 Max drawdown (%)
/risk set max-position 25 Max single position (%)
/risk set max-trades 50 Max trades per day
/risk set consecutive-losses 5 Stop after N losses/risk set max-loss 1000 单日最大损失(美元)
/risk set max-loss-pct 10 单日最大损失比例(%)
/risk set max-drawdown 20 最大回撤比例(%)
/risk set max-position 25 单一仓位占比上限(%)
/risk set max-trades 50 单日最大交易次数
/risk set consecutive-losses 5 连续N次亏损后停止交易Circuit Breaker
熔断机制
/risk trip "manual stop" Manually trip breaker
/risk reset Reset after cooldown
/risk kill Emergency stop all trading
/risk check 500 Check if a $500 trade is allowed/risk trip "manual stop" 手动触发熔断
/risk reset 冷却后重置熔断机制
/risk kill 紧急停止所有交易
/risk check 500 检查500美元的交易是否被允许TypeScript API Reference
TypeScript API参考
Unified Risk Engine
统一风险引擎
The risk engine is the single entry point for all pre-trade validation. It orchestrates 10 checks in order:
- Kill switch (SafetyManager)
- Circuit breaker (execution-level)
- Max order size
- Exposure limits
- Daily loss limit
- Max drawdown
- Position concentration
- VaR limit
- Volatility regime
- Kelly sizing recommendation
typescript
import { createRiskEngine } from 'clodds/risk';
const engine = createRiskEngine(
{
varLimit: 500, // Reject trades if portfolio VaR > $500
varConfidence: 0.95,
varWindowSize: 100,
volatilityConfig: {
lookbackWindow: 30,
haltOnExtreme: true, // Stop trading in extreme volatility
},
},
{
riskContext, // From trading/risk.ts
safetyManager, // From trading/safety.ts
circuitBreaker, // From execution/circuit-breaker.ts
kellyCalculator, // From trading/kelly.ts
getPositions: () => positions,
getPositionValues: () => positions.map(p => p.value),
}
);风险引擎是所有交易前验证的唯一入口,它按顺序执行10项检查:
- 紧急停止开关(SafetyManager)
- 熔断机制(执行级)
- 最大订单规模
- 风险暴露限制
- 单日损失限制
- 最大回撤
- 仓位集中度
- VaR限制
- 波动率机制
- Kelly仓位建议
typescript
import { createRiskEngine } from 'clodds/risk';
const engine = createRiskEngine(
{
varLimit: 500, // 当投资组合VaR超过500美元时拒绝交易
varConfidence: 0.95,
varWindowSize: 100,
volatilityConfig: {
lookbackWindow: 30,
haltOnExtreme: true, // 极端波动率下停止交易
},
},
{
riskContext, // 来自trading/risk.ts
safetyManager, // 来自trading/safety.ts
circuitBreaker, // 来自execution/circuit-breaker.ts
kellyCalculator, // 来自trading/kelly.ts
getPositions: () => positions,
getPositionValues: () => positions.map(p => p.value),
}
);Validate a Trade
验证交易
typescript
const decision = engine.validateTrade({
userId: 'user-123',
platform: 'polymarket',
marketId: 'market-456',
outcome: 'YES',
side: 'buy',
size: 500,
price: 0.65,
estimatedEdge: 0.05, // 5% edge
confidence: 0.8,
category: 'politics',
});
if (decision.approved) {
// Use adjustedSize — may be smaller than requested (Kelly + regime)
await executeTrade(decision.adjustedSize);
console.log(`Regime: ${decision.regime}`);
console.log(`Warnings: ${decision.warnings}`);
} else {
console.log(`Blocked: ${decision.reason}`);
// Check which step failed:
for (const check of decision.checks) {
console.log(` ${check.name}: ${check.passed ? 'PASS' : 'FAIL'} — ${check.message}`);
}
}typescript
const decision = engine.validateTrade({
userId: 'user-123',
platform: 'polymarket',
marketId: 'market-456',
outcome: 'YES',
side: 'buy',
size: 500,
price: 0.65,
estimatedEdge: 0.05, // 5%优势
confidence: 0.8,
category: 'politics',
});
if (decision.approved) {
// 使用调整后的仓位大小——可能小于请求值(结合Kelly及波动率机制)
await executeTrade(decision.adjustedSize);
console.log(`波动率机制: ${decision.regime}`);
console.log(`警告信息: ${decision.warnings}`);
} else {
console.log(`交易被阻止: ${decision.reason}`);
// 检查哪一步验证失败:
for (const check of decision.checks) {
console.log(` ${check.name}: ${check.passed ? '通过' : '失败'} — ${check.message}`);
}
}Record Trade P&L (feeds VaR + volatility)
记录交易盈亏(为VaR及波动率计算提供数据)
typescript
engine.recordPnL({
pnlUsd: -45.20,
pnlPct: -0.09,
positionId: 'polymarket:market-456:YES',
timestamp: new Date(),
});typescript
engine.recordPnL({
pnlUsd: -45.20,
pnlPct: -0.09,
positionId: 'polymarket:market-456:YES',
timestamp: new Date(),
});Portfolio Risk Snapshot
投资组合风险快照
typescript
const risk = engine.getPortfolioRisk();
console.log(`Total value: $${risk.totalValue}`);
console.log(`VaR (95%): $${risk.var95}`);
console.log(`VaR (99%): $${risk.var99}`);
console.log(`CVaR (95%): $${risk.cvar95}`);
console.log(`Regime: ${risk.regime}`);
console.log(`Drawdown: ${risk.drawdownPct}%`);typescript
const risk = engine.getPortfolioRisk();
console.log(`总价值: $${risk.totalValue}`);
console.log(`95%置信度VaR: $${risk.var95}`);
console.log(`99%置信度VaR: $${risk.var99}`);
console.log(`95%置信度CVaR: $${risk.cvar95}`);
console.log(`波动率机制: ${risk.regime}`);
console.log(`回撤比例: ${risk.drawdownPct}%`);Value-at-Risk
风险价值(VaR)
typescript
import { createVaRCalculator, calculateVaR, calculateCVaR } from 'clodds/risk';
// Full calculator with rolling window
const calc = createVaRCalculator({ windowSize: 100, confidenceLevel: 0.95 });
calc.addObservation({ pnlUsd: -50, pnlPct: -0.05, timestamp: new Date() });
const result = calc.calculateAt(0.99);
console.log(`VaR (99%): $${result.historicalVaR}`);
console.log(`CVaR (99%): $${result.cvar}`);
// Quick one-liners
const var95 = calculateVaR(pnlArray, 0.95);
const cvar95 = calculateCVaR(pnlArray, 0.95);typescript
import { createVaRCalculator, calculateVaR, calculateCVaR } from 'clodds/risk';
// 带滚动窗口的完整计算器
const calc = createVaRCalculator({ windowSize: 100, confidenceLevel: 0.95 });
calc.addObservation({ pnlUsd: -50, pnlPct: -0.05, timestamp: new Date() });
const result = calc.calculateAt(0.99);
console.log(`99%置信度VaR: $${result.historicalVaR}`);
console.log(`99%置信度CVaR: $${result.cvar}`);
// 快速单行计算
const var95 = calculateVaR(pnlArray, 0.95);
const cvar95 = calculateCVaR(pnlArray, 0.95);Volatility Regime Detection
波动率机制检测
typescript
import { createVolatilityDetector, detectRegime } from 'clodds/risk';
const detector = createVolatilityDetector({
lookbackWindow: 30,
haltOnExtreme: false,
regimeMultipliers: { low: 1.2, normal: 1.0, high: 0.5, extreme: 0.25 },
});
detector.addObservation(0.03); // 3% P&L
const snapshot = detector.detect();
console.log(`Regime: ${snapshot.regime}`); // 'low' | 'normal' | 'high' | 'extreme'
console.log(`Size multiplier: ${snapshot.sizeMultiplier}x`);
console.log(`Should halt: ${snapshot.shouldHalt}`);
// One-shot from array
const regime = detectRegime(recentPnLPcts);typescript
import { createVolatilityDetector, detectRegime } from 'clodds/risk';
const detector = createVolatilityDetector({
lookbackWindow: 30,
haltOnExtreme: false,
regimeMultipliers: { low: 1.2, normal: 1.0, high: 0.5, extreme: 0.25 },
});
detector.addObservation(0.03); // 3%盈亏
const snapshot = detector.detect();
console.log(`波动率机制: ${snapshot.regime}`); // 'low' | 'normal' | 'high' | 'extreme'
console.log(`仓位乘数: ${snapshot.sizeMultiplier}倍`);
console.log(`是否停止交易: ${snapshot.shouldHalt}`);
// 基于数组的一次性检测
const regime = detectRegime(recentPnLPcts);Stress Testing
压力测试
typescript
import { runStressTest, runAllScenarios, getAvailableScenarios } from 'clodds/risk';
const result = runStressTest(positions, 'flash_crash');
console.log(`Estimated loss: $${result.estimatedLoss} (${result.estimatedLossPct}%)`);
console.log(`Severity: ${result.severity}`);
console.log(`Recommendations: ${result.recommendations.join(', ')}`);
// Run all scenarios at once
const all = runAllScenarios(positions); // sorted by severity
// Override scenario parameters
const custom = runStressTest(positions, 'flash_crash', {
scenarios: { flash_crash: { lossPct: 30, description: 'Severe crash' } },
});typescript
import { runStressTest, runAllScenarios, getAvailableScenarios } from 'clodds/risk';
const result = runStressTest(positions, 'flash_crash');
console.log(`预估损失: $${result.estimatedLoss} (${result.estimatedLossPct}%)`);
console.log(`严重程度: ${result.severity}`);
console.log(`建议: ${result.recommendations.join(', ')}`);
// 一次性运行所有场景
const all = runAllScenarios(positions); // 按严重程度排序
// 覆盖场景参数
const custom = runStressTest(positions, 'flash_crash', {
scenarios: { flash_crash: { lossPct: 30, description: '严重崩盘' } },
});Risk Dashboard
风险仪表盘
typescript
import { getRiskDashboard } from 'clodds/risk';
const dashboard = engine.getDashboard();
console.log(`VaR (95%): $${dashboard.portfolioVaR95}`);
console.log(`Regime: ${dashboard.regime} (${dashboard.regimeSizeMultiplier}x)`);
console.log(`Daily P&L: $${dashboard.dailyPnL} / $${dashboard.dailyLossLimit}`);
console.log(`Drawdown: ${dashboard.currentDrawdown}% / ${dashboard.maxDrawdown}%`);
console.log(`Concentration HHI: ${dashboard.concentrationHHI}`);
console.log(`Kill switch: ${dashboard.killSwitchActive}`);
console.log(`Warnings: ${dashboard.warnings}`);typescript
import { getRiskDashboard } from 'clodds/risk';
const dashboard = engine.getDashboard();
console.log(`95%置信度VaR: $${dashboard.portfolioVaR95}`);
console.log(`波动率机制: ${dashboard.regime} (${dashboard.regimeSizeMultiplier}倍)`);
console.log(`单日盈亏: $${dashboard.dailyPnL} / 单日损失上限 $${dashboard.dailyLossLimit}`);
console.log(`当前回撤: ${dashboard.currentDrawdown}% / 最大回撤上限 ${dashboard.maxDrawdown}%`);
console.log(`集中度HHI: ${dashboard.concentrationHHI}`);
console.log(`紧急停止开关状态: ${dashboard.killSwitchActive}`);
console.log(`警告信息: ${dashboard.warnings}`);Circuit Breaker (Standalone)
独立熔断机制
typescript
import { createCircuitBreaker, MODERATE_CONFIG } from 'clodds/risk';
// Feature-engineering circuit breaker (market-condition-aware)
const breaker = createCircuitBreaker(MODERATE_CONFIG);
breaker.startMonitoring();
if (!breaker.canTrade('polymarket', marketId)) {
return; // Trading halted
}
breaker.recordTrade({ success: true, pnl: 2.5 });typescript
import { createCircuitBreaker, MODERATE_CONFIG } from 'clodds/risk';
// 具备特征工程的熔断机制(感知市场状态)
const breaker = createCircuitBreaker(MODERATE_CONFIG);
breaker.startMonitoring();
if (!breaker.canTrade('polymarket', marketId)) {
return; // 交易已停止
}
breaker.recordTrade({ success: true, pnl: 2.5 });Kill Switch
紧急停止开关
typescript
// Emergency stop via SafetyManager — no auto-resume
safetyManager.killSwitch('Market anomaly detected');
// Resume manually after review
safetyManager.resumeTrading();typescript
// 通过SafetyManager触发紧急停止——无自动恢复
safetyManager.killSwitch('检测到市场异常');
// 人工审核后恢复交易
safetyManager.resumeTrading();Risk Engine Checks
风险引擎检查项
| # | Check | Module | Blocks Trade? |
|---|---|---|---|
| 1 | Kill switch | SafetyManager | Yes |
| 2 | Circuit breaker | CircuitBreaker | Yes |
| 3 | Max order size | trading/risk | Yes |
| 4 | Exposure limits | trading/risk | Yes |
| 5 | Daily loss limit | SafetyManager | Yes |
| 6 | Max drawdown | SafetyManager | Yes |
| 7 | Concentration | SafetyManager | Yes |
| 8 | VaR limit | VaRCalculator | Yes (if configured) |
| 9 | Volatility regime | VolatilityDetector | Yes (if extreme + halt) |
| 10 | Kelly sizing | DynamicKelly | No (adjusts size) |
| 序号 | 检查项 | 模块 | 是否阻止交易? |
|---|---|---|---|
| 1 | 紧急停止开关 | SafetyManager | 是 |
| 2 | 熔断机制 | CircuitBreaker | 是 |
| 3 | 最大订单规模 | trading/risk | 是 |
| 4 | 风险暴露限制 | trading/risk | 是 |
| 5 | 单日损失限制 | SafetyManager | 是 |
| 6 | 最大回撤 | SafetyManager | 是 |
| 7 | 仓位集中度 | SafetyManager | 是 |
| 8 | VaR限制 | VaRCalculator | 是(若已配置) |
| 9 | 波动率机制 | VolatilityDetector | 是(极端波动且开启停止交易时) |
| 10 | Kelly仓位 | DynamicKelly | 否(仅调整仓位大小) |
Circuit Breaker Triggers
熔断机制触发条件
| Trigger | Default | Description |
|---|---|---|
| Daily loss (USD) | $1,000 | Absolute loss limit |
| Daily loss (%) | 10% | Percentage of capital |
| Drawdown | 20% | Peak-to-trough |
| Consecutive losses | 5 | Losses in a row |
| Error rate | 50% | Failed order rate |
| Max trades | 50 | Trades per day |
| 触发条件 | 默认值 | 描述 |
|---|---|---|
| 单日损失(美元) | 1000美元 | 绝对损失限制 |
| 单日损失比例 | 10% | 资金占比 |
| 回撤比例 | 20% | 峰值到谷底的跌幅 |
| 连续亏损次数 | 5次 | 连续亏损次数上限 |
| 订单错误率 | 50% | 失败订单占比 |
| 单日最大交易次数 | 50次 | 单日交易次数上限 |
Volatility Regimes
波动率机制
| Regime | Size Multiplier | Description |
|---|---|---|
| 1.2x | Calm markets, slightly larger positions |
| 1.0x | Baseline conditions |
| 0.5x | Elevated volatility, half size |
| 0.25x | Crisis — quarter size or halt trading |
| 机制类型 | 仓位乘数 | 描述 |
|---|---|---|
| 1.2倍 | 市场平静,可适当放大仓位 |
| 1.0倍 | 基准市场状态 |
| 0.5倍 | 波动率升高,仓位减半 |
| 0.25倍 | 危机状态——仓位减至四分之一或停止交易 |
Stress Test Scenarios
压力测试场景
| Scenario | Loss | Description |
|---|---|---|
| 20% | All positions lose value instantly |
| 10% | Slippage doubles, partial fills |
| 15% | Primary platform offline |
| 25% | All positions move together |
| 40% | 3-sigma tail event |
| 场景 | 损失比例 | 描述 |
|---|---|---|
| 20% | 所有仓位瞬间贬值 |
| 10% | 滑点翻倍,部分成交 |
| 15% | 主交易平台离线 |
| 25% | 所有仓位同向波动 |
| 40% | 3倍标准差的尾部极端事件 |
Status Levels
状态等级
| Status | Description |
|---|---|
| Normal, trading allowed |
| Approaching limits (80%) |
| Limit exceeded, trading stopped |
| Emergency stop, manual reset required |
| 状态 | 描述 |
|---|---|
| 正常状态,允许交易 |
| 接近限制阈值(80%) |
| 超出限制,交易已停止 |
| 紧急停止状态,需手动重置 |
Recovery Process
恢复流程
- Auto-reset: Next day at midnight (daily counters)
- Cooldown: Circuit breaker auto-resets after cooldown period
- Manual reset: to re-arm
/risk reset - Kill recovery: after manual review (no auto-resume)
/risk reset
- 自动重置: 次日零点(每日计数器重置)
- 冷却期: 熔断机制在冷却期后自动重置
- 手动重置: 使用重新激活
/risk reset - 紧急停止恢复: 人工审核后使用重置(无自动恢复)
/risk reset
Best Practices
最佳实践
- Start conservative — Lower limits while learning
- Don't override — Respect the circuit breaker
- Review trips — Understand why limits were hit
- Monitor VaR — Use and
/risk varregularly/risk dashboard - Run stress tests — Use before large position changes
/risk stress - Watch regime — Use to understand current volatility
/risk regime - Adjust limits — Based on strategy performance and regime
- 从保守配置开始 — 学习阶段设置较低的限制值
- 不要强行绕过 — 遵守熔断机制的规则
- 审查触发记录 — 理解触发限制的原因
- 监控VaR指标 — 定期使用和
/risk var命令/risk dashboard - 运行压力测试 — 在进行大额仓位调整前使用命令
/risk stress - 关注波动率机制 — 使用命令了解当前市场波动率状态
/risk regime - 调整限制参数 — 根据策略表现和市场波动率机制进行调整