A real taxonomy, and the two traps in reading it
Campaign Phase is ZEME's description of where a stock sits in an operator's campaign. It is a real taxonomy with measured numbers behind it - which is more than most market vocabulary can claim. Here is the whole table on one definition, over the research panel:
| Campaign Phase | next-session lock rate | lift vs base | n |
|---|---|---|---|
| DISTRIBUTING | 5.998% | 1.75x | 21,224 |
| RUNNING | 5.591% | 1.63x | 74,528 |
| LAUNCHING | 5.118% | 1.50x | 87,978 |
| LOADING | 3.614% | 1.06x | 34,170 |
| EARLY LOAD | 3.149% | 0.92x | 81,364 |
| WATCHING | 2.585% | 0.76x | 132,051 |
| FULLY LOADED | 2.422% | 0.71x | 231,692 |
| EXITED | 1.930% | 0.56x | 5,804 |
Base rate on this same definition: 3.421% over 668,811 liquid stock-sessions. Every lift above is that phase's rate divided by that base, and both come from one pass over the same rows, so they cannot drift apart.
Trap one - the lift is not a return
A phase with a lift above 1 locks more often than average. That is all it says. It says nothing about what the stock returns, nothing about what it costs to hold, and nothing about the drawdown along the way. Lesson 4 of this course is why that distinction matters: a higher lock rate that yields less than 3.04 pp is a losing trade with a flattering statistic attached.
Trap two - the ranking is not stable, so the WINDOW must travel with it
This table is measured over the full panel. Measured over a different, shorter window the order changes - notably, the phase that leads over ten years is not the one that leads over the last twenty months. Neither measurement is wrong. They are answers to different questions, and a phase ranking quoted without its window is not a finding.
This is the same failure that ZEME-101 lesson 2 documents for the lock definition, wearing a different costume. Definition drift and window drift are the two ways a real number turns into a false claim without anybody lying.
The useful way to hold this
Treat the phase as a description of state, not a forecast. FULLY LOADED does not mean "about to fire" - on this measurement it locks below base. It means the operator appears to hold a position and is not yet moving. That is genuinely worth knowing; it is simply not the same thing as a prediction.
Evidence - History - Confidence - Counterargument
Confidence - high on the rates, moderate on the ordering, low on any of it being actionable on its own.
Counterargument - the strongest case against this table: the phase is assigned by our own engine, so this measures the consistency of our labelling as much as any market truth. A phase that locks more often may simply be a phase we tend to assign to stocks that are already moving. That is a circularity we can describe but cannot fully remove.
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.
phase_lock_DISTRIBUTING = 5.998% (n = 21,224)
- what it is: next-session lock rate for liquid stocks in Campaign Phase DISTRIBUTING. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_DISTRIBUTING = 1.75x (n = 21,224)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lock_RUNNING = 5.591% (n = 74,528)
- what it is: next-session lock rate for liquid stocks in Campaign Phase RUNNING. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_RUNNING = 1.63x (n = 74,528)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lock_LAUNCHING = 5.118% (n = 87,978)
- what it is: next-session lock rate for liquid stocks in Campaign Phase LAUNCHING. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_LAUNCHING = 1.50x (n = 87,978)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lock_LOADING = 3.614% (n = 34,170)
- what it is: next-session lock rate for liquid stocks in Campaign Phase LOADING. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_LOADING = 1.06x (n = 34,170)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lock_EARLY_LOAD = 3.149% (n = 81,364)
- what it is: next-session lock rate for liquid stocks in Campaign Phase EARLY LOAD. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_EARLY_LOAD = 0.92x (n = 81,364)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lock_WATCHING = 2.585% (n = 132,051)
- what it is: next-session lock rate for liquid stocks in Campaign Phase WATCHING. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_WATCHING = 0.76x (n = 132,051)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lock_FULLY_LOADED = 2.422% (n = 231,692)
- what it is: next-session lock rate for liquid stocks in Campaign Phase FULLY LOADED. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_FULLY_LOADED = 0.71x (n = 231,692)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lock_EXITED = 1.930% (n = 5,804)
- what it is: next-session lock rate for liquid stocks in Campaign Phase EXITED. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_lift_EXITED = 0.56x (n = 5,804)
- what it is: that rate divided by the panel base rate on the SAME definition
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
phase_base = 3.421% (n = 668,811)
- what it is: the base rate every phase lift below is measured against. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
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 ``
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.