name: 风险管理
description: “统一风险引擎,包含VaR、压力测试、波动率制度和自动控制”
emoji: “🛑”
风险管理 - 完整API参考
完整的风险管理引擎:熔断机制、损失限制、风险价值(Value-at-Risk)、波动率制度检测、压力测试和紧急停止开关。
聊天命令
查看风险状态
/risk 当前风险状态
/risk status 详细状态与投资组合指标
/risk limits 查看所有限制
/risk dashboard 实时风险指标(VaR、制度、HHI等)
风险分析
/risk var 风险价值和条件风险价值
/risk regime 当前波动率制度和大小乘数
/risk stress [scenario] 运行压力测试(flash_crash、black_swan等)
可用的压力情景: flash_crash, liquidity_crunch, platform_down, correlation_spike, black_swan
配置限制
/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 连续损失后停止
熔断机制
/risk trip "manual stop" 手动触发熔断
/risk reset 冷却后重置
/risk kill 紧急停止所有交易
/risk check 500 检查是否允许500美元的交易
TypeScript API参考
统一风险引擎
风险引擎是所有交易前验证的单一入口点。它按顺序协调10个检查:
- 紧急停止开关(SafetyManager)
- 熔断机制(执行级别)
- 最大订单大小
- 暴露限制
- 日损失限制
- 最大回撤
- 仓位集中
- VaR限制
- 波动率制度
- Kelly大小建议
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),
}
);
验证交易
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) {
// 使用adjustedSize — 可能比请求的小(Kelly + 制度)
await executeTrade(decision.adjustedSize);
console.log(`Regime: ${decision.regime}`);
console.log(`Warnings: ${decision.warnings}`);
} else {
console.log(`Blocked: ${decision.reason}`);
// 检查哪个步骤失败:
for (const check of decision.checks) {
console.log(` ${check.name}: ${check.passed ? 'PASS' : 'FAIL'} — ${check.message}`);
}
}
记录交易盈亏(提供VaR + 波动率)
engine.recordPnL({
pnlUsd: -45.20,
pnlPct: -0.09,
positionId: 'polymarket:market-456:YES',
timestamp: new Date(),
});
投资组合风险快照
const risk = engine.getPortfolioRisk();
console.log(`总价值: $${risk.totalValue}`);
console.log(`VaR (95%): $${risk.var95}`);
console.log(`VaR (99%): $${risk.var99}`);
console.log(`CVaR (95%): $${risk.cvar95}`);
console.log(`制度: ${risk.regime}`);
console.log(`回撤: ${risk.drawdownPct}%`);
风险价值
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(`VaR (99%): $${result.historicalVaR}`);
console.log(`CVaR (99%): $${result.cvar}`);
// 快速单行代码
const var95 = calculateVaR(pnlArray, 0.95);
const cvar95 = calculateCVaR(pnlArray, 0.95);
波动率制度检测
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}x`);
console.log(`应该停止: ${snapshot.shouldHalt}`);
// 从数组一次性
const regime = detectRegime(recentPnLPcts);
压力测试
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: '严重崩溃' } },
});
风险仪表板
import { getRiskDashboard } from 'clodds/risk';
const dashboard = engine.getDashboard();
console.log(`VaR (95%): $${dashboard.portfolioVaR95}`);
console.log(`制度: ${dashboard.regime} (${dashboard.regimeSizeMultiplier}x)`);
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}`);
熔断机制(独立)
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 });
紧急停止开关
// 通过SafetyManager紧急停止 —— 无自动恢复
safetyManager.killSwitch('市场异常检测');
// 手动审核后恢复交易
safetyManager.resumeTrading();
风险引擎检查
| # |
检查 |
模块 |
阻止交易? |
| 1 |
紧急停止开关 |
SafetyManager |
是 |
| 2 |
熔断机制 |
CircuitBreaker |
是 |
| 3 |
最大订单大小 |
trading/risk |
是 |
| 4 |
暴露限制 |
trading/risk |
是 |
| 5 |
日损失限制 |
SafetyManager |
是 |
| 6 |
最大回撤 |
SafetyManager |
是 |
| 7 |
集中度 |
SafetyManager |
是 |
| 8 |
VaR限制 |
VaRCalculator |
如果配置则阻止 |
| 9 |
波动率制度 |
VolatilityDetector |
如果极端+停止则阻止 |
| 10 |
Kelly大小 |
DynamicKelly |
否(调整大小) |
熔断机制触发器
| 触发器 |
默认 |
描述 |
| 日损失 (USD) |
$1,000 |
绝对损失限制 |
| 日损失 (%) |
10% |
资本的百分比 |
| 回撤 |
20% |
峰值到谷底 |
| 连续损失 |
5 |
连续损失次数 |
| 错误率 |
50% |
失败订单率 |
| 最大交易次数 |
50 |
每天的交易次数 |
波动率制度
| 制度 |
大小乘数 |
描述 |
low |
1.2x |
市场平静,稍大的仓位 |
normal |
1.0x |
基线条件 |
high |
0.5x |
波动率上升,半仓 |
extreme |
0.25x |
危机 —— 四分之一仓位或停止交易 |
压力测试情景
| 情景 |
损失 |
描述 |
flash_crash |
20% |
所有仓位瞬间贬值 |
liquidity_crunch |
10% |
滑点翻倍,部分成交 |
platform_down |
15% |
主要平台离线 |
correlation_spike |
25% |
所有仓位一起移动 |
black_swan |
40% |
3-sigma尾部事件 |
状态级别
| 状态 |
描述 |
armed |
正常,允许交易 |
warning |
接近限制(80%) |
tripped |
超限,停止交易 |
killed |
紧急停止,需要手动重置 |
恢复流程
- 自动重置:第二天午夜(日计数器)
- 冷却:熔断机制在冷却期后自动重置
- 手动重置:
/risk reset 重新武装
- 杀死恢复:手动审核后
/risk reset(无自动恢复)
最佳实践
- 保守开始 —— 学习时降低限制
- 不覆盖 —— 尊重熔断机制
- 审核触发 —— 了解为何达到限制
- 监控VaR —— 定期使用
/risk var和/risk dashboard
- 运行压力测试 —— 在大的仓位变化前使用
/risk stress
- 观察制度 —— 使用
/risk regime了解当前波动率
- 调整限制 —— 根据策略性能和制度