Skip to content
All strategies

Strategies

Liquidity-Shock vs Information-Shock Reversal in Japanese Large Caps: Buy a TSE Large Cap at the Next Open After a >=2.5-Sigma Market-Relative One-Day Drop on NON-Extreme Volume, Fixed 5-Session Clock (JPEQ 1-DAY, 100-name event panel, long-only, flat most of the time)

Outcome: Verifying

JpeqLiquidityShockReversalPanel

Liquidity-Shock vs Information-Shock Reversal in Japanese Large Caps: Buy a TSE Large Cap at the Next Open After a >=2.5-Sigma Market-Relative One-Day Drop on NON-Extreme Volume, Fixed 5-Session Clock (JPEQ 1-DAY,…

Hypothesis

Original Research Lead hypothesis, first ever use of the JPEQ venue (3 prior experiments, 0.1% of corpus; 0 outcomes). Mechanism (Campbell-Grossman-Wang 1993, Cooper 1999, Llorente et al. 2002; the Japanese short-term reversal literature, e.g. Iihara-Kato-Tokunaga 2004, finds reversal far stronger in Japan than momentum): a large one-day drop in a stock RELATIVE TO THE MARKET is either a liquidity/inventory shock (non-informed selling absorbed by liquidity providers who demand a premium -> price reverts) or an……Show moreShow less

Original Research Lead hypothesis, first ever use of the JPEQ venue (3 prior experiments, 0.1% of corpus; 0 outcomes). Mechanism (Campbell-Grossman-Wang 1993, Cooper 1999, Llorente et al. 2002; the Japanese short-term reversal literature, e.g. Iihara-Kato-Tokunaga 2004, finds reversal far stronger in Japan than momentum): a large one-day drop in a stock RELATIVE TO THE MARKET is either a liquidity/inventory shock (non-informed selling absorbed by liquidity providers who demand a premium -> price reverts) or an information shock (news, earnings -> price drifts). Abnormal volume separates them: information shocks print extreme volume; liquidity shocks print ordinary-to-moderately-elevated volume. The strategy buys only the liquidity-type shocks. Universe: the 100 TSE Prime large caps in config/jp_equities_universe.txt (fixed list of current large caps: no point-in-time TOPIX membership file exists for Japan, so the universe carries survivorship bias, disclosed in risk_factors; names are eligible only once they have >= sigma_lookback+5 sessions of history, e.g. 285A listed 2024). Signal per stock i on session D close: r_i = ln(C_D/C_{D-1}); market proxy m_D = equal-weight mean of r_j over universe names with a bar on D; residual e_i = r_i - m_D; sigma_i = std of e_i over the previous sigma_lookback sessions (ending D-1, no lookahead); z_i = e_i / sigma_i; volume ratio vr_i = V_D / mean(V_{D-20..D-1}). Event: z_i <= -z_threshold AND vr_i < vol_ratio_max. Entry at the NEXT session open (platform next_open_fill on session venues, supported). Exit by market order decided at the close of the (hold_sessions-1)th session after entry, filling at the open hold_sessions sessions after entry (open-to-open holding of hold_sessions sessions). Pre-registration measured from catalog daily bars 2018-01 to 2026-10 with the baseline rule (z<=-2.5, vr<2.5, enter next open, exit open 5 sessions later): about 1,900 qualifying name-events on roughly 950 distinct entry dates (the z<=-2.5 & vr<1.5 bucket: 810 events/475 dates; 1.5<=vr<2.5: 1,204 events/704 dates); mean raw 5-session return ~+1.1% per event, market-adjusted (minus equal-weight universe forward return) +0.38% (vr<1.5) and +0.48% (1.5-2.5), while the excluded extreme-volume bucket (vr>=2.5) is market-adjusted -0.27%, which is the mechanism's own internal control. The same-day statistic is weak (date-clustered t ~1), so this is a genuine test, not a sure thing; one losing year (2021) in both kept buckets. Cost arithmetic: JPEQ commission 0, no transaction tax, modelled half spread 3 bp -> ~0.06% round trip plus impact; expected gross capture ~1.0% raw (~0.4% market-adjusted) per trade = more than 6x the round trip even on the market-adjusted figure. Long-only on the MARGIN account at 1x (no leverage; the long arm is used because the measured short arm of the mirror event was not robust and Lesson 230 warns against assuming it). Risk control route (b): signal/time exit plus capped sizing, 10% of equity per position, at most 8 concurrent (gross <= 80%, no leverage). Execution: all orders are market orders at session opens; positions sized in whole 100-share board lots via self.lot_size() (entries round down; skip if one lot exceeds the 10% cap); market orders into a locked daily price limit are refused by the venue and simply not filled (skip that event; for exits retry at the next open). Metrics in JPY.

Implementation

Event panel on the 100 TSE large caps of config/jp_equities_universe.txt (JPEQ, 1-DAY bars, long-only, 1x margin). At each session close, once every listed leg has its bar: log return r_i, equal-weight market mean m_D over names with bars on D and D-1, residual e_i=r_i-m_D, z_i=e_i/sample-std of the previous sigma_lookback residuals (to D-1), volume ratio vr_i=V_D/mean(previous 20 volumes). Buy names with z_i<=-z_threshold and vr_i<vol_ratio_max (liquidity-type shocks; extreme-volume information shocks excluded), no open position, history >= sigma_lookback+21 sessions; most negative z first up to 8 concurrent positions; size floor(10% of MTM equity / C_D / lot) whole 100-share board lots (skip when one lot exceeds 10%). Market orders decided on the close fill at the next session open (platform next_open_fill). Exit: market SELL decided at the close of session entry+hold_sessions-1 (open-to-open hold of hold_sessions sessions), counted from the position's open time; resubmitted each close until flat if refused (locked limit). No stop/target.

Implements the hypothesis rules one-to-one with its parameter names (tunable z_threshold 2.0-3.5, hold_sessions 3-10, vol_ratio_max 1.5-3.5, sigma_lookback 40-120, declared in _param_bounds; fixed position_pct 0.10, max_concurrent 8, volume_avg_lookback 20, leverage 1). Primary 8306.JPEQ with the other 99 universe names as traded extra legs; point_in_time_universe=True and selection from universe_at() so the window starts at the primary's history and late listings (285A, 2024) join only once they have bars, as……Show moreShow less

Implements the hypothesis rules one-to-one with its parameter names (tunable z_threshold 2.0-3.5, hold_sessions 3-10, vol_ratio_max 1.5-3.5, sigma_lookback 40-120, declared in _param_bounds; fixed position_pct 0.10, max_concurrent 8, volume_avg_lookback 20, leverage 1). Primary 8306.JPEQ with the other 99 universe names as traded extra legs; point_in_time_universe=True and selection from universe_at() so the window starts at the primary's history and late listings (285A, 2024) join only once they have bars, as the listing calendar is built from each leg's first catalog bar. Execution uses the supported next_open_fill capability (decision at close D, fill at D+1 open). Risk route (b): time exit + 10% per-position cap, gross <= 80%, 1x. Residual history is a derived cache rebuilt from the bar buffers after a restart or a skipped session; the exit clock comes from position.ts_opened, so no per-name state needs persisting. Slots: a position being exited at the next open frees its slot for entries decided on the same close (the hypothesis' max concurrent after fills); if margin is momentarily tight the platform caps that entry. Survivorship bias of the fixed current-large-cap list is inherited from the hypothesis (no JPEQ point-in-time membership data).

Backtest and paper results are hypothetical. Trading involves risk of loss.