In this article
After this article, you can
- Check the uniqueness scope of journal IDs.
- Distinguish repeated imports from account-ID collisions.
Terms at hand: Trading Journal · Realized P/L · Position notional (notional value) · Balance · Commission · Drawdown
Consider a hypothetical journal. Mark records 171 trades and a €4,200 loss. Adding setup and news-context fields lets him identify a segment with a €2,700 loss, about 64.3% of the total. That retrospective observation does not prove that excluding the segment would create a future €8,100 profit. The twenty-five fields below form one proposed design, not an industry standard.
What a five-column journal can miss
A compact journal can record results, but it may lack the fields needed for a particular investigation. Choose columns from the questions you want to answer, then preserve enough information to reproduce the calculations and distinguish planned actions from actual fills.
This proposed twenty-five-field template groups ten trade fields, five risk fields, five setup fields and five review fields. It is an editorial design rather than a mandatory standard attributed to authors or trading firms. Add or remove fields according to the investigation while retaining an auditable source record.
Keep the source event record separate from calculated summaries. A recorded plan states information available at the decision; fills and fees describe what actually happened; formulas derive results from those definitions. An imported fill is still source data even if not typed by hand. Define one summary row as one trading idea, linking partial executions with an idea ID in a separate operations sheet. Two partial exits are not automatically two independent signals. Add account, currency, demo/live status, time zone and strategy version to that source record or dictionary; do not add PLN and USD outcomes without a defined conversion.
Ten columns of trade data — the foundation of any journal
The ten fields below combine entry and exit timestamps into single fields. Save planned prices separately from actual fills where execution analysis needs both; do not reconstruct missing entry context from hindsight. Some metrics require additional intratrade observations that these ten fields do not contain.
Use the actual contract and account-currency records to calculate net result. Commission and financing may be separate entries; spread is already reflected in executable buy and sell prices and must not be deducted twice. A broker label such as ECN does not establish a universal euro cost per lot.
Five risk columns — define the reference first
Risk-normalised results distinguish position scale from realised payout. A hypothetical €800 result against €400 initial planned risk is 2R; €1,200 against €1,000 is 1.2R. Those ratios alone do not prove which strategy is better or how much risk was actually borne.
Column eleven records initial planned monetary risk divided by a stated balance or equity reference. If you format that ratio as a percentage, do not multiply by 100 again; for an ordinary number expressed in percent, multiply once. Pip calculations need the actual contract, volume and currency conversion. Column twelve is net result divided by positive, valid initial planned risk: EUR 150 / EUR 50 = 3R and −EUR 50 / EUR 50 = −1R. Moving the stop later does not rewrite that initial denominator. Leave R missing when the initial risk is unknown; an ordinary stop is not a guaranteed loss boundary.
Column thirteen can record profit giveback from maximum favourable excursion to exit: a hypothetical +4R peak and +1R exit give 3R giveback. That is not necessarily maximum peak-to-trough drawdown, which requires the intervening path. Column fourteen records exposure on a defined comparable basis. Column fifteen records estimated correlation with its window and method; +0.90 does not make two different positions identical or exactly double risk.
Five setup-analysis columns — the answer to “why did I enter”
This group records the stated reason for entry: setup type, timeframe, specified confluence, scheduled-event context and any consistently defined self-rating at entry. Record these before the outcome rather than guessing later. A relationship between a state rating and losses does not by itself identify the cause of those losses.
Column sixteen records setup type using a defined list. Keep categories stable enough to compare, and report sample size and uncertainty for each segment. Eight to ten labels or one hundred total trades do not guarantee a reliable estimate of expectancy.
Column seventeen records the signal timeframe. Column eighteen records specified confluence conditions without assuming they are statistically independent. An average, RSI and chart pattern derived from the same prices may overlap in information. Sixty or one hundred trades do not guarantee a superior timeframe or a fifteen-to-twenty-percent win-rate uplift.
Column nineteen records scheduled-event context and time zone. Column twenty can record a self-rated 1–10 state, with consistent definitions. Investigate any association with results and its uncertainty; a score below four does not universally establish negative expectancy.
Five execution-review columns — post-trade analysis in concrete numbers
The fourth and final block is the execution review — what English-language literature calls post-trade analysis. It concerns not the trade itself but the quality of its execution against the original plan. Five fields: plan adherence, mistake count, lesson in one sentence, screenshot link, monthly tag.
Column twenty-one rates adherence to predefined rules on a documented 1–10 scale. Distinguish authorised changes from unplanned deviations and compare their recorded outcomes. Do not assume that every point below seven costs 0.3R or that a particular relationship appears in ninety percent of traders.
Column twenty-two counts predefined deviations, such as an unauthorised size increase or missing required exit instruction. Record the evidence and investigate results; defining an action as a mistake does not itself establish a statistical relationship with profit.
Column twenty-three records a short observation or question. Hypothetical notes could be “Entered before the required completed H1 bar” or “Exited at +0.8R instead of the planned +2R; investigate why.” Link the note to the rule and evidence. A profitable deviation is still a deviation, while a correctly executed loss is not automatically a mistake.
Column twenty-four — link to a chart screenshot at entry and exit. The simplest approach is to save them in a cloud folder and paste the hyperlink. Column twenty-five — a monthly tag, a simple category such as “January-NFP-tilt” or “February-EURUSD-range” — allows quick search through the journal by market phase. A fuller list of ten complementary metrics worth tracking alongside the twenty-five columns is laid out in the article on trading statistics.
A local ID needs an account scope
When a journal combines sources, check where each identifier is unique and inspect the record retained after duplicate handling.
Scroll sideways to see the full diagram
Assumptions: Four complete fictional records in the shown order, one currency PLN and an identical A/17 reimport. Account scopes A and B are separate and explicit. This checks a local key and retained copy, not global uniqueness of real transaction numbers.
Our local identifiers are unique within each of the two fictional accounts. Real broker exports need their own scope check. The A/17 reimport represents the same operation and result in this controlled list; B/17 is a different operation.
Our deterministic audit retains the first record in the supplied order for each (account, local ID), checking repeat identity before omission. A/17 +10, A/18 −4 and B/17 +7 total +13 PLN. An incorrect ID-only procedure retains A/17 and A/18, totalling +6 PLN, losing the valid B/17 record.
Microsoft — duplicates and column selection in Power Query supports comparison across multiple columns but warns that duplicate removal does not guarantee keeping the first instance. Our first-record rule specifies this audit; it is not a promise of that function. If values disagree for the same complete key, investigate the conflict instead of discarding it as an identical repeat.
Excel versus TraderSync versus Edgewonk — when to change tools
A spreadsheet offers control over fields and formulas. Check the actual licence, available functions and import workflow; Excel is not universally free and paid tools can also allow customisation. Setup time depends on the requirements and the user's skills.
Compare import compatibility, export access, required analytics and total subscription terms using a test dataset. TraderSync lists tiered recurring plans; Edgewonk lists an annual subscription. Neither a thousand trades per year nor a fixed sequence of tools is a universal switching threshold. Verify current billing, taxes and integrations before choosing.
A VBA macro — one routine for automatic metric calculation
The VBA illustration below aggregates valid monetary outcomes and R values from columns J and L of a sheet named Trades, writing to Dashboard. It does not derive initial risk, validate account currencies, deduplicate source events, refresh pivots or send email. Use one defined currency and a reconciled valid row set. It includes a valid zero-result row in the trade count; profit factor is unavailable without losses. Missing paired data, errors and nonnumeric values are rejected. Check these cases independently before enabling a macro; its numeric checks alone do not verify dates, currencies or grouping.
Sub CalculateMetrics()
Dim ws As Worksheet, lastRow As Long, i As Long
Dim totalTrades As Long, countWins As Long
Dim sumWins As Double, sumLosses As Double, sumR As Double
Dim result As Double, rValue As Double
Dim resultCell As Variant, rCell As Variant
Dim resultText As String, rText As String
Set ws = ThisWorkbook.Sheets("Trades")
lastRow = Application.Max(ws.Cells(ws.Rows.Count, "J").End(xlUp).Row, _
ws.Cells(ws.Rows.Count, "L").End(xlUp).Row)
For i = 2 To lastRow
resultCell = ws.Cells(i, 10).Value2
rCell = ws.Cells(i, 12).Value2
If IsError(resultCell) Then
Err.Raise vbObjectError + 3, , "Error value in J at row " & i
End If
If IsError(rCell) Then
Err.Raise vbObjectError + 4, , "Error value in L at row " & i
End If
If IsNull(resultCell) Then
Err.Raise vbObjectError + 5, , "Null result in J at row " & i
End If
If IsNull(rCell) Then
Err.Raise vbObjectError + 6, , "Null R in L at row " & i
End If
resultText = Trim$(CStr(resultCell))
rText = Trim$(CStr(rCell))
If Len(resultText) > 0 Or Len(rText) > 0 Then
If Len(resultText) = 0 Or Len(rText) = 0 Then
Err.Raise vbObjectError + 1, , "Missing result or R at row " & i
End If
If Not IsNumeric(resultCell) Then
Err.Raise vbObjectError + 2, , "Non-numeric result in J at row " & i
End If
If Not IsNumeric(rCell) Then
Err.Raise vbObjectError + 2, , "Non-numeric R in L at row " & i
End If
result = CDbl(resultCell)
rValue = CDbl(rCell)
totalTrades = totalTrades + 1
sumR = sumR + rValue
If result > 0 Then
sumWins = sumWins + result
countWins = countWins + 1
ElseIf result < 0 Then
sumLosses = sumLosses + Abs(result)
End If
End If
Next i
With ThisWorkbook.Sheets("Dashboard")
.Range("B2").Value = totalTrades
If totalTrades > 0 Then
.Range("B3").Value = countWins / totalTrades
.Range("B4").Value = sumR / totalTrades
Else
.Range("B3:B4").Value = CVErr(xlErrNA)
End If
If sumLosses > 0 Then
.Range("B5").Value = sumWins / sumLosses
Else
.Range("B5").Value = CVErr(xlErrNA)
End If
.Range("B6").Value = sumWins - sumLosses
End With
MsgBox "Metrics calculated for " & totalTrades & " trades.", vbInformation
End Sub
Bind the reviewed routine to a button only after checking its inputs and output against a small known dataset. Runtime depends on the workbook and machine. Further automation needs separate implementation and testing.
A hypothetical journal — from five columns to twenty-five
In this hypothetical example, Mark starts with €12,000 and loses €4,200, or 35%, across 171 trades. The simplified journal does not record enough context to segment those results reliably.
Suppose saved source records allow Mark to classify the earlier trades. An invented forty-eight-trade segment loses €2,700, approximately 64.3% of the €4,200 total. If each trade initially risks €100, total planned risk is €4,800 and mean result is −€2,700/(48×€100)=−0.5625R. Without equal risk, aggregate result divided by aggregate risk is a risk-weighted ratio rather than the arithmetic mean of trade R values.
A second hypothetical year assigns 142 trades and EUR 8,100 profit, mean 0.42R and profit factor 1.94. A possible 91 wins rounds to 64%, while 80 wins among the first year’s 171 trades round to 47%; the other assigned first-year summaries are −0.18R and profit factor 0.71. These summaries do not reconstruct trade outcomes or risk sizes and are not audited observations. Removing a segment changes the policy, and a difference between years does not isolate its causal effect.
A separate hypothetical example shows why mean R is not total money: +PLN 100 on PLN 100 initial risk is +1R, while −PLN 1,000 on PLN 1,000 risk is −1R. Arithmetic mean R is zero, but net money is −PLN 900. Dividing totals gives −900 / 1,100 ≈ −0.818, a risk-weighted mean of R, not an account return.
Segmentation can reveal candidate patterns, but searching many categories can also select historical noise. Preserve the initial analysis, check data completeness and evaluate any changed rule on later untouched observations. Twenty-five columns are not required for every investigation.
What to do tomorrow
- Create a journal with explicit field definitions. Use a neutral file name, timestamp format and currency convention. Mark unavailable information as missing instead of inventing it.
- Audit the formulas. For a simple linear instrument, gross quote-currency P/L is direction sign × (exit − entry) × units, then convert under the contract rules and include applicable costs without counting spread twice. Net R-multiple equals net result / initial monetary risk. Planned risk percentage equals initial monetary risk / stated capital reference ×100.
- Reconcile twenty source trades as a small check. Compare fills, costs, currencies and identifiers with the broker export. Enter historical context only when it was recorded at the time; twenty rows do not guarantee a stable pattern.
- Create aggregate metrics with defined denominators. Mean R is the average of valid R values. Profit factor is positive-result sum divided by the absolute negative-result sum and is undefined without losses. Win rate is winning trades divided by all valid closed trades, including zero-result trades according to the stated classification.
- Schedule a journal review. Check data completeness, deviations and candidate hypotheses at a cadence you can maintain. A review supports learning but is not a guarantee of competence or profit.
Check your understanding
One short exercise
About 2 min · you can try again
A journal contains A/17 +10, A/18 −4, B/17 +7 PLN and an identical A/17 reimport. What does the complete-key audit retain?
- A/17 and A/18 because both 17s are repeats.
- All four, because every row contributes a separate result.
- A/17, A/18, B/17, totalling +13 PLN.
Check the answer and explanation
A/17, A/18, B/17, totalling +13 PLN.
The key includes account and local ID. Only the identical A/17 reimport is omitted.
Frequently asked
Are twenty-five columns not overkill for a retail trader?
Twenty-five is a proposed layout, not a minimum. Choose fields for the questions you need to investigate and retain the source operations. Outcomes and R can be computed from valid inputs, but emotions, rule compliance, correlation and exposure require separately defined evidence or series. Missing context is not recovered automatically, and one hundred trades do not guarantee a reliable pattern.
Excel, TraderSync, Edgewonk or myfxbook — which one to start with?
Compare import compatibility, export access, required fields, formula control and current billing using known source trades. A spreadsheet can be suitable without waiting a year, and no trade count forces a paid service. TraderSync shows recurring plan tiers; Edgewonk’s pricing page describes a plan billed every twelve months. Verify checkout currency, taxes, renewal and actual supported import before choosing.
What exactly does the analysis after one hundred trades show in a full journal?
A complete journal can support segmentation, but does not promise particular discoveries or causes after a fixed count. Report valid observations per group, missing fields, costs and uncertainty; keep definitions stable. Searching many categories can select a favourable or unfavourable historical segment. Preserve the original result and evaluate any changed rule on later data that did not motivate the change.
How long does a full Excel template take to build from scratch?
Time depends on the required import, grouping, formulas and checks; there is no established four-to-six-hour build or thousand-trade ceiling. Start with a small known dataset and reconcile currency, costs and initial risk. Mean R averages valid per-trade R; profit factor divides positive net outcomes by the absolute negative sum and is unavailable without losses. The shown macro aggregates those fields; it does not refresh every table or email a report.
Sources & bibliography
-
John Wiley & Sons Brett N. Steenbarger — The Daily Trading Coach (2009) · Discusses trading journals, reviewing results and grouping trades by setup. www.wiley.com ↗
-
McGraw-Hill Van K. Tharp — Trade Your Way to Financial Freedom (1999) · Discusses R multiples, expectancy and position sizing as concepts used in the article's journal. www.mhprofessional.com ↗
-
TraderSync, Inc. Trading Journal & Analytics — TraderSync · The provider's pricing page describes its trading-journal and analytics service. tradersync.com ↗
-
Edgewonk Edgewonk Trading Journal Software · The provider's pricing page describes its trading-journal and analytics software. www.edgewonk.com ↗
-
Microsoft Excel VBA Object Reference · Official Excel VBA documentation of objects such as Worksheet, Range and Chart. learn.microsoft.com ↗
-
MQL5 Reference Deal Properties · Documents executions, order/position identifiers and separate price, commission, cumulative swap, profit and fee fields; broker exports still require mapping. www.mql5.com ↗
-
Microsoft Learn Working with duplicate values in Power Query · Explains multi-column matching and warns that removing duplicates does not guarantee retaining the first instance. learn.microsoft.com ↗
-
Microsoft Learn Range.Value2 property in Excel VBA · Describes cell-value access and its numeric handling of Date and Currency values. This API documentation is not a test of the article’s macro in Excel. learn.microsoft.com ↗
