Home › Templates › Trading performance report template
Trading Performance Report Template
A free trading performance report template for Excel and Google Sheets. Log closed trades plus deposits and withdrawals, pick any date range, and get net P&L, return on equity, a cash-flow-adjusted monthly return, win rate, profit factor, expectancy in $ and R, max drawdown, results by strategy and symbol, and a monthly table.
Use it in Google Sheets: choose File → Import → Upload in Sheets and pick the .xlsx, or upload it to Google Drive and open it with Google Sheets. No add-ons, no broker connection: you paste or type your closed trades.
| Month | Start equity | Deposits / withdrawals | Net P&L | Trades | Win rate | End equity | Monthly return | Linked to date |
|---|---|---|---|---|---|---|---|---|
| Jan 2026 | $20,000.00 | – | $649.19 | 15 | 46.7% | $20,649.19 | 3.25% | 3.25% |
| Feb 2026 | $20,649.19 | – | $710.64 | 20 | 50.0% | $21,359.83 | 3.44% | 6.80% |
| Mar 2026 | $21,359.83 | $5,000.00 | $817.08 | 16 | 50.0% | $27,176.91 | 3.41% | 10.44% |
| Apr 2026 | $27,176.91 | – | $755.99 | 18 | 50.0% | $27,932.90 | 2.78% | 13.52% |
| May 2026 | $27,932.90 | – | −$825.16 | 17 | 23.5% | $27,107.74 | −2.95% | 10.16% |
| Jun 2026 | $27,107.74 | −$2,500.00 | $46.12 | 18 | 44.4% | $24,653.86 | 0.19% | 10.37% |
| Jul 2026 | $24,653.86 | – | $621.91 | 20 | 45.0% | $25,275.77 | 2.52% | 13.15% |
| Aug 2026 | $25,275.77 | $3,000.00 | $485.24 | 21 | 42.9% | $28,761.01 | 1.82% | 15.21% |
| Sep 2026 | $28,761.01 | – | $237.83 | 24 | 41.7% | $28,998.84 | 0.83% | 16.16% |
What's inside the spreadsheet
| Tab | What you type | What it calculates |
|---|---|---|
| Start here | Nothing | Steps, how returns are measured, colour key, limits, disclaimer |
| Report | Period start and end date (B4, B5) | Trading results, account and returns, breakdowns by strategy, side and symbol, a monthly table for up to 36 months, two charts, a status check |
| Closed trades | Up to 1,000 rows: close date, symbol, strategy, side (Long/Short), net P&L after fees, risk in $ (optional), notes | Grey helper columns: R multiple, in-period flag, equity before each trade, drawdown, streaks, first-seen lists of symbols and strategies, a date-order check |
| Cash flows | Up to 300 rows: date, Deposit or Withdrawal, amount | Signed amounts used for equity and the cash-flow weights |
| Example Report, Example Trades, Example Cash flows | Already filled | 169 fictional trades and four cash flows, so every formula is visible and working |
How it differs from a journal or a backtest. A trading journal records why you took each trade, and the backtesting spreadsheet tests a rule on past data before you trade it. This template is the periodic report you run after the fact: it reads real closed trades and real account cash flows, for exactly the dates you choose, and turns them into returns on your capital as well as trade statistics.
Sample rows from Example Trades (fictional):
| Close date | Symbol | Strategy | Side | Net P&L | Risk ($) | R |
|---|---|---|---|---|---|---|
| 2026-01-05 | STK-D | Breakout | Long | −$91.85 | $100.00 | -0.92R |
| 2026-01-07 | STK-A | Breakout | Short | −$101.22 | $100.00 | -1.01R |
| 2026-01-08 | STK-G | Breakout | Long | $250.12 | $100.00 | 2.50R |
| 2026-01-09 | STK-C | Pullback | Long | −$99.01 | $100.00 | -0.99R |
| 2026-01-09 | STK-F | Mean reversion | Long | $128.13 | $100.00 | 1.28R |
| 2026-01-12 | STK-E | Pullback | Long | −$95.80 | $100.00 | -0.96R |
How to use it
- Open Cash flows. Log every deposit and withdrawal, including the first deposit that funded the account. Type amounts as positive numbers and pick the type.
- Open Closed trades. Add one row per closed trade, oldest first: close date, symbol, strategy, side, net P&L after commissions and fees, and the dollar risk you planned at the stop. Most brokers can export closed trades to CSV; paste the columns in.
- Open Report and type the period start and end dates in B4 and B5: a month, a quarter, a year or since you opened the account.
- Check that the status in B6 says OK, and read any data notes in B7.
- Read the results block, the breakdowns by strategy, side and symbol, and the monthly table from row 100. The charts sit to the right of the results.
- Change the dates to compare periods, for example this quarter against the last one.
The metrics and how they are calculated
| Metric | Definition used in the sheet |
|---|---|
| Win rate | Winning trades ÷ all trades in the period. Breakeven trades (P&L exactly 0) count as trades but not as wins. |
| Average win, average loss, payoff ratio | Gross profit ÷ winning trades; gross loss ÷ losing trades; average win ÷ |average loss|. |
| Profit factor | Gross profit ÷ |gross loss|. Shows No losses when there were no losing trades. |
| Expectancy ($) | Net P&L ÷ trades: the average result per trade. |
| Expectancy (R) | Average of P&L ÷ risk, over trades with a risk amount logged. |
| Max drawdown ($) | Largest drop of cumulative closed P&L from its running high, starting at 0 on the period start. Deposits and withdrawals are not P&L, so they never create or hide a drawdown. |
| Max drawdown (%) | The same on a return index: each trade's P&L ÷ equity just before it, compounded. A $500 loss on a $20,000 account counts as 2.5% even after a deposit has grown the balance. |
| Longest losing streak | Most losing trades in a row, in date order, inside the period. A win or a breakeven trade ends the streak. |
| Equity at period start | Deposits − withdrawals + closed P&L before the start date. |
| Return on starting equity | Net P&L ÷ equity at period start. |
| Linked monthly return | Each month's Modified Dietz return, geometrically linked across the period (next section). |
Exact formulas from the workbook (row 7 is the first trade or cash-flow row; row 101 is the first month):
| Field | Formula |
|---|---|
| Closed trades: in period (J7) | =IF(I7=1,IF(AND(A7>='Example Report'!$B$4,A7<='Example Report'!$B$5),1,0),0) |
| Closed trades: R multiple (K7) | =IF(AND(I7=1,N(F7)>0),E7/F7,"") |
| Closed trades: equity before trade (N7) | =IF(I7=1,SUMIFS('Example Cash flows'!$E$7:$E$56,'Example Cash flows'!$F$7:$F$56,"<="&A7)+SUM(O$6:O6),"") |
| Closed trades: losing streak (W7) | =IF(J7=1,IF(E7<0,N(W6)+1,0),N(W6)) |
| Closed trades: drawdown $ (V7), from cumulative P&L (T7) and its peak (U7) | =IF(J7=1,T7-U7,"") |
| Cash flows: signed amount (E7) | =IF(AND(ISNUMBER(A7),ISNUMBER(C7)),IF(B7="Withdrawal",-ABS(C7),ABS(C7)),0) |
| Report: win rate (B13) | =IF(N(B9)=0,"",B10/B9) |
| Report: profit factor (B20) | =IF(N(B9)=0,"",IF(B15=0,"No losses",B14/ABS(B15))) |
| Report: expectancy in R (B23) | =IF(N(B22)=0,"",SUM('Example Trades'!$M$7:$M$206)/B22) |
| Report: max drawdown $ (B26) | =IF(N(B9)=0,"",MIN('Example Trades'!$V$7:$V$206)) |
| Report: equity at period start (B32) | =IF($B$6<>"OK","",SUMIFS('Example Cash flows'!$E$7:$E$56,'Example Cash flows'!$F$7:$F$56,"<"&B4)+SUMIFS('Example Trades'!$O$7:$O$206,'Example Trades'!$A$7:$A$206,"<"&B4)) |
| Report: return on starting equity (B37) | =IF(B32="","",IF(B32<=0,"n/a: no equity at start",B35/B32)) |
| Monthly table: weighted flows (F101) | =IF(A101="","",SUMPRODUCT(('Example Cash flows'!$F$7:$F$56>=B101)*('Example Cash flows'!$F$7:$F$56<=C101)*'Example Cash flows'!$E$7:$E$56*(C101-'Example Cash flows'!$F$7:$F$56+1))/(C101-B101+1)) |
| Monthly table: monthly return (K101) | =IF(A101="","",IF(D101+F101<=0,"",G101/(D101+F101))) |
| Monthly table: chain factor (M102) | =IF(ISNUMBER(M101),M101,1)*(1+N(K102)) |
| Report: linked monthly return (B38) | =IF($B$6<>"OK","",M136-1) |
The breakdown tables list each strategy and symbol in the order it first appears, using a running COUNTIFS in helper columns Y and Z and INDEX/MATCH on the Report tab. That keeps the file free of UNIQUE, FILTER and other dynamic-array functions, so it behaves the same in Excel 2016 and Google Sheets.
Measuring return when you add or withdraw money
Net P&L in dollars is the same however you measure it. The return percentage is not, because the balance it is measured against changes every time you deposit or withdraw. The sheet shows two numbers so you can see the difference.
1. Return on starting equity
Net P&L ÷ equity at the period start. It is easy to read and correct when no money moved in the period. A deposit in the middle of the period lets the new money earn P&L that is still divided by the old balance, so the return looks higher than the trading earned; a withdrawal does the opposite. If the account was funded inside the period, there is no starting equity and the cell shows n/a.
2. Linked monthly return (time-weighted style)
The GIPS standards, the CFA Institute's performance presentation standards, prefer a time-weighted return. The GIPS Guidance Statement on Calculation Methodology explains why: "The GIPS standards require a time-weighted rate of return because it removes the effects of external cash flows, which are generally client-driven." For a trader, deposits and withdrawals are the external cash flows.
The same statement says that "the most accurate return is calculated by valuing the portfolio at the time of the external cash flow", then linking the sub-period returns. It also describes the Modified Dietz method as an approximation that weights each cash flow by the share of the period it was in the portfolio. The template uses that method for each month:
Monthly return = Net P&L ÷ (start equity + Σ cash flow × days held ÷ days in the month)
Linked return = (1 + r_Jan) × (1 + r_Feb) × … × (1 + r_last) − 1
Linking is the step the GIPS standards for asset owners (2020) require for time-weighted returns: "Geometrically link periodic and sub-period returns." The first and last month are cut to your period dates. The sheet counts a cash flow from the start of its day, so a deposit on the 16th of a 31-day month is weighted 16 ÷ 31. The GIPS formula counts it from the end of the day; on a monthly return the difference is small.
What about a money-weighted return?
A money-weighted return is the internal rate of return of your cash flows. It rewards adding money before a good stretch and penalises adding it before a bad one, so it measures what happened to your money, not how well you traded. The CFA Institute's Rates and Returns reading lists, as a learning outcome, being able to "compare the money-weighted and time-weighted rates of return and evaluate the performance of portfolios based on these measures". Its overview of the GIPS standards notes: "Time-weighted returns are required for all portfolios except portfolios meeting certain criteria." The sheet does not calculate a money-weighted return; a personal trading account's deposits are your own decisions, and the linked monthly return is the better guide to the trading itself.
Limits of the method. This is a time-weighted-style approximation, not a GIPS-compliant return. Equity is on a closed-trade basis: open positions are not valued at month-end or at the time of a deposit, so a trade held across a month-end puts all its P&L in the month it closed. Drawdown and monthly returns can therefore look smoother than the account really was. Fees must already be in net P&L; interest, dividends and platform charges that are not tied to a trade are not captured unless you log them as trades.
Worked example from the sample data
March: a mid-month deposit
Equity on 1 March was $21,359.83. A $5,000.00 deposit arrived on 16 March and was in the account for 16 of 31 days, so its weight is 16 ÷ 31 and it adds $2,580.65 to the base. March's 16 trades made $817.08:
$817.08 ÷ ($21,359.83 + $2,580.65) = 3.41%
Dividing by the starting equity alone would give 3.83%, and dividing by the end-of-month balance would give 3.01%. The weighted base sits between the two.
The whole period
Linking the nine monthly returns gives 16.16%. Net P&L of $3,498.84 on the $20,000.00 starting equity is 17.49%: higher, because the $8,000.00 deposited during the period also earned P&L. As a cross-check, a day-by-day linked return on the same closed-trade equity (computed in Python, not in the sheet) gives 15.47%; the monthly approximation is close but not identical.
May: drawdown and losing streak
May was the only losing month (−$825.16, −2.95%). The 13-trade losing streak ran from 1 to 19 May, and cumulative closed P&L fell $1,643.23 from its 30 April high to 19 May, the period's max drawdown. In return terms that is −5.88%.
By strategy and side
| Group | Trades | Win rate | Net P&L | Profit factor | Expectancy ($) | Expectancy (R) |
|---|---|---|---|---|---|---|
| Breakout | 61 | 36.1% | $2,402.14 | 1.55 | $39.38 | 0.31R |
| Pullback | 45 | 44.4% | $1,021.94 | 1.35 | $22.71 | 0.18R |
| Mean reversion | 63 | 50.8% | $74.76 | 1.02 | $1.19 | 0.04R |
| Long | 126 | 42.1% | $2,417.93 | 1.28 | $19.19 | 0.17R |
| Short | 43 | 48.8% | $1,080.91 | 1.43 | $25.14 | 0.20R |
In this made-up sample, Mean reversion has the highest win rate (50.8%) but the lowest expectancy (0.04R), while Breakout wins only 36.1% of the time with the highest expectancy (0.31R). That is why the report shows win rate next to payoff and expectancy rather than on its own. A sample of a few dozen trades per group is small; treat differences as questions to look into, not conclusions.
Common mistakes
- Logging the first deposit as profit. Funding goes in Cash flows. A deposit typed as a trade inflates P&L, win rate and return.
- Gross instead of net P&L. Commissions, fees and financing reduce results. Type P&L after them.
- Unsorted trades. Drawdown, streaks and equity-before-trade follow row order. Sort by close date; the status cell warns if a row is out of order.
- Typing risk as a percentage. Risk ($) is the dollar amount you would lose at the stop, such as 100, not 0.5%.
- Quoting the simple return after big deposits. When money moved during the period, use the linked monthly return to judge the trading.
- Reading a few weeks of trades as a verdict. Small samples swing. Compare several periods before changing a strategy.
FAQ
How do you calculate trading performance?
Start from closed trades and your deposits and withdrawals. Add up net P&L for the period, then measure it against your capital: net P&L ÷ equity at the start gives a simple return, and linking monthly returns that adjust for cash flows gives a time-weighted-style return. Add trade statistics: win rate, average win and loss, profit factor, expectancy and max drawdown. In the fictional example, 169 trades made $3,498.84 net, a 17.49% return on starting equity and a 16.16% linked monthly return.
What is the difference between time-weighted and money-weighted return?
A time-weighted return removes the effect of when money was added or taken out; a money-weighted return (an internal rate of return) includes it, so it is higher if you added money before a good stretch and lower if you added it before a bad one. The GIPS Guidance Statement on Calculation Methodology says the GIPS standards require a time-weighted rate of return "because it removes the effects of external cash flows, which are generally client-driven." Use time-weighted to judge your trading; a money-weighted return describes what happened to your money.
How do deposits and withdrawals affect trading returns?
If you divide P&L by starting equity, a deposit in the middle of the period lets the new money earn P&L that is counted against the old balance, which overstates the return; a withdrawal does the opposite. In the example, $8,000.00 of deposits and $2,500.00 of withdrawals make the simple return 17.49% while the linked monthly return is 16.16%. The template logs cash flows separately so they never count as profit or loss.
What is a good profit factor?
Profit factor is gross profit ÷ gross loss. Above 1 means winning trades made more than losing trades lost in that period; below 1 means a net loss. There is no official threshold: it depends on the number of trades, costs and the market, and a high figure from a small sample can be luck. Read it with the trade count, expectancy and drawdown.
How do you calculate expectancy in R?
Divide each trade's net P&L by the dollar risk you planned at the stop to get its R multiple, then average the R multiples. A +0.20R expectancy means trades made 0.2 times the planned risk on average. The template only uses trades with a risk amount logged; in the example, 162 of 169 trades have one and the expectancy is 0.18R.
Can I use this trading performance spreadsheet in Google Sheets?
Yes. In Google Sheets choose File → Import → Upload and pick the .xlsx, or upload it to Google Drive and open it with Google Sheets. It uses SUMIFS, COUNTIFS, SUMPRODUCT, INDEX/MATCH, EOMONTH and other functions that work in Excel 2016+, Google Sheets and LibreOffice. There are no macros and no dynamic arrays.
Related tools and templates
- Backtesting spreadsheetTest a rule on past data
- Trading journalRecord the why behind each trade
- Day trading journalIntraday trade log
- Position size spreadsheetSet the risk ($) for each trade
- Prop firm challenge trackerDaily loss and drawdown limits
- Risk of ruin calculatorWin rate, payoff and risk per trade
- Risk/reward calculatorPlan the R before you enter
- All templatesFree spreadsheets
Educational template only, not financial, tax or investment advice. Past results, including your own, do not predict future results. Example data is fictional: STK-A to STK-H, the strategies, trades and cash flows are made up and are not real results or suggested trades. GIPS and CFA Institute material was retrieved on 31 October 2026.