Methodology

How TradeMind AI generates signals, locks them permanently, tracks outcomes, and computes performance metrics. Everything is derived from the live database โ€” no hardcoded numbers, no cherry-picking.

1. How signals are generated

When a user requests a signal for a ticker, the system assembles a structured prompt for the Claude AI model containing:

  • Latest closing price, 14-day RSI, 20/50-day moving averages, ATR, Bollinger Band position
  • Fundamental data: P/E ratio, market cap, analyst target, next earnings date
  • Recent news sentiment score (โˆ’100 to +100) from the last 24 hours
  • Sector context: sector average monthly performance

Claude returns a structured JSON signal or NO_SIGNAL with a reason. A signal is only issued when the model meets all validity constraints:

  • Entry within 0.5% of last close (1% for crypto)
  • Stop loss between 0.5%โ€“5% from entry (up to 8% for crypto)
  • Risk/reward ratio โ‰ฅ 1.5 : 1
  • Confidence score โ‰ฅ 50 / 100
  • At least 2 specific, numbered signal drivers

The model ID, training date, and full driver list are stored with every signal.

2. The immutable lock

The moment a signal is saved to the database, locked_at is set equal to issued_at. This happens in the same database transaction as the insert.

After that point, no field can ever be changed: not the entry price, not the stop, not the target, and not the direction. There is no admin panel that allows edits. The application code contains no UPDATE statement for signal fields.

You can verify this by comparing the issued_at timestamp on any signal against publicly available price data for that ticker on that date.

3. R-multiple formula

R-multiple measures performance relative to the initial risk taken. One "R" equals the distance between entry and stop.

// BULLISH signal

R = (outcome_price โˆ’ entry_price) / (entry_price โˆ’ stop_price)

// BEARISH signal

R = (entry_price โˆ’ outcome_price) / (entry_price โˆ’ stop_price)

  • +2.0R โ€” profit of twice the risk (target hit early)
  • +1.5R โ€” minimum target, always โ‰ฅ 1.5R at issuance
  • โˆ’1.0R โ€” stop loss triggered, full risk lost

A 0.1% slippage assumption is applied to all calculations to reflect real-world execution costs.

4. Auto-resolution

A background task runs every hour to resolve PENDING signals automatically:

  • BULLISH: resolved as HIT_TARGET if current price โ‰ฅ target; as STOPPED_OUT if current price โ‰ค stop
  • BEARISH: reversed โ€” hit target if price โ‰ค target, stopped out if price โ‰ฅ stop
  • NEUTRAL: never auto-resolved; requires manual review

Stocks are resolved against the latest stored daily close from our database. Crypto signals (e.g., BTC-USD) are resolved against the live CoinGecko price, updated every hour โ€” because crypto markets never close.

Verify it yourself

Every signal ever issued is in the public signal history โ€” including every loss. The timestamp on each signal proves it existed before the market move.

Browse all signals