The number that decides more outcomes than any signal
Every round trip - one buy plus one sell - costs roughly 3.04 pp all in. That figure is an assumption, not a measurement, and it is the only assumed number in this lesson. Everything else below is measured.
Here is what actually happens to a liquid PSX stock held for a fixed number of sessions, averaged over every stock and every day in the panel:
| hold | mean GROSS | mean NET of 3.04 pp | share that CLEARED the cost | n |
|---|---|---|---|---|
| 5 sessions | +0.496% | -2.544% | 25.793% | 667,663 |
| 20 sessions | +1.972% | -1.068% | 36.886% | 661,978 |
Read the third column, not the first
The average one-week hold makes +0.496% gross and -2.544% net. Only 25.793% of one-week holds finished ahead of the cost - which means 74.207% did not.
This is not a statement about ZEME's signals. It is a statement about the market plus the cost of touching it. It applies to every one-week trade in this market, whoever suggested it.
What this does to a signal
It sets a bar. A signal that improves your one-week return by, say, one percentage point over the average is a genuinely good signal - and it still loses money at five days, because it started -2.544% in the hole. This is why ZEME's own Operator Score ships carrying a flag that reads tradeable_net_of_cost: false: the feature ranks real differences, and none of those differences are large enough to pay for the round trip at that horizon.
Stretching the hold to 20 sessions improves matters - 36.886% clear the cost
- but it still leaves the average hold at -1.068% net.
The lesson, **Cost is not a detail you subtract at the end. It is the first filter, and it eliminates
an entire category of trade before any analysis begins.** Most short-horizon PSX strategies do not fail because the signal was wrong. They fail because the signal was right by less than 3.04 pp.
Evidence - History - Confidence - Counterargument
Confidence - very high on the arithmetic, moderate on the exact cost. Your own brokerage, size and slippage will move 3.04 pp up or down, and every number in the NET column moves with it.
Counterargument - the strongest case against: this averages over every stock and every day, which is deliberately the wrong population if you only ever trade a small selected set. A genuinely selective method should beat this average - that is the entire point of selection. What the table establishes is the floor that selection has to clear, not a prediction about any particular trade.
Evidence - where every number came from
Every figure in this lesson is listed below with its definition, its sample size, its window and the exact query that produced it, so you can re-run it rather than take our word for it.
round_trip_cost = 3.04 pp (n = not measured)
- what it is: assumed all-in cost of one buy plus one sell, in percentage points
- window: constant
- source: reference_backtest_methodology
- note: an ASSUMPTION, not a measurement - it is the one number on this page that was not derived from the panel
- how it was computed (pandas over the panel, not SQL):
``text fixed house assumption, [[reference_backtest_methodology]] D2 ``
cost5_gross = +0.496% (n = 667,663)
- what it is: mean GROSS return of holding a liquid PSX stock for 5 sessions, averaged over every stock and every day in the panel
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text Over liquid panel rows, the distribution of fwd_ret_5_e0 and fwd_ret_20_e0 against the 3.04 pp round-trip cost. ``
cost5_net = -2.544% (n = 667,663)
- what it is: the same average AFTER the 3.04 pp round trip
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text Over liquid panel rows, the distribution of fwd_ret_5_e0 and fwd_ret_20_e0 against the 3.04 pp round-trip cost. ``
cost5_clear_rate = 25.793% (n = 667,663)
- what it is: share of 5-session holds that gained more than the 3.04 pp round trip - i.e. actually finished ahead
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text Over liquid panel rows, the distribution of fwd_ret_5_e0 and fwd_ret_20_e0 against the 3.04 pp round-trip cost. ``
cost20_gross = +1.972% (n = 661,978)
- what it is: mean GROSS return of holding a liquid PSX stock for 20 sessions, averaged over every stock and every day in the panel
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text Over liquid panel rows, the distribution of fwd_ret_5_e0 and fwd_ret_20_e0 against the 3.04 pp round-trip cost. ``
cost20_net = -1.068% (n = 661,978)
- what it is: the same average AFTER the 3.04 pp round trip
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text Over liquid panel rows, the distribution of fwd_ret_5_e0 and fwd_ret_20_e0 against the 3.04 pp round-trip cost. ``
cost20_clear_rate = 36.886% (n = 661,978)
- what it is: share of 20-session holds that gained more than the 3.04 pp round trip - i.e. actually finished ahead
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text Over liquid panel rows, the distribution of fwd_ret_5_e0 and fwd_ret_20_e0 against the 3.04 pp round-trip cost. ``
cost5_lose_rate = 74.207% (n = 667,663)
- what it is: share of 5-session holds that did NOT clear the round trip
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text Over liquid panel rows, the distribution of fwd_ret_5_e0 and fwd_ret_20_e0 against the 3.04 pp round-trip cost. ``
ZEME Academy is educational analysis of Pakistan Stock Exchange data. It is not investment advice, not a recommendation, and not a solicitation to trade. Every number here is measured history, and history is not a forecast. ZEME is not SECP-registered.