39 lines
1.8 KiB
Java
39 lines
1.8 KiB
Java
|
|
package com.quantai.trader.domain;
|
||
|
|
|
||
|
|
import static com.quantai.trader.util.TraderNumbers.*;
|
||
|
|
|
||
|
|
import java.math.BigDecimal;
|
||
|
|
import java.util.Map;
|
||
|
|
|
||
|
|
public record RiskOutput(
|
||
|
|
BigDecimal marketRiskProb,
|
||
|
|
BigDecimal positionRiskProb,
|
||
|
|
BigDecimal marketRiskSeverityBps,
|
||
|
|
BigDecimal positionRiskSeverityBps,
|
||
|
|
BigDecimal drawdownProb,
|
||
|
|
BigDecimal expectedShortfallBps,
|
||
|
|
BigDecimal volatilityExpansionProb,
|
||
|
|
BigDecimal spikeProb,
|
||
|
|
BigDecimal liquidityRiskProb,
|
||
|
|
BigDecimal liquidityCapacityRatio,
|
||
|
|
String modelVersion,
|
||
|
|
String calibrationVersion,
|
||
|
|
Map<String, Object> explanation
|
||
|
|
) {
|
||
|
|
public RiskOutput {
|
||
|
|
marketRiskProb = probability(marketRiskProb, "risk.marketRiskProb");
|
||
|
|
positionRiskProb = probability(positionRiskProb, "risk.positionRiskProb");
|
||
|
|
marketRiskSeverityBps = nonNegative(marketRiskSeverityBps, "risk.marketRiskSeverityBps");
|
||
|
|
positionRiskSeverityBps = nonNegative(positionRiskSeverityBps, "risk.positionRiskSeverityBps");
|
||
|
|
drawdownProb = probability(drawdownProb, "risk.drawdownProb");
|
||
|
|
expectedShortfallBps = nonNegative(expectedShortfallBps, "risk.expectedShortfallBps");
|
||
|
|
volatilityExpansionProb = probability(volatilityExpansionProb, "risk.volatilityExpansionProb");
|
||
|
|
spikeProb = probability(spikeProb, "risk.spikeProb");
|
||
|
|
liquidityRiskProb = probability(liquidityRiskProb, "risk.liquidityRiskProb");
|
||
|
|
liquidityCapacityRatio = nonNegative(liquidityCapacityRatio, "risk.liquidityCapacityRatio");
|
||
|
|
modelVersion = requiredText(modelVersion, "risk.modelVersion");
|
||
|
|
calibrationVersion = requiredText(calibrationVersion, "risk.calibrationVersion");
|
||
|
|
explanation = Map.copyOf(explanation == null ? Map.of() : explanation);
|
||
|
|
}
|
||
|
|
}
|