Core Features
Trading Signals
Every signal is generated by running five independent technical indicators and combining their outputs into a single confluence score. No black boxes — every formula is in apps/web/app/lib/ta-engine.ts.
Supported Instruments
XAUUSD
Gold
XAGUSD
Silver
USOIL
US Oil
BTCUSD
Bitcoin
ETHUSD
Ethereum
EURUSD
EUR/USD
GBPUSD
GBP/USD
USDJPY
USD/JPY
AUDUSD
AUD/USD
USDCAD
USD/CAD
USDCHF
USD/CHF
GBPJPY
GBP/JPY
EURJPY
EUR/JPY
Timeframes
M5
5-minute
Scalping, short-term momentum
M15
15-minute
Intraday swing entries
H1
1-hour
Main trading timeframe
H4
4-hour
Trend confirmation
D1
Daily
Higher-timeframe bias
Indicators
The TA engine runs five indicators on every symbol/timeframe combination. Each indicator casts a directional vote (bullish, bearish, or neutral) which is weighted into the final confluence score.
RSI — Relative Strength Index
Period: 14 · Method: Wilder's smoothing
MomentumRSI measures the speed and change of price movements on a scale of 0–100. TradeClaw uses Wilder's original exponential smoothing formula.
Oversold
< 30
Bullish
Neutral
30–70
Neutral
Overbought
> 70
Bearish
// Wilder's smoothing RSI (from ta-engine.ts)
function calcRSI(closes: number[], period = 14): RSIResult {
let avgGain = 0, avgLoss = 0;
for (let i = 1; i <= period; i++) {
const diff = closes[i] - closes[i - 1];
if (diff > 0) avgGain += diff; else avgLoss -= diff;
}
avgGain /= period; avgLoss /= period;
for (let i = period + 1; i < closes.length; i++) {
const diff = closes[i] - closes[i - 1];
avgGain = (avgGain * (period - 1) + Math.max(diff, 0)) / period;
avgLoss = (avgLoss * (period - 1) + Math.max(-diff, 0)) / period;
}
const rs = avgLoss === 0 ? 100 : avgGain / avgLoss;
return { value: 100 - 100 / (1 + rs) };
}MACD — Moving Average Convergence/Divergence
Fast: 12 · Slow: 26 · Signal: 9
TrendMACD measures the relationship between two EMAs. A positive histogram means short-term momentum is stronger than long-term — bullish. Negative — bearish.
Histogram > 0
Bullish
Histogram < 0
Bearish
MACD Line = EMA(12) - EMA(26)
Signal Line = EMA(9) of MACD Line
Histogram = MACD Line - Signal Line
EMA — Exponential Moving Averages
Periods: 20, 50, 200
TrendThree EMAs establish the trend bias. Price above EMA20 > EMA50 > EMA200 is a strong uptrend. A golden cross (EMA50 crossing above EMA200) is particularly weighted in the confluence score.
Price > EMA20 > EMA50
Bullish
Golden Cross (50 > 200)
Strong Bullish
Price < EMA20 < EMA50
Bearish
Death Cross (50 < 200)
Strong Bearish
Bollinger Bands
Period: 20 · Std Dev: 2
VolatilityThree bands (upper, middle SMA, lower) built from ±2 standard deviations. Price touching the lower band while other indicators are bullish = high-probability entry. Band squeeze (low bandwidth) often precedes a breakout.
Upper Band = SMA(20) + 2 × StdDev(20)
Middle Band = SMA(20)
Lower Band = SMA(20) - 2 × StdDev(20)
Bandwidth = (Upper - Lower) / Middle
Stochastic Oscillator
%K: 14 smooth 3 · %D: 3
MomentumCompares a closing price to its high-low range over 14 periods. Values below 20 (oversold) with %K crossing above %D is a buy signal. Values above 80 (overbought) with %K crossing below %D is a sell signal.
Oversold
< 20
Bullish
Neutral
20–80
Neutral
Overbought
> 80
Bearish
Confluence Scoring
Each indicator vote is weighted and summed to produce a final score from 0–100. The direction (BUY or SELL) is determined by whichever side has more weighted votes. A score of 80+ is considered high-confidence.
| Score Range | Label | Indicators Aligned |
|---|---|---|
| 80–100 | High Confidence | 4–5 of 5 |
| 65–79 | Moderate Confidence | 3–4 of 5 |
| 50–64 | Low Confidence | 2–3 of 5 |
| < 50 | Filtered / Not Emitted | < 2 of 5 |
Signals below 50 confidence are filtered before being emitted. The screener and signal feed default to showing only signals with confidence ≥ 65.
Signal Data Structure
interface TradingSignal {
id: string; // Unique signal ID
symbol: string; // e.g. "XAUUSD"
timeframe: string; // e.g. "H1"
direction: 'BUY' | 'SELL';
confidence: number; // 0–100 confluence score
entryPrice: number; // Current price at signal generation
tp1: number; // Take Profit 1 (1:1 R:R)
tp2: number; // Take Profit 2 (1:2 R:R)
tp3: number; // Take Profit 3 (1:3 R:R)
sl: number; // Stop Loss (ATR-based)
indicators: {
rsi: number;
macd: number; // histogram value
ema20: number;
ema50: number;
ema200: number;
bb_upper: number;
bb_lower: number;
stoch_k: number;
stoch_d: number;
};
timestamp: string; // ISO 8601
status: 'active' | 'tp1_hit' | 'tp2_hit' | 'tp3_hit' | 'sl_hit' | 'expired';
}Multi-Timeframe Consensus
The GET /api/signals/multi-tfendpoint calculates direction consensus across M15, H1, H4, and D1. When all four timeframes agree on direction, the signal is marked as "aligned" — historically the highest win-rate scenario.
minConfidence=80 and only trade when MTF consensus is aligned. This is the highest-probability setup in the platform.