PolyRating is an ELO-style rating from 0–100 that measures how strong a user’s verified trading signals are over time. It now blends three ideas: how right you were on direction and accuracy, how consistently active you are, and how much engagement your signals receive.
One score, updated each time a signal is verified.
Every time one of your signals is verified, we compute a performance score S ∈ [0, 1] for that signal and update your PolyRating using an ELO-like rule:
Rnew = Rold + K × (S − E)If a signal does better than expected (S > E), your PolyRating goes up. If it underperforms (S < E), your PolyRating goes down. The higher your score already is, the harder it becomes to move it further up.
We blend direction, accuracy, frequency and engagement into a single score.
For each verified signal, we use three components:
1. Core component (direction + accuracy)
We start from the same idea as classic ELO, but tuned for trading signals: Direction (D): D = 1 if the prediction direction was correct, D = −1 if wrong. Magnitude (P): a damped version of accuracy_percentage, capped and curved so outliers don’t dominate.
The core per-signal score is symmetric around 0.5:
Score = clamp(0.5 + 0.5×wdir×D + 0.5×wgain×D×P)Here wdir and wgain are internal weights for direction vs magnitude of the move.
2. Frequency component
We look at how many of your verified signals fall inside a rolling recent window (e.g. the last 7 days). More signals in that window push your frequency score closer to 1: Sfreq ∈ [0, 1], centred around a neutral 0.5. Very low recent activity → Sfreq slightly below 0.5; high recent activity → Sfreq closer to 1. When a signal is wrong, high frequency helps mitigate the loss: frequent, active users lose a bit less PolyRating on each individual mistake.
3. Engagement component
Engagement looks at how much attention a specific signal received (comments and likes). Higher engagement pushes this score closer to 1: Seng ∈ [0, 1], also centred around 0.5. When a signal is wrong but had high engagement, we treat it more softly: high Seng reduces the size of the rating drop.
Putting it all together
The final per-signal performance score is a weighted blend:
S = 0.7×Score + 0.2×Sfreq + 0.1×SengThese percentages are configurable. By default:
LONG prediction, verified as correct with accuracy_percentage = +8%.
SHORT prediction, verified as correct with accuracy_percentage = +60%.
Higher PolyRating means we expect you to produce strong signals.
PolyRating is bounded between 0 and 100 and starts at 50 for every user. For each verified signal, we compute:
E = 1 / (1 + 10(BASE − R) / 400)If your PolyRating is above 50, we expect you to perform better than average (E moves closer to 1). If it’s below 50, expectations are lower (E moves closer to 0).
The final update is:
Rnew = clamp(Rold + K×(S − E), 0, 100)| Case | PolyRating (R) | S | E | ΔR = K·(S − E) |
|---|---|---|---|---|
| New user, solid win | 50 | 0.72 | ≈ 0.50 | +2.2 |
| High-rated user, small win | 80 | 0.65 | ≈ 0.88 | −2.3 |
| Mid-rated user, big loss | 60 | 0.05 | ≈ 0.65 | −6.0 |
As scores get higher, expectations increase and each additional “good” signal moves the score less. Conversely, a large, incorrect call from a highly-rated user can move the score down more sharply – although high recent frequency and strong engagement will now cushion that downside somewhat.
Why we chose this structure, and what might evolve.
The current design is intentionally modular: the 70% / 20% / 10% split and the shapes of the frequency and engagement curves are all configurable. This lets us fine-tune the PolyRating system over time while keeping the underlying ELO-style structure stable and predictable.