Function addRisk

  • Registers a risk management configuration in the framework.

    The risk configuration defines:

    • Maximum concurrent positions across all strategies
    • Custom validations for advanced risk logic (portfolio metrics, correlations, etc.)
    • Callbacks for rejected/allowed signals

    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.

    Parameters

    • riskSchema: IRiskSchema

      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?: string

        Optional developer note for documentation

      • riskName: string

        Unique risk profile identifier

      • validations: (IRiskValidationFn | IRiskValidation)[]

        Custom validations array for risk logic

    Returns void

    // 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}`);
    },
    },
    });