> For the complete documentation index, see [llms.txt](https://docs.trada.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trada.io/reference/formulas.md).

# Formulas & metrics

How Trada calculates win rate, expectancy, profit factor, drawdown, and the Health Score.

Trada is journaling and trade-copier software: it reads the closed and open trades synced from your connected accounts and computes the metrics you see on the report, dashboard, and journal. This page documents each formula so you can verify any number yourself.

{% hint style="info" %}
Every metric on this page describes **past activity** on your connected accounts. None of them forecasts, projects, or implies future results. A metric is a summary of what already happened, not a prediction of what will.
{% endhint %}

All monetary values are in **USD** — the only currency Trada displays. Trades are synced automatically from your connected accounts; there is no manual trade entry.

## Read the conventions first

A few rules apply to every formula below:

* **Trade classification.** A trade is a **win** when its P\&L is greater than 0, a **loss** when less than 0, and **breakeven** when exactly 0.
* **Breakeven handling varies by surface.** Report metrics and the Health Score **exclude** breakeven trades from win rate. The dashboard and copy-trading win rate **count** breakeven as a loss. Each section notes which rule it uses.
* **Rounding and signs.** A result of `-0.00` is shown as `0.00` with a neutral color. Division-by-zero cases are handled explicitly per metric.

## Win rate

The share of decided trades that were winners.

```
Win Rate = (Winning Trades / Total Trades) × 100
```

On **report metrics and the Health Score**, breakeven trades are excluded, so the denominator is wins plus losses only:

```
Win Rate = (Wins / (Wins + Losses)) × 100
```

Displayed to one decimal place (for example, `65.4%`). If there are no trades, the value shows as `—` or `∞` depending on the surface.

## Expectancy

Average profit or loss per trade over the period.

```
Expectancy = Total P&L / Total Trades
```

A signed per-trade currency value (for example, `+$45.50` or `-$12.30`). With zero trades it displays `$0.00`. Expectancy summarizes the average outcome of trades already taken; it is not a per-trade forecast.

## Profit factor

Gross winnings divided by gross losses.

```
Profit Factor = Gross Profit / Gross Loss
```

| Component        | Definition                                                |
| ---------------- | --------------------------------------------------------- |
| **Gross Profit** | Sum of all winning trades (P\&L > 0)                      |
| **Gross Loss**   | Absolute value of the sum of all losing trades (P\&L < 0) |

Special cases:

* `Gross Loss = 0` and `Gross Profit > 0` → displayed as `∞`.
* `Gross Profit = 0` → Profit Factor is `0`.

Shown to two decimal places (for example, `2.45`).

## Reward-to-risk ratio

Average win size relative to average loss size.

```
Average Win     = Sum(Winning Trades) / Count(Winning Trades)
Average Loss    = Abs( Sum(Losing Trades) / Count(Losing Trades) )
Reward-to-Risk  = Average Win / Average Loss
```

A ratio of `1.5` means the average win is 1.5× the average loss. This describes the shape of past trades, not the risk of any future one.

## Max drawdown

The largest peak-to-trough decline in account balance across the period.

```
Max Drawdown % = max( (Peak Balance - Trough Balance) / Peak Balance ) × 100
```

| Term       | Meaning                                  |
| ---------- | ---------------------------------------- |
| **Peak**   | Highest balance reached before a decline |
| **Trough** | Lowest balance reached after that peak   |

The calculation walks every intra-period balance change and reports the deepest decline. Example: a balance that peaks at $10,000 and falls to $8,500 has a max drawdown of `(10,000 − 8,500) / 10,000 = 15%`, displayed as `-15.2%`-style negative percentage.

## Equity

Balance including the unrealized result of open positions.

```
Balance   = Sum(Closed-position balances, incl. deposits/withdrawals)
Open P&L  = Sum(Unrealized P&L of all open positions)
Equity    = Balance + Open P&L
```

**Balance** counts closed trading P\&L plus deposits and withdrawals, and refreshes on page load. **Equity** and **Open P\&L** update live from the account feed; a directional arrow reflects any change against the previous value. Open P\&L is color-coded green above 0, red below 0, neutral at exactly `0.00`.

## Daily P\&L

Net result of all trades closed on a single calendar day.

```
Daily P&L = Sum(P&L of all trades closed on that calendar day)
```

Only trades **closed** on the day count — trades opened but not yet closed are excluded. Across several selected accounts, the day's values are summed. Days are bucketed in your configured profile timezone. A day is **winning** when Daily P\&L is above 0.

## Trading Health Score

The Health Score condenses six independent sub-scores — each normalized to a `0–100` range — into one summary value shown alongside the radar chart. The six axes are Max Drawdown, Profit Factor, Win Rate, Reward-to-Risk, Expectancy Quality, and Winning Days.

```
Overall Health Score = (
  MaxDD_Score + PF_Score + WR_Score +
  RR_Score + EQ_Score + WD_Score
) / 6
```

All six are weighted equally and the average is rounded to the nearest integer.

{% hint style="info" %}
The Health Score reads your account history and grades it against fixed reference points (for example, a profit factor of 3.0 maps to 100). A higher score reflects the qualities of trades already recorded. It is a descriptive summary, not a rating of future outcomes or a recommendation.
{% endhint %}

Throughout, `clamp(x, 0, 100)` returns `0` when `x < 0`, `100` when `x > 100`, and `x` otherwise.

### Max Drawdown sub-score

Lower drawdown scores higher.

```
MaxDD_Score = clamp(100 - abs(Max Drawdown %), 0, 100)
```

A 0% drawdown scores 100; a 15% drawdown scores `100 − 15 = 85`.

### Profit Factor sub-score

Normalized so a profit factor of 3.0 reaches the ceiling.

```
PF_Score = clamp( (Profit Factor / 3) × 100, 0, 100 )
```

A profit factor of 1.8 scores 60. If there are winning trades and no losing trades, `PF_Score = 100`; with no winning trades, `PF_Score = 0`.

### Win Rate sub-score

A direct mapping of the win-rate percentage.

```
WR_Score = clamp(Win Rate %, 0, 100)
```

A 65% win rate scores 65.

### Reward-to-Risk sub-score

Normalized so a ratio of 2.0 reaches the ceiling.

```
RR_Score = clamp( (Reward-to-Risk / 2) × 100, 0, 100 )
```

A ratio of 1.2 scores 60. With winning trades and no losing trades, `RR_Score = 100`; with no winning trades, `RR_Score = 0`.

### Expectancy Quality sub-score

Expressed as expectancy relative to average balance, in basis points.

```
Avg Balance = Sum(Daily Closing Balances) / Number of Trading Days

If Expectancy > 0:
  EQ_Score = clamp( (Expectancy / Avg Balance) × 10000, 0, 100 )
Else:
  EQ_Score = 0
```

Example: expectancy of `+$50` on an average balance of `$10,000` gives `(50 / 10,000) × 10,000 = 50`. Break-even or negative expectancy scores 0.

### Winning Days sub-score

A direct mapping of the share of profitable days.

```
Winning Days % = (Days with Positive P&L / Total Trading Days) × 100
WD_Score       = clamp(Winning Days %, 0, 100)
```

A trading day is any day with at least one trade. 72% winning days scores 72.

### Empty and edge states

{% hint style="info" %}
With **no trades** in the selected range, the card shows a **No data** state and hides the score badge. When a metric can't be computed (for example, Profit Factor with zero losses), its raw value displays `∞`, `$0.00`, or `—`, and that axis contributes its defined score to the average rather than breaking the calculation.
{% endhint %}

## Where filters apply

Every metric recalculates against the **currently filtered** trade set — date range, symbol, strategy, session, and account selection. Change a filter and the numbers, including the Health Score radar, recompute on the filtered data. The full breakdown of what counts as a trade, how timezones are applied, and real-time versus refresh-only fields lives in [Conventions](/reference/conventions.md).

## Related

* [Conventions](/reference/conventions.md) — timezones, breakeven rules, real-time vs. refresh
* [Health Score](/reports-and-analytics/health-score.md) — how the radar reads in the report
* [Reports overview](/reports-and-analytics/reports.md) — where these metrics appear
* [Glossary](/reference/glossary.md) — plain definitions of each term


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.trada.io/reference/formulas.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
