TalentPerformer

Treasury ALM Risk Controller

The Treasury & ALM Risk Controller agent provides comprehensive oversight of treasury operations and asset-liability management. It assesses FX exposures, counterparty risks, and key ALM metrics, leveraging a knowledge base of regulatory standards, treasury policies, and risk limits alongside analytical tools to ensure compliance and identify vulnerabilities.

LIVE

Instructions

Step 1: FX & Counterparty Risk Assessment
    - Input: Cash positions by currency and counterparty, FX rates, and counterparty limits.
    - Tool: calculate_fx_counterparty_risk
    - Knowledge: Reference the knowledge base for counterparty limits, FX exposure policies, and regulatory compliance requirements.
    - Action: Calculate FX-adjusted exposures, identify limit breaches, and recommend mitigation actions (hedging, reallocation).

    Step 2: ALM Metrics Calculation
    - Input: Balance sheet data including asset and liability types, amounts, maturities, and currencies; current interest rates.
    - Tool: calculate_alm_metrics
    - Knowledge: Reference the knowledge base for liquidity ratio thresholds, interest rate gap policies, and capital adequacy requirements.
    - Action: Compute key ALM metrics (liquidity ratio, interest rate gap, capital adequacy ratio), assess compliance, and identify risks.

    Step 3: Reporting & Recommendations
    - Input: Results from FX/counterparty risk assessment and ALM metrics calculation.
    - Action: Summarize FX exposures, counterparty limit breaches, and key ALM metrics (liquidity ratio, interest rate gap, capital adequacy ratio). Provide actionable recommendations to maintain financial equilibrium and ALM compliance.

Knowledge Base (.md)

Business reference guide

Drag & Drop or Click

.md, .txt, .pdf

Data Files

Upload data for analysis (CSV, JSON, Excel, PDF)

Drag & Drop or Click

Multiple files: .json, .csv, .xlsx, .xls, .pdf, .docx, .pptx, .txt

Tools 3

calculate_fx_counterparty_risk

Calculates FX exposure and counterparty risk for treasury operations. Parameters: - cash_positions: JSON string — list of objects with keys Date (str), Currency (str), Counterparty (str), Amount (float). Example: '[{"Date":"2024-01-01","Currency":"USD","Counterparty":"BankA","Amount":1000000}]' - fx_rates: Dictionary with currency codes as keys and FX rate to base currency as values. Example: {"USD": 1.08, "GBP": 1.25, "EUR": 1.0} - counterparty_limits: Dictionary with counterparty names as keys and maximum allowed exposure as values. Example: {"BankA": 5000000, "BankB": 3000000} Returns: - JSON string with calculated exposures, FX-adjusted amounts, and limit breaches.

def calculate_fx_counterparty_risk(cash_positions: str, fx_rates: Dict[str, float], counterparty_limits: Dict[str, float]) -> str:
    """
    Calculates FX exposure and counterparty risk for treasury operations.

    Parameters:
    - cash_positions: JSON string — list of objects with keys Date(str), Currency(str),
                      Counterparty(str), Amount(float).
                      Example: '[{"Date":"2024-01-01","Currency":"USD","Counterparty":"BankA","Amount":1000000}]'
    - fx_rates: Dictionary with currency codes as keys and FX rate to base currency as values.
                Example: {"USD": 1.08, "GBP": 1.25, "EUR": 1.0}
    - counterparty_limits: Dictionary with counterparty names as keys and maximum allowed exposure as values.
                           Example: {"BankA": 5000000, "BankB": 3000000}

    Returns:
    - JSON string with calculated exposures, FX-adjusted amounts, and limit breaches.
    """
    try:
        data = json.loads(cash_positions) if isinstance(cash_positions, str) else cash_positions
        df = pd.DataFrame(data)

        df['FX_Amount'] = df.apply(lambda x: x['Amount'] * fx_rates.get(x['Currency'], 1), axis=1)
        df['Limit'] = df['Counterparty'].apply(lambda c: counterparty_limits.get(c, float('inf')))
        df['LimitBreach'] = df['FX_Amount'] > df['Limit']

        result = df[['Date', 'Currency', 'Counterparty', 'Amount', 'FX_Amount', 'Limit', 'LimitBreach']]
        return result.to_json(orient='records', indent=2)

    except Exception as e:
        return json.dumps({'error': str(e)})

calculate_alm_metrics

Calculates key ALM metrics including liquidity ratios, interest rate gaps, and capital adequacy. Parameters: - balance_sheet: JSON string — list of objects with keys Type ('Asset' or 'Liability'), Amount (float), Maturity (int, days), Currency (str). Example: '[{"Type":"Asset","Amount":5000000,"Maturity":365,"Currency":"EUR"}]' - interest_rates: Dictionary with currency as key and current interest rate as value. Example: {"EUR": 0.03, "USD": 0.05} Returns: - JSON string with TotalAssets, TotalLiabilities, LiquidityRatio, InterestRateGap, CapitalAdequacyRatio.

def calculate_alm_metrics(balance_sheet: str, interest_rates: Dict[str, float]) -> str:
    """
    Calculates key ALM metrics including liquidity ratios, interest rate gaps, and capital adequacy.

    Parameters:
    - balance_sheet: JSON string — list of objects with keys Type('Asset' or 'Liability'),
                     Amount(float), Maturity(int, days), Currency(str).
                     Example: '[{"Type":"Asset","Amount":5000000,"Maturity":365,"Currency":"EUR"}]'
    - interest_rates: Dictionary with currency as key and current interest rate as value.
                      Example: {"EUR": 0.03, "USD": 0.05}

    Returns:
    - JSON string with TotalAssets, TotalLiabilities, LiquidityRatio, InterestRateGap, CapitalAdequacyRatio.
    """
    try:
        data = json.loads(balance_sheet) if isinstance(balance_sheet, str) else balance_sheet
        df = pd.DataFrame(data)

        total_assets = float(df[df['Type'] == 'Asset']['Amount'].sum())
        total_liabilities = float(df[df['Type'] == 'Liability']['Amount'].sum())
        liquidity_ratio = total_assets / max(total_liabilities, 1)

        def weighted_ir(row: Any) -> float:
            rate = interest_rates.get(row['Currency'], 0)
            return row['Amount'] * rate * (1 if row['Type'] == 'Asset' else -1)

        interest_rate_gap = float(df.apply(weighted_ir, axis=1).sum())
        capital = total_assets - total_liabilities
        capital_adequacy_ratio = capital / max(total_assets, 1)

        return json.dumps({
            'TotalAssets': round(total_assets, 2),
            'TotalLiabilities': round(total_liabilities, 2),
            'LiquidityRatio': round(liquidity_ratio, 4),
            'InterestRateGap': round(interest_rate_gap, 2),
            'CapitalAdequacyRatio': round(capital_adequacy_ratio, 4)
        }, indent=2)

    except Exception as e:
        return json.dumps({'error': str(e)})

file_tools

FileTools from agno framework

Test Agent

Configure model settings at the top, then test the agent below

Enter your question or instruction for the agent