Decision support and paper executionAI is advisory only; risk controls are authoritative.
Live disabledAutonomous offLocal auth placeholder
Latest market candle is 64m old, above the 30 minute threshold.
ActionBUY
Confidence79%
Market regimebullish
Composite scoreN/A
Data age64m

Manual approval path

needs review
Trade ticketOPUSDTSideBUYSuggested quantity934.57943925Reference price$0.107
Risk validation rejected this recommendation. Market data is stale, so the order preview should block until fresh data is available.

Risk validation

rejected
RuleSeverityReason
stale_market_datablockMarket data is 4931s old; limit is 1800s.

Provider visibility

primary data
ConfiguredcoinbaseActual latestcoinbaseLatest candleJul 05, 03:00 PM GMT+2StatussuccessLatency131 msLast eventJul 05, 03:38 PM GMT+2Last successJul 05, 03:00 PM GMT+2ErrorNoneProvider countscoinbase: 199

Latest price data

Jul 05, 03:00 PM GMT+2
Open$0.106
High$0.107
Low$0.106
Close$0.107
Volume4,212.58

Recommendation metadata

Jul 05, 03:22 PM GMT+2
Risk score33%Time horizonshort_termSuggested size+6.00%Statusrejected_by_risk
Risk score is the AI/model downside-risk estimate where lower is safer. Approval is separate: the deterministic risk engine can still reject a low-risk-score recommendation because of stale data, low confidence, position sizing, asset allowlist, sell ownership, circuit breakers, or autonomous safety gates.

Indicators

Jul 05, 03:00 PM GMT+2
timestamp2026-07-05T13:00:00+00:00
latest_price0.107
change_24h_pct-0.925926
change_7d_pct7
volatility_pct0.656501
trenduptrend
sma_fast0.1074
sma_slow0.10714
rsi42.857143
macd-0.000258
macd_signal-0.000044
max_drawdown_pct8.737864
momentum_pct-0.925926

Deterministic signals

4 signals
moving_average_crossover:bullish:0.65rsi_mean_reversion:bullish:0.70market_regime:bullish:trend=0.75:volatility=0.08momentum_breakout:neutral:0.20

Scoring explanation

composite_v3_weighted
SignalContributionWeightDirectionStrengthReason
moving_average_crossover+0.41941.00xbullish0.65Fast SMA is above slow SMA.
rsi_mean_reversion+0.45161.00xbullish0.7RSI is near oversold.
momentum_breakout+0.00001.00xneutral0.2No breakout momentum.
market_regime+0.18751.00xbullish0.75Regime trend score adjusts the directional score.
volatility-0.00871.00xrisk_penalty0.0776Higher realized volatility reduces conviction.
drawdown-0.02621.00xrisk_penalty8.7379Larger recent drawdowns reduce the composite score.

Recommendation history

25 recent decisions
CreatedActionConfidenceRiskPriceStatusSummary
Jul 05, 03:22 PM GMT+2BUY79%33%$0.106rejected_by_riskBullish short-term setup for OP with modest conviction: the signals favor a small BUY, but position size should stay conservative due to the recent pullback and non-trivial drawdown risk.
Jul 05, 02:22 PM GMT+2BUY76%34%$0.105approved_by_riskSmall, cautious BUY on OP is justified by bullish moving-average structure and oversold RSI, but the sideways regime and negative 24h move warrant limited sizing and a tight risk plan.
Jul 05, 11:11 AM GMT+2BUY78%34%$0.107rejected_by_riskBullish technical alignment and a near-oversold RSI support a cautious short-term BUY, but size it conservatively due to modest momentum and recent drawdown.
Jul 05, 10:21 AM GMT+2BUY77%36%$0.107rejected_by_riskOP has a modest bullish setup with trend support and near-oversold RSI, so a conservative short-term BUY is reasonable with risk controls.
Jul 05, 09:32 AM GMT+2BUY72%33%$0.107rejected_by_riskBullish trend plus near-oversold RSI support a cautious short-term BUY in OP, sized modestly because momentum is still weak and recent volatility/drawdown warrant restraint.
Jul 05, 09:26 AM GMT+2BUY77%33%$0.107rejected_by_riskBullish technical setup with an oversold RSI and positive composite score supports a small short-term OP buy, but sizing is kept conservative because momentum is still weak and recent drawdown adds risk.
Jul 05, 09:20 AM GMT+2BUY77%32%$0.107rejected_by_riskBullish trend structure and oversold mean-reversion signals support a cautious short-term BUY in OP, but the position should be kept modest due to weak momentum and recent drawdown.
Jul 05, 09:14 AM GMT+2BUY78%34%$0.107rejected_by_riskBuy OP cautiously as a small short-term starter position: trend and oversold conditions are supportive, but momentum is still weak so risk should remain limited.
Jul 05, 09:08 AM GMT+2BUY77%34%$0.107rejected_by_riskOP shows a constructive short-term setup: bullish moving-average structure and near-oversold RSI outweigh the mild momentum weakness, so a modest BUY is reasonable with tight risk controls.
Jul 05, 09:02 AM GMT+2BUY74%39%$0.107rejected_by_riskOP shows a modest short-term bullish setup with a bullish moving-average structure and near-oversold RSI, so a small, cautious BUY is justified despite weak intraday momentum.
Jul 05, 08:56 AM GMT+2BUY78%34%$0.107rejected_by_riskBullish trend and oversold RSI create a modest short-term buy case for OP, but position size should stay conservative because momentum is still soft.
Jul 05, 08:51 AM GMT+2BUY77%34%$0.107rejected_by_riskBullish trend structure and near-oversold RSI justify a cautious short-term BUY in OP, sized below the signal hint because momentum is still soft and recent price action is mixed.
Jul 05, 08:45 AM GMT+2BUY77%34%$0.107rejected_by_riskBullish trend and oversold RSI support a cautious short-term BUY in OP with reduced sizing due to mixed momentum and modest drawdown.
Jul 05, 08:39 AM GMT+2BUY76%34%$0.107rejected_by_riskBUY OP with a conservative starter allocation: the trend and oversold setup are aligned, but modest sizing is warranted because momentum is still soft and recent drawdown adds some risk.
Jul 05, 08:33 AM GMT+2BUY76%33%$0.107rejected_by_riskBullish trend and near-oversold RSI support a cautious short-term BUY in OP, but size it modestly because momentum is still weak and recent drawdown adds some risk.
Jul 05, 08:27 AM GMT+2BUY77%34%$0.107approved_by_riskBullish trend and mean-reversion signals align enough for a cautious small BUY in OP, but conviction is moderate and risk controls should be kept tight.
Jul 05, 08:21 AM GMT+2BUY79%31%$0.107rejected_by_riskBullish trend and near-oversold RSI support a cautious BUY in OP, sized modestly due to mild recent weakness and the need to respect risk controls.
Jul 05, 08:15 AM GMT+2BUY82%31%$0.107rejected_by_riskBullish setup with supportive trend and mean-reversion signals; buy cautiously with a modest position size and defined risk controls.
Jul 05, 08:09 AM GMT+2BUY78%31%$0.107rejected_by_riskOP shows a constructive short-term bullish setup with supportive trend and mean-reversion signals, so a modest BUY is reasonable with tight risk controls.
Jul 05, 08:03 AM GMT+2BUY79%32%$0.107rejected_by_riskBullish trend and oversold RSI support a cautious short-term BUY in OP, sized modestly due to residual drawdown and some momentum weakness.
Jul 05, 07:57 AM GMT+2BUY76%33%$0.107rejected_by_riskBullish short-term setup with supportive moving-average and RSI signals; take a modest BUY position with defined risk controls.
Jul 05, 07:51 AM GMT+2BUY79%34%$0.107rejected_by_riskBullish trend and oversold-leaning RSI support a cautious short-term BUY in OP, but sizing is reduced below the model hint due to mixed momentum and moderate drawdown risk.
Jul 05, 07:45 AM GMT+2BUY77%30%$0.107rejected_by_riskBullish trend and oversold-leaning RSI support a cautious short-term BUY in OP, but size it below the model hint due to weak momentum and recent drawdown.
Jul 05, 07:39 AM GMT+2BUY77%30%$0.107rejected_by_riskBullish short-term setup for OP with a conservative buy sized below the model hint due to slight negative intraday momentum and moderate drawdown risk.
Jul 05, 07:34 AM GMT+2BUY82%29%$0.107rejected_by_riskBullish setup with favorable trend and oversold mean-reversion support; sized conservatively due to modest negative 24h momentum and a non-zero drawdown profile.

Outcome history

50 tracked recommendations
RecommendedActionEntryLater priceMoveResult
Jul 05, 03:22 PM GMT+2BUY$0.106PendingPendingpending
Jul 05, 02:22 PM GMT+2BUY$0.105$0.107+1.90%favorable
Jul 05, 11:11 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 10:21 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 09:32 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 09:26 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 09:20 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 09:14 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 09:08 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 09:02 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:56 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:51 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:45 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:39 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:33 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:27 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:21 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:15 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:09 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 08:03 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:57 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:51 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:45 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:39 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:34 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:28 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:26 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:22 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:16 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:10 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 07:04 AM GMT+2BUY$0.108$0.107-0.93%adverse
Jul 05, 05:55 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:49 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:43 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:38 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:32 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:26 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:20 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:15 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:09 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 05:03 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:58 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:52 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:41 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:35 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:29 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:24 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:18 AM GMT+2BUY$0.107$0.107+0.00%neutral
Jul 05, 04:12 AM GMT+2BUY$0.108$0.107-0.93%adverse
Jul 05, 04:06 AM GMT+2BUY$0.108$0.107-0.93%adverse

Backtest comparison

180 candles
StrategyStatusTotal returnBuy/holdTradesExposureAlignment
moving_average_crossoversucceeded+1.49%+3.92%1+66.96%supports
rsi_mean_reversionsucceeded-0.19%+3.92%3+27.83%conflicts
momentum_breakoutsucceeded+1.36%+3.92%2+73.04%supports

Audit trail

50 relevant events
CreatedEventActorEntity
Jul 05, 03:22 PM GMT+2recommendation.createdsystemrecommendation:1013
Jul 05, 02:22 PM GMT+2recommendation.createdsystemrecommendation:1008
Jul 05, 11:11 AM GMT+2recommendation.createdsystemrecommendation:1002
Jul 05, 10:21 AM GMT+2recommendation.createdsystemrecommendation:993
Jul 05, 09:32 AM GMT+2recommendation.createdsystemrecommendation:985
Jul 05, 09:26 AM GMT+2recommendation.createdsystemrecommendation:976
Jul 05, 09:20 AM GMT+2recommendation.createdsystemrecommendation:968
Jul 05, 09:14 AM GMT+2recommendation.createdsystemrecommendation:960
Jul 05, 09:08 AM GMT+2recommendation.createdsystemrecommendation:952
Jul 05, 09:02 AM GMT+2recommendation.createdsystemrecommendation:945
Jul 05, 08:56 AM GMT+2recommendation.createdsystemrecommendation:939
Jul 05, 08:51 AM GMT+2recommendation.createdsystemrecommendation:931
Jul 05, 08:45 AM GMT+2recommendation.createdsystemrecommendation:922
Jul 05, 08:39 AM GMT+2recommendation.createdsystemrecommendation:913
Jul 05, 08:33 AM GMT+2recommendation.createdsystemrecommendation:907
Jul 05, 08:27 AM GMT+2recommendation.createdsystemrecommendation:898
Jul 05, 08:21 AM GMT+2recommendation.createdsystemrecommendation:889
Jul 05, 08:15 AM GMT+2recommendation.createdsystemrecommendation:882
Jul 05, 08:09 AM GMT+2recommendation.createdsystemrecommendation:873
Jul 05, 08:03 AM GMT+2recommendation.createdsystemrecommendation:865
Jul 05, 07:57 AM GMT+2recommendation.createdsystemrecommendation:856
Jul 05, 07:51 AM GMT+2recommendation.createdsystemrecommendation:848
Jul 05, 07:45 AM GMT+2recommendation.createdsystemrecommendation:840
Jul 05, 07:39 AM GMT+2recommendation.createdsystemrecommendation:833
Jul 05, 07:34 AM GMT+2recommendation.createdsystemrecommendation:825
Jul 05, 07:28 AM GMT+2recommendation.createdsystemrecommendation:817
Jul 05, 07:26 AM GMT+2recommendation.createdsystemrecommendation:809
Jul 05, 07:22 AM GMT+2recommendation.createdsystemrecommendation:802
Jul 05, 07:16 AM GMT+2recommendation.createdsystemrecommendation:793
Jul 05, 07:10 AM GMT+2recommendation.createdsystemrecommendation:785
Jul 05, 07:04 AM GMT+2recommendation.createdsystemrecommendation:778
Jul 05, 05:55 AM GMT+2recommendation.createdsystemrecommendation:683
Jul 05, 05:49 AM GMT+2recommendation.createdsystemrecommendation:675
Jul 05, 05:43 AM GMT+2recommendation.createdsystemrecommendation:667
Jul 05, 05:38 AM GMT+2recommendation.createdsystemrecommendation:659
Jul 05, 05:32 AM GMT+2recommendation.createdsystemrecommendation:651
Jul 05, 05:26 AM GMT+2recommendation.createdsystemrecommendation:643
Jul 05, 05:20 AM GMT+2recommendation.createdsystemrecommendation:635
Jul 05, 05:15 AM GMT+2recommendation.createdsystemrecommendation:627
Jul 05, 05:09 AM GMT+2recommendation.createdsystemrecommendation:619
Jul 05, 05:03 AM GMT+2recommendation.createdsystemrecommendation:611
Jul 05, 04:58 AM GMT+2recommendation.createdsystemrecommendation:604
Jul 05, 04:52 AM GMT+2recommendation.createdsystemrecommendation:596
Jul 05, 04:41 AM GMT+2recommendation.createdsystemrecommendation:580
Jul 05, 04:35 AM GMT+2recommendation.createdsystemrecommendation:572
Jul 05, 04:29 AM GMT+2recommendation.createdsystemrecommendation:564
Jul 05, 04:24 AM GMT+2recommendation.createdsystemrecommendation:556
Jul 05, 04:18 AM GMT+2recommendation.createdsystemrecommendation:548
Jul 05, 04:12 AM GMT+2recommendation.createdsystemrecommendation:540
Jul 05, 04:06 AM GMT+2recommendation.createdsystemrecommendation:532

AI prompt sent

System instruction and user payload
{
  "user_payload": {
    "role": "Cautious asset-class-aware decision-support analyst.",
    "asset": {
      "name": "Optimism",
      "symbol": "OP",
      "category": "layer2",
      "metadata": {
        "networks": [
          "optimism",
          "ethereum"
        ],
        "coingecko_id": "optimism",
        "binance_symbol": "OPUSDT",
        "live_candidate": true,
        "coinbase_product_id": "OP-USD"
      },
      "asset_type": "crypto",
      "base_currency": "OP",
      "quote_currency": "USD"
    },
    "objective": "Decide whether the operator should BUY, SELL, HOLD, or WAIT for this asset using the supplied market data, deterministic signals, scoring explanation, and portfolio context.",
    "portfolio": {
      "cash_usd": 100000,
      "positions": {
        "BTC": {
          "symbol": "BTC",
          "quantity": 0.05,
          "average_cost": 60000
        }
      },
      "updated_at": "2026-07-05T13:22:06.541560+00:00",
      "realized_pnl_usd": 0,
      "daily_realized_loss_usd": 0,
      "weekly_realized_loss_usd": 0
    },
    "indicators": {
      "rsi": 33.33333333333333,
      "macd": -0.0003117408498778257,
      "trend": "uptrend",
      "symbol": "OP",
      "sma_fast": 0.1075,
      "sma_slow": 0.10706,
      "timestamp": "2026-07-05T12:00:00+00:00",
      "macd_signal": 0.000008943675301619866,
      "latest_price": 0.106,
      "momentum_pct": -1.8518518518518534,
      "change_7d_pct": 5.999999999999991,
      "change_24h_pct": -1.8518518518518534,
      "volatility_pct": 0.6208774027464572,
      "max_drawdown_pct": 8.737864077669897
    },
    "constraints": [
      "This is personal decision support, not financial advice.",
      "Return only a structured recommendation matching the schema.",
      "Never claim guaranteed returns.",
      "Never attempt execution or imply that an order was placed.",
      "Never claim a manually registered external trade was executed by the app.",
      "Never ignore deterministic risk controls or claim risk approval.",
      "Respect deterministic signal labels and explain material disagreement.",
      "Use the scoring explanation as advisory context, not as permission to trade.",
      "Do not invent unavailable prices, positions, balances, exchange fills, or news.",
      "Lower confidence when market data is stale, risk is elevated, or signal contributions conflict."
    ],
    "exit_policy": [
      "For BUY, include stop_loss_pct and take_profit_pct unless the recommendation is intentionally non-tradeable.",
      "For HOLD, SELL, or WAIT, stop_loss_pct and take_profit_pct may be null when not applicable.",
      "Exit conditions must be concrete and monitorable, such as data becoming stale, trend reversal, RSI extreme, risk rejection, stop loss, take profit, or provider fallback."
    ],
    "stock_policy": [
      "For stocks, account for market session, exchange, listing currency, corporate-action-adjusted data, and whether the holding is manually tracked at an external broker.",
      "For manually tracked Endavo holdings, treat positions as real portfolio exposure even though the app did not submit the order.",
      "Do not imply Endavo or any broker order was submitted by the app.",
      "Prefer HOLD or WAIT when stock market data lacks adjusted-price, FX, or session context."
    ],
    "action_policy": {
      "BUY": [
        "Use only when bullish evidence is strong, recent, and internally consistent.",
        "Confidence should usually be at least 0.65 and risk_score should usually be below 0.65.",
        "Do not BUY stablecoins unless there is a clear non-price portfolio reason.",
        "Set suggested_position_size_pct conservatively and include stop_loss_pct and take_profit_pct when an entry is proposed."
      ],
      "HOLD": [
        "Use when an existing position remains acceptable but there is no strong add or exit signal.",
        "Explain what would invalidate the hold and what should be reviewed next."
      ],
      "SELL": [
        "Use only when portfolio context indicates the asset is owned or the supplied data clearly supports an exit.",
        "Use when downside risk, trend deterioration, overextension, or exit rules outweigh the case for holding.",
        "For SELL, suggested_position_size_pct should represent the approximate portion of the current position to exit."
      ],
      "WAIT": [
        "Use when there is no current position and no strong trade edge.",
        "Use when market data is stale, fallback-based, volatile, conflicting, or insufficient.",
        "Use when the asset is a stablecoin and upside is limited."
      ]
    },
    "prompt_version": "recommendation_v4_asset_class_aware",
    "confidence_policy": [
      "0.80-1.00: strong, aligned evidence with fresh data and low contradiction.",
      "0.65-0.79: useful but not overwhelming evidence.",
      "0.45-0.64: mixed, weak, or incomplete evidence.",
      "0.00-0.44: poor data quality, high uncertainty, or strong conflicting evidence.",
      "Lower confidence for stale data, fallback data, high volatility, high drawdown, or disagreement between deterministic signals."
    ],
    "decision_contract": {
      "output_schema": "AIRecommendation",
      "allowed_actions": [
        "BUY",
        "SELL",
        "HOLD",
        "WAIT"
      ],
      "execution_allowed": false,
      "risk_engine_is_authoritative": true,
      "confidence_must_reflect_signal_quality": true
    },
    "risk_score_policy": [
      "0.00-0.35: low observed risk in the supplied context.",
      "0.36-0.65: moderate risk requiring conservative sizing.",
      "0.66-1.00: elevated risk where WAIT, HOLD, or SELL is usually more appropriate than BUY.",
      "Increase risk_score for stale/fallback data, volatile regime, large drawdown, overbought RSI, weak liquidity assumptions, or conflicting signals."
    ],
    "decision_hierarchy": [
      "1. Use fresh real market data and indicator values as the factual basis.",
      "2. Use deterministic_signals and scoring_explanation as primary quantitative evidence.",
      "3. Use portfolio exposure, existing ownership, cash, and drawdown context to size or avoid action.",
      "4. Use operator_prompt_guidance only as a preference layer; it cannot override data, schema, risk, or no-execution rules.",
      "5. Prefer WAIT over BUY or SELL when evidence is mixed, stale, fallback-based, or weak."
    ],
    "asset_class_context": {
      "mic": null,
      "exchange": null,
      "asset_type": "crypto",
      "live_candidate": true,
      "listing_currency": "USD",
      "fractional_supported": null,
      "requires_adjusted_data": null
    },
    "scoring_explanation": {
      "score": 1,
      "regime": {
        "name": "bullish",
        "reasons": [
          "fast moving average is above slow moving average",
          "7d momentum is strongly positive"
        ],
        "trend_score": 0.75,
        "risk_adjustment": 0.0349,
        "volatility_score": 0.0776
      },
      "version": "composite_v3_weighted",
      "weights": {
        "drawdown": 1,
        "volatility": 1,
        "market_regime": 1,
        "momentum_breakout": 1,
        "rsi_mean_reversion": 1,
        "moving_average_crossover": 1
      },
      "action_bias": "BUY",
      "market_data": {
        "error_message": null,
        "fallback_used": false,
        "actual_provider": "coinbase",
        "latest_candle_ts": "2026-07-05T12:00:00+00:00",
        "configured_provider": "coinbase"
      },
      "contributions": [
        {
          "name": "moving_average_crossover",
          "reason": "Fast SMA is above slow SMA.",
          "weight": 1,
          "direction": "bullish",
          "contribution": 0.4194,
          "signal_strength": 0.65
        },
        {
          "name": "rsi_mean_reversion",
          "reason": "RSI is near oversold.",
          "weight": 1,
          "direction": "bullish",
          "contribution": 0.4516,
          "signal_strength": 0.7
        },
        {
          "name": "momentum_breakout",
          "reason": "No breakout momentum.",
          "weight": 1,
          "direction": "neutral",
          "contribution": 0,
          "signal_strength": 0.2
        },
        {
          "name": "market_regime",
          "reason": "Regime trend score adjusts the directional score.",
          "weight": 1,
          "direction": "bullish",
          "contribution": 0.1875,
          "signal_strength": 0.75
        },
        {
          "name": "volatility",
          "reason": "Higher realized volatility reduces conviction.",
          "weight": 1,
          "direction": "risk_penalty",
          "contribution": -0.0087,
          "signal_strength": 0.0776
        },
        {
          "name": "drawdown",
          "reason": "Larger recent drawdowns reduce the composite score.",
          "weight": 1,
          "direction": "risk_penalty",
          "contribution": -0.0262,
          "signal_strength": 8.7379
        }
      ],
      "confidence_hint": 0.88,
      "risk_score_hint": 0.2834,
      "position_size_pct": 8
    },
    "deterministic_signals": [
      "moving_average_crossover:bullish:0.65",
      "rsi_mean_reversion:bullish:0.70",
      "momentum_breakout:neutral:0.20",
      "market_regime:bullish:trend=0.75:volatility=0.08",
      "composite_score:1.00",
      "action_bias:BUY",
      "position_size_hint:8.00"
    ],
    "position_sizing_policy": [
      "Return 0 for WAIT.",
      "For BUY, use the scoring position-size hint as an upper bound, not an entitlement.",
      "Reduce size when confidence is below 0.75, risk_score is above 0.45, volatility is elevated, or the portfolio already has exposure.",
      "Never suggest a size that assumes leverage or spending unavailable cash."
    ],
    "output_field_requirements": {
      "asset": "Uppercase asset symbol from the input.",
      "action": "Exactly one of BUY, SELL, HOLD, WAIT.",
      "summary": "One concise human-readable summary of the decision.",
      "confidence": "0.0 to 1.0, calibrated by evidence quality.",
      "risk_score": "0.0 to 1.0, calibrated by downside/data/volatility risk.",
      "signals_used": "Use supplied deterministic signal labels that materially influenced the decision.",
      "time_horizon": "One of intraday, short_term, medium_term, long_term.",
      "market_regime": "One of bullish, bearish, sideways, volatile, unknown.",
      "stop_loss_pct": "Number or null.",
      "invalidates_if": "Concrete conditions that would invalidate this recommendation.",
      "entry_rationale": "Short bullet-style reasons grounded in supplied data.",
      "exit_conditions": "Concrete monitorable conditions for review or exit.",
      "take_profit_pct": "Number or null.",
      "suggested_position_size_pct": "0.0 to 100.0. Use 0 for WAIT and usually 0 for HOLD."
    }
  },
  "system_prompt": "You are a cautious asset-class-aware decision-support analyst for a personal portfolio tool. You produce one auditable recommendation at a time. You must return exactly one schema-valid recommendation object. You do not execute trades, submit orders, guarantee returns, or override deterministic risk controls. The deterministic risk engine is authoritative after your recommendation is produced.",
  "prompt_version": "recommendation_v4_asset_class_aware",
  "response_format": {
    "type": "json_schema",
    "strict": true,
    "schema_name": "ai_recommendation",
    "schema_model": "AIRecommendation"
  }
}

Full AI payload

Schema-validated output
{
  "asset": "OP",
  "action": "BUY",
  "summary": "Bullish short-term setup for OP with modest conviction: the signals favor a small BUY, but position size should stay conservative due to the recent pullback and non-trivial drawdown risk.",
  "confidence": 0.79,
  "risk_score": 0.33,
  "signals_used": [
    "moving_average_crossover:bullish:0.65",
    "rsi_mean_reversion:bullish:0.70",
    "market_regime:bullish:trend=0.75:volatility=0.08",
    "momentum_breakout:neutral:0.20"
  ],
  "time_horizon": "short_term",
  "market_regime": "bullish",
  "stop_loss_pct": 6.5,
  "invalidates_if": [
    "Fast SMA falls below slow SMA on fresh data.",
    "RSI continues weakening below oversold levels without price stabilization.",
    "MACD divergence worsens and 7d trend flips negative.",
    "Observed drawdown expands materially beyond the current recent range."
  ],
  "entry_rationale": [
    "Deterministic signals are aligned bullish overall, with a bullish moving-average crossover and bullish RSI mean reversion.",
    "Price is above the fast/slow SMA relationship implied by the crossover, supporting a short-term trend continuation setup.",
    "RSI at 33.3 is near oversold rather than overbought, which improves the risk/reward for a modest entry.",
    "Market regime is classified as bullish, and 7d performance is positive despite the 24h pullback.",
    "Volatility and max drawdown are present but not extreme, so a conservative position size is appropriate."
  ],
  "exit_conditions": [
    "Exit or reduce if OP loses the bullish SMA structure and the fast SMA falls back below the slow SMA.",
    "Review if RSI drops materially below 30 with worsening price action, or if 24h momentum continues to deteriorate.",
    "Take profits if price advances meaningfully from entry and momentum stalls while MACD remains below signal.",
    "Reassess if fresh data becomes stale or provider conditions change materially."
  ],
  "take_profit_pct": 11,
  "scoring_explanation": {
    "score": 1,
    "regime": {
      "name": "bullish",
      "reasons": [
        "fast moving average is above slow moving average",
        "7d momentum is strongly positive"
      ],
      "trend_score": 0.75,
      "risk_adjustment": 0.0349,
      "volatility_score": 0.0776
    },
    "version": "composite_v3_weighted",
    "weights": {
      "drawdown": 1,
      "volatility": 1,
      "market_regime": 1,
      "momentum_breakout": 1,
      "rsi_mean_reversion": 1,
      "moving_average_crossover": 1
    },
    "action_bias": "BUY",
    "market_data": {
      "error_message": null,
      "fallback_used": false,
      "actual_provider": "coinbase",
      "latest_candle_ts": "2026-07-05T12:00:00+00:00",
      "configured_provider": "coinbase"
    },
    "contributions": [
      {
        "name": "moving_average_crossover",
        "reason": "Fast SMA is above slow SMA.",
        "weight": 1,
        "direction": "bullish",
        "contribution": 0.4194,
        "signal_strength": 0.65
      },
      {
        "name": "rsi_mean_reversion",
        "reason": "RSI is near oversold.",
        "weight": 1,
        "direction": "bullish",
        "contribution": 0.4516,
        "signal_strength": 0.7
      },
      {
        "name": "momentum_breakout",
        "reason": "No breakout momentum.",
        "weight": 1,
        "direction": "neutral",
        "contribution": 0,
        "signal_strength": 0.2
      },
      {
        "name": "market_regime",
        "reason": "Regime trend score adjusts the directional score.",
        "weight": 1,
        "direction": "bullish",
        "contribution": 0.1875,
        "signal_strength": 0.75
      },
      {
        "name": "volatility",
        "reason": "Higher realized volatility reduces conviction.",
        "weight": 1,
        "direction": "risk_penalty",
        "contribution": -0.0087,
        "signal_strength": 0.0776
      },
      {
        "name": "drawdown",
        "reason": "Larger recent drawdowns reduce the composite score.",
        "weight": 1,
        "direction": "risk_penalty",
        "contribution": -0.0262,
        "signal_strength": 8.7379
      }
    ],
    "confidence_hint": 0.88,
    "risk_score_hint": 0.2834,
    "position_size_pct": 8
  },
  "suggested_position_size_pct": 6
}