← ZEME AI  ·  ZEME Academy  ·  Learn  ·  Ask ZEME

Our upper-lock lane misses far more often than it hits

ZEME-301Lesson 1 of 79 min readEnglishFree

Start with the lane that carries our name

ZEME runs a forward lock lane. It names stocks in advance and the call is later resolved against what the market actually did. Here is its record on its own resolved calls, with nothing removed:

laneresolved callshitshit rate
the upper-lock lane8,6612883.325%
the weekly forecast ledger1473825.850%

The upper-lock lane got 8,373 of its resolved calls wrong.

Both of the honest readings, at the same time

A number this shape is usually presented in one of two dishonest ways. We will give you both honest ones instead.

Reading one - it is weak. A hit rate of 3.325% means that if you treated every name on that lane as an event that was going to happen, you would be wrong the overwhelming majority of the time. Anyone selling that lane as a list of things about to circuit is misrepresenting it.

Reading two - it is not nothing. A rate only means something beside the base rate, measured on the same definition. A liquid PSX stock closes at its upper cap about 0.981% of the time (684,042 stock-sessions). So the lane is running at several times the base rate. It has found something. It has not found a schedule.

Both sentences are true at once. A hit rate without its base rate is not a number, it is a sentence - and a base rate quoted without the hit rate is just as misleading in the other direction.

The weekly ledger is a different, smaller, better-behaved thing

The weekly forecast ledger scores 25.850% - but on only 147 resolved calls. That sample is small enough that it deserves far less confidence than the number itself suggests. A better-looking rate on a much smaller n is the most common way a track record flatters itself. We are showing you ours doing exactly that.

What to take from this

Not "ZEME is bad". Not "ZEME is good". The takeaway is a habit: whenever anyone - including us - quotes you a hit rate, ask for three things before you believe it. The definition, the base rate on that same definition, and the n. Two of the three are missing from almost every claim you will ever be shown in this market.


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.

ul_lane_hit_rate = 3.325% (n = 8,661)

``sql SELECT source, COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END) FROM predictions GROUP BY source ``

ul_lane_hits = 288 (n = 8,661)

``sql SELECT source, COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END) FROM predictions GROUP BY source ``

wfl_lane_hit_rate = 25.850% (n = 147)

``sql SELECT source, COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END) FROM predictions GROUP BY source ``

wfl_lane_hits = 38 (n = 147)

``sql SELECT source, COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END) FROM predictions GROUP BY source ``

ul_lane_misses = 8,373 (n = 8,661)

``sql SELECT source, COUNT(*), SUM(resolved), SUM(CASE WHEN resolved=1 AND hit=1 THEN 1 ELSE 0 END) FROM predictions GROUP BY source ``

lock_base_rate = 0.981% (n = 684,042)

``sql WITH b AS ( SELECT sym, date, close, volume, LAG(close) OVER (PARTITION BY sym ORDER BY date) AS prev_close, AVG(volume) OVER (PARTITION BY sym ORDER BY date ROWS BETWEEN 60 PRECEDING AND 1 PRECEDING) AS avg_vol_60 FROM prices ), l AS ( SELECT sym, date, close, prev_close, avg_vol_60, CASE WHEN prev_close IS NULL OR prev_close <= 0 THEN NULL WHEN close >= prev_close + MAX(0.10prev_close, 1.0) - 0.005 THEN 1 ELSE 0 END AS lock FROM b ), p AS ( SELECT sym, date, avg_vol_60, lock, LEAD(lock) OVER (PARTITION BY sym ORDER BY date) AS lock_next, SUM(lock) OVER (PARTITION BY sym ORDER BY date ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS locks_5, SUM(lock) OVER (PARTITION BY sym ORDER BY date ROWS BETWEEN 90 PRECEDING AND 1 PRECEDING) AS locks_90, COUNT(lock) OVER (PARTITION BY sym ORDER BY date ROWS BETWEEN 90 PRECEDING AND 1 PRECEDING) AS n90 FROM l ), u AS (SELECT FROM p WHERE avg_vol_60 >= 10000 AND lock_next IS NOT NULL) SELECT COUNT(), 100.0AVG(lock_next) FROM u ``


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