← ZEME AI  ·  ZEME Academy  ·  Learn  ·  Ask ZEME

A hit rate that cannot tell you whether you made money

ZEME-301Lesson 6 of 77 min readEnglishFree

The gap in our own record-keeping, published

ZEME consolidates every forward call it has ever made into one ledger: 20,317 calls across all lanes. Of the ones that have resolved, the pooled hit rate is 3.824% on 8,969 resolved calls.

Now the part that matters more than the rate:

100.000% of those resolved calls have no recorded return at all. The ledger stored whether the call was a hit. It never stored what the position would have made.

That is a NULL, and a NULL is not a zero

This is the single most repeated defect in this codebase, so it is worth being exact. A missing return does not mean the return was 0%. It means it was never measured. Anywhere ZEME shows you a figure it does not have, it must say "not measured" - and the moment it prints 0 instead, it has invented a fact.

You will see this everywhere once you look for it: a screener showing 0 volume for a stock that did not trade, a portfolio showing 0% for a holding with no cost basis, a track record showing 0 losses because losses were never recorded.

Why a hit rate alone cannot be trusted as performance

A "hit" here means an event was called correctly. It does not mean money was made, because:

A hit rate measures calibration, not profit. They are different questions, and only one of them is answered by this ledger today.

What honest looks like here

We could quietly stop publishing the hit rate. We could compute a return now and present it as though it had always been tracked. Instead the ledger reports 100.000% unmeasured, the courses teach the difference, and the gap stays visible until it is genuinely closed.

When a system tells you what it does not know, that is the strongest evidence you will get about what it does know.


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.

pred_total = 20,317 (n = 20,317)

``sql SELECT COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END), SUM(CASE WHEN resolved=1 AND ret_pct IS NULL THEN 1 ELSE 0 END) FROM predictions ``

pred_hit_rate = 3.824% (n = 8,969)

``sql SELECT COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END), SUM(CASE WHEN resolved=1 AND ret_pct IS NULL THEN 1 ELSE 0 END) FROM predictions ``

pred_return_unmeasured = 100.000% (n = 8,969)

``sql SELECT COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END), SUM(CASE WHEN resolved=1 AND ret_pct IS NULL THEN 1 ELSE 0 END) FROM predictions ``

round_trip_cost = 3.04 pp (n = not measured)

``text fixed house assumption, [[reference_backtest_methodology]] D2 ``


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.
✅ Check your understanding: take this lesson’s quiz and track your progress (free)

All 7 lessons in Where ZEME is weak - our own numbers, against ourselves