PolyScore is an ELO-style rating from 0–100 that measures how strong a user’s verified trading signals are over time. It rewards getting the direction right and riding large moves, while softly incorporating how close the outcome was to the prediction.
One score, updated each time a signal is verified.
Every time one of your signals is verified, we compute a performance score \(S \in [0, 1]\) for that signal and update your PolyScore using an ELO-like rule:
Rnew = Rold + K × (S - E)
10).If a signal does better than expected (S > E), your PolyScore goes up. If it underperforms (S < E), your PolyScore goes down. The higher your score already is, the harder it becomes to move it further up.
We blend direction and % move into a single score.
For each verified signal, we currently use two components:
Direction component:
D = 1 if the prediction was correct (the signal is verified as
is_correct = true), otherwise D = 0.
Magnitude component (based on the verified accuracy percentage):
From the verification step we have accuracy_percentage, which measures how far the
outcome moved in the predicted direction. We normalise its magnitude as:
P = 0 if the signal was incorrect or the move was non-positive in the predicted direction.
Otherwise:
P = min(|accuracy\_percentage| / 100, 1.0)
This means:
Blended performance score:
We combine direction and magnitude as:
S = 0.7 × D + 0.3 × P
Direction correctness drives most of the score, while larger profitable moves add extra credit.
LONG prediction, verified as correct with accuracy_percentage = +8%.
SHORT prediction, verified as correct with accuracy_percentage = +60%.
Higher PolyScore means we expect you to produce strong signals.
PolyScore 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 PolyScore 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 | PolyScore (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.
Why we chose this structure, and what might evolve.
70%) in S.
P.
In the future, we may add an explicit entry-price-based profit component once we record entry prices for all signals. That would allow us to distinguish between:
The current design already moves in this direction by using the magnitude of the verified percentage move, while keeping the system simple, bounded, and robust enough for live use.