Risk configuration object
Risk schema registered via addRisk(). Defines portfolio-level risk controls via custom validations.
Optionalcallbacks?: Partial<IRiskCallbacks>Optional lifecycle event callbacks (onRejected, onAllowed)
Optionalnote?: stringOptional developer note for documentation
Unique risk profile identifier
Custom validations array for risk logic
// Basic risk limit
addRisk({
riskName: "conservative",
maxConcurrentPositions: 5,
});
// With custom validations (access to signal data and portfolio state)
addRisk({
riskName: "advanced",
maxConcurrentPositions: 10,
validations: [
{
validate: async ({ params }) => {
// params contains: symbol, strategyName, exchangeName, signal, currentPrice, timestamp
// Calculate portfolio metrics from external data source
const portfolio = await getPortfolioState();
if (portfolio.drawdown > 20) {
throw new Error("Portfolio drawdown exceeds 20%");
}
},
docDescription: "Prevents trading during high drawdown",
},
({ params }) => {
// Access signal details
const positionValue = calculatePositionValue(params.signal, params.currentPrice);
if (positionValue > 10000) {
throw new Error("Position value exceeds $10,000 limit");
}
},
],
callbacks: {
onRejected: (symbol, reason, limit, params) => {
console.log(`[RISK] Signal rejected for ${symbol}: ${reason}`);
},
onAllowed: (symbol, params) => {
console.log(`[RISK] Signal allowed for ${symbol}`);
},
},
});
Registers a risk management configuration in the framework.
The risk configuration defines:
Multiple ClientStrategy instances share the same ClientRisk instance, enabling cross-strategy risk analysis. ClientRisk tracks all active positions and provides access to them via validation functions.