risk

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Risk - 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_crash
,
liquidity_crunch
,
platform_down
,
correlation_spike
,
black_swan
/risk var                           风险价值(VaR)及条件风险价值(CVaR)数值
/risk regime                        当前波动率机制及仓位乘数
/risk stress [scenario]             运行压力测试(支持flash_crash、black_swan等场景)
可用压力测试场景:
flash_crash
,
liquidity_crunch
,
platform_down
,
correlation_spike
,
black_swan

Configure 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:
  1. Kill switch (SafetyManager)
  2. Circuit breaker (execution-level)
  3. Max order size
  4. Exposure limits
  5. Daily loss limit
  6. Max drawdown
  7. Position concentration
  8. VaR limit
  9. Volatility regime
  10. 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项检查:
  1. 紧急停止开关(SafetyManager)
  2. 熔断机制(执行级)
  3. 最大订单规模
  4. 风险暴露限制
  5. 单日损失限制
  6. 最大回撤
  7. 仓位集中度
  8. VaR限制
  9. 波动率机制
  10. 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

风险引擎检查项

#CheckModuleBlocks Trade?
1Kill switchSafetyManagerYes
2Circuit breakerCircuitBreakerYes
3Max order sizetrading/riskYes
4Exposure limitstrading/riskYes
5Daily loss limitSafetyManagerYes
6Max drawdownSafetyManagerYes
7ConcentrationSafetyManagerYes
8VaR limitVaRCalculatorYes (if configured)
9Volatility regimeVolatilityDetectorYes (if extreme + halt)
10Kelly sizingDynamicKellyNo (adjusts size)
序号检查项模块是否阻止交易?
1紧急停止开关SafetyManager
2熔断机制CircuitBreaker
3最大订单规模trading/risk
4风险暴露限制trading/risk
5单日损失限制SafetyManager
6最大回撤SafetyManager
7仓位集中度SafetyManager
8VaR限制VaRCalculator是(若已配置)
9波动率机制VolatilityDetector是(极端波动且开启停止交易时)
10Kelly仓位DynamicKelly否(仅调整仓位大小)

Circuit Breaker Triggers

熔断机制触发条件

TriggerDefaultDescription
Daily loss (USD)$1,000Absolute loss limit
Daily loss (%)10%Percentage of capital
Drawdown20%Peak-to-trough
Consecutive losses5Losses in a row
Error rate50%Failed order rate
Max trades50Trades per day
触发条件默认值描述
单日损失(美元)1000美元绝对损失限制
单日损失比例10%资金占比
回撤比例20%峰值到谷底的跌幅
连续亏损次数5次连续亏损次数上限
订单错误率50%失败订单占比
单日最大交易次数50次单日交易次数上限

Volatility Regimes

波动率机制

RegimeSize MultiplierDescription
low
1.2xCalm markets, slightly larger positions
normal
1.0xBaseline conditions
high
0.5xElevated volatility, half size
extreme
0.25xCrisis — quarter size or halt trading
机制类型仓位乘数描述
low
1.2倍市场平静,可适当放大仓位
normal
1.0倍基准市场状态
high
0.5倍波动率升高,仓位减半
extreme
0.25倍危机状态——仓位减至四分之一或停止交易

Stress Test Scenarios

压力测试场景

ScenarioLossDescription
flash_crash
20%All positions lose value instantly
liquidity_crunch
10%Slippage doubles, partial fills
platform_down
15%Primary platform offline
correlation_spike
25%All positions move together
black_swan
40%3-sigma tail event
场景损失比例描述
flash_crash
20%所有仓位瞬间贬值
liquidity_crunch
10%滑点翻倍,部分成交
platform_down
15%主交易平台离线
correlation_spike
25%所有仓位同向波动
black_swan
40%3倍标准差的尾部极端事件

Status Levels

状态等级

StatusDescription
armed
Normal, trading allowed
warning
Approaching limits (80%)
tripped
Limit exceeded, trading stopped
killed
Emergency stop, manual reset required

状态描述
armed
正常状态,允许交易
warning
接近限制阈值(80%)
tripped
超出限制,交易已停止
killed
紧急停止状态,需手动重置

Recovery Process

恢复流程

  1. Auto-reset: Next day at midnight (daily counters)
  2. Cooldown: Circuit breaker auto-resets after cooldown period
  3. Manual reset:
    /risk reset
    to re-arm
  4. Kill recovery:
    /risk reset
    after manual review (no auto-resume)

  1. 自动重置: 次日零点(每日计数器重置)
  2. 冷却期: 熔断机制在冷却期后自动重置
  3. 手动重置: 使用
    /risk reset
    重新激活
  4. 紧急停止恢复: 人工审核后使用
    /risk reset
    重置(无自动恢复)

Best Practices

最佳实践

  1. Start conservative — Lower limits while learning
  2. Don't override — Respect the circuit breaker
  3. Review trips — Understand why limits were hit
  4. Monitor VaR — Use
    /risk var
    and
    /risk dashboard
    regularly
  5. Run stress tests — Use
    /risk stress
    before large position changes
  6. Watch regime — Use
    /risk regime
    to understand current volatility
  7. Adjust limits — Based on strategy performance and regime
  1. 从保守配置开始 — 学习阶段设置较低的限制值
  2. 不要强行绕过 — 遵守熔断机制的规则
  3. 审查触发记录 — 理解触发限制的原因
  4. 监控VaR指标 — 定期使用
    /risk var
    /risk dashboard
    命令
  5. 运行压力测试 — 在进行大额仓位调整前使用
    /risk stress
    命令
  6. 关注波动率机制 — 使用
    /risk regime
    命令了解当前市场波动率状态
  7. 调整限制参数 — 根据策略表现和市场波动率机制进行调整