SQN, the System Quality Number, is a score for a trading system: your average R-multiple divided by the spread of your R-multiples, multiplied by the square root of the number of trades. It was created by Van Tharp to put average result, consistency and sample size into one figure. Its weak point is that last term: the same edge scores higher the more trades you feed it, so an SQN is only as honest as the trade count behind it. This page works the formula on ten trades, shows the sample-size trap in numbers, and says plainly what ExpectancyIQ does and does not calculate.
The SQN formula
SQN = √N × (average R ÷ standard deviation of R)
- R-multiple: a trade's profit or loss divided by the amount you risked on it. A trade that makes twice its risk is +2R; a stopped-out loser is −1R. See R-multiple.
- Average R: your expectancy in R, the mean R-multiple across the trades.
- Standard deviation of R: how widely the R-multiples scatter around that average. This page uses the sample version (dividing by N − 1); implementations differ, so check which one a tool uses.
- N: the number of trades. Several published descriptions cap N at 100 so that a long history cannot inflate the score. Not every tool does, which is another reason two SQNs can disagree.
The first two terms together are a signal-to-noise ratio: the average result measured in units of its own scatter. The √N then scales that ratio up with the evidence.
An SQN worked example with 10 trades
Ten trades, written in R:
| Trade | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| R | +2 | −1 | −1 | +3 | −1 | +1.5 | −1 | −1 | +2 | −0.5 |
- Sum of R: 3.0, so average R (expectancy) = 3.0 ÷ 10 = 0.30R
- Sample standard deviation of the ten values = 1.62R
- Signal-to-noise: 0.30 ÷ 1.62 = 0.185
- √10 = 3.16, so SQN = 3.16 × 0.185 = 0.59
A positive expectancy of 0.30R, and an SQN of 0.59. The scatter is five times the average, which is typical of a system that wins less than half the time: the average is real, but it is small next to how much any single trade can differ from it.
The SQN sample-size trap
Because of the √N term, SQN rises with the trade count even when nothing about the trading changes. Suppose the next 90 trades had exactly the same average (0.30R) and the same scatter (1.62R) as these ten. Then:
| Trades | Average R | Std dev of R | SQN |
|---|---|---|---|
| 10 | 0.30 | 1.62 | 0.59 |
| 100 | 0.30 | 1.62 | 1.85 |
| 400 | 0.30 | 1.62 | 3.70 |
This is the arithmetic of the formula, not a prediction that a real system keeps those statistics. It does show why the score cannot be compared across different trade counts. A 400-trade SQN of 3.7 and a 10-trade SQN of 0.59 describe the same edge. This is also why the cap at 100 trades exists in some versions. Without it, a mediocre edge traded often enough scores as excellent.
The opposite error is as easy. Add a single −1R trade to the original ten and the average falls to 0.18R, the scatter to 1.59R, and the SQN to 0.38. One trade moved the score by a third. Ten to thirty trades is not enough to rank a system on this number; see how many trades before you can trust a statistic.
What is a good SQN?
Published tables put a system below roughly 1.6 as hard to trade, around 2 to 3 as average to good, 3 to 5 as excellent, and a figure above about 7 as a sign of curve-fitting or too little data. The bands are not identical across sources, and I could not check them against Tharp's own text, so use them as rough orientation only. Three things matter more than the band:
- The trade count. Ask whether N was capped and how many trades there really were.
- Whether R was defined consistently. SQN is only as good as the risk figure behind each R-multiple. If your stops moved or were never recorded, the R values are guesses.
- Costs. An SQN built on gross results flatters a system that pays commissions and slippage on every trade.
Where SQN misleads traders
- It assumes R-multiples are comparable. If you vary what you risk without recording it, the R values mix different bets.
- It treats big wins and big losses alike. Standard deviation counts upside scatter as noise. A system with rare large winners is penalised for the very trades you want. The Sortino ratio applies the same fix for returns.
- It ignores order. Two sequences with the same trades in a different order have the same SQN but very different drawdowns. For the path, look at Calmar and the Monte Carlo simulation.
- It hides the shape of the distribution. Two very different systems can share a score. Expectancy and profit factor still need to be read beside it.
SQN vs Sharpe, Sortino and expectancy
- Sharpe and Sortino work on daily returns and are annualised; see the Sharpe ratio guide. SQN works on individual trades and is not annualised, so the two cannot be converted into each other.
- Expectancy is the numerator of SQN. SQN adds the scatter and the trade count.
- t-statistic. SQN has the same form as a one-sample t-statistic for "is the average R different from zero". That is a useful way to read it: a score near zero or below 1 means the average is not clearly separated from noise at that sample size. Treat it as a rough check, not a significance test, as trade results are rarely normally distributed.
Calculating SQN from your own trades
ExpectancyIQ does not currently show an SQN. It calculates expectancy in R, the first half of the formula, when the account has a risk-per-trade amount set, and its Performance report shows Sharpe, Sortino and Calmar ratios on daily returns. The methodology explains how R is derived. To get an SQN, export your trades, add an R column, and use =SQRT(COUNT(R))*AVERAGE(R)/STDEV.S(R) in a spreadsheet, with the range of R values in place of R. The expectancy calculator covers the average-R half, and the glossary defines SQN in short.