The formula
average holding time = Σ (exit time − entry time) ÷ number of closed trades
Simple arithmetic, and the interesting part is entirely in what qualifies for the sum.
What is counted
Three filters apply before a trade contributes:
- It must be closed and carry an exit timestamp. Open positions do not appear.
- Exit must be after entry. Rows where the two timestamps are equal or inverted — which happens in exports where the exit was written with the entry's date, and in a few crypto ledgers where two fills share a second — are dropped rather than counted as zero-length trades.
- Both timestamps must parse. A malformed date removes the row.
Dropped rows leave the denominator as well as the numerator, so they neither shorten nor lengthen the average. Counting a broken row as zero seconds would drag the figure down while looking like a measurement, which is the failure mode worth naming: a metric that quietly treats missing data as a small value rather than as missing.
The exclusion that matters
"Closed trades only" sounds like a technicality. It is the single most important thing about this metric.
The disposition effect — closing winners quickly and holding losers in the hope they come back — has a specific signature in a statement. The winners resolve, so they enter the average. The losers do not resolve, so they do not. The result is that an account most affected by the habit reports the shortest holding times, and reports them right up until the day those positions are finally closed, at which point the average jumps.
So a short average holding time can mean two opposite things:
- You are a fast trader who exits decisively.
- You are a fast trader with your losers still open.
The metric cannot tell you which. What distinguishes them is one look at the open positions alongside it: their count, their age, and whether they are green or red. An account with three open positions older than the entire average holding time is describing habit, not strategy.
Why the mean is the wrong average here
Holding times are heavily right-skewed. Most trades cluster at the short end and a few run far longer, so the arithmetic mean sits above the typical trade and often above the majority of them.
One position left open across a weekend contributes about 60 hours. On a set of a hundred day trades averaging fifteen minutes, that single row roughly triples the reported figure. The median would move by nothing.
Read the mean as a total-exposure figure, not as a description of a typical trade. When the two matter — and for judging whether you are trading your stated timeframe, they do — look at the distribution rather than the summary.
Timezones cancel, except when they do not
Holding time is a difference between two timestamps, so the timezone they were written in normally cancels out. A MetaTrader statement recorded in broker server time gives the same duration as the same trades recorded in UTC.
It stops cancelling when the two timestamps come from different sources — an entry imported from a broker file and an exit recorded manually, or two accounts merged into one journal where one exports server time and the other local time. The gap then equals the offset between them, which is why some rows come back as negative durations and get dropped by the filter above. What broker server time actually is, and why it drifts twice a year, is covered in server time.
What to do with the number
On its own, very little. It becomes useful in two comparisons:
- Against your stated timeframe. If you describe yourself as a swing trader and the average is 40 minutes, the description and the file disagree, and the file is right.
- Against itself over time. A holding time that shortens over a session is one of the clearer markers of overtrading — the same account taking progressively less time to decide.