A five-day loser stock reversal strategy with fixed holding exits
A short-term stock reversal example needs more than a loser-ranking signal. Freeze liquidity eligibility, the weekly decision date, actual next-open entry, a five-session batch deadline and the rule for overlapping signals. Then reconcile quantities, fees and cash without extending a losing batch whenever the stock qualifies again.
This guide implements ten selected fictional US stocks in a USD account. All prices and results are synthetic. CoTrading strategy cases remain planned or unverified. The example verifies a reversal mechanism and its accounting; it does not claim a real-market rebound, stable profitability or a complete model of liquidity shocks.
State the reversal hypothesis and its limits
The working hypothesis is that recent short-horizon losers may subsequently rebound. That is a research proposition, not a reason to buy every falling stock. The French short-term reversal reference describes a monthly size-and-prior-return factor. Our five-session, ten-name long-only construction differs and does not reproduce that published factor.
Choose one market and a historical eligibility universe before ranking. This fixture supplies twelve names, not a historical US constituent service. A real study needs identifier history, delistings, corporate actions and compatible return prices. A current surviving list would retain survivor bias even if every batch calculation below were correct.
Keep the liquidity threshold fixed before seeing exits. The example requires five positive finite volume observations with average at least 1,000 shares. That number is an invented teaching threshold, not proof of executable capacity. It excludes a deliberately illiquid extreme loser without allowing the author to choose exclusions after seeing rebounds.
Define the formation and weekly schedule
The score at a scheduled completed close is price now divided by price five sessions earlier minus one. Six valid prices are needed for five intervals. Select the ten lowest scores, breaking ties by stable identifier. Missing, nonfinite or nonpositive endpoint/history values are excluded before division; invalid volume cannot become a liquidity qualification.
Synthetic weekly decision indices are five and ten, five sessions apart. Trade only at the following supplied opens, six and eleven. These indices represent a declared weekly schedule; the script does not fetch a real calendar. A production adapter must map the chosen weekday through holidays and actual market sessions explicitly.
Each newly entered stock receives forty shares. At the supplied entry opens of ten, that is equal 400-unit stock allocations and 4,000 total notional from 10,000 initial cash. The account deliberately retains cash rather than pretending its selected sleeve consumes all capital. Position sizing is fixed independently of the formation score’s magnitude.
Reconstruct the ten selected losers
For stock number i, formation closes are ten minus i times the session index divided by one hundred. At decision five, S11 falls from ten to 9.45, or minus 5.5%, and S02 falls to 9.9, or minus one percent. The ten eligible deepest losers are S11 down through S02.
S12 has the deepest decline, to 9.4, but its average volume is only 500 and it is excluded by the predeclared gate. S01 is liquid but its decline is too shallow to reach the ten-slot boundary. Preserve both reasons; data eligibility and rank rejection are different decision mechanisms.
The entry open is separately supplied as ten for every selected stock. It is not the formation close and may gap above it. The strategy cannot claim the movement from a depressed formation close to that later open as profit. Investor.gov’s order reference also distinguishes observed prices from assured execution prices; the fixture assumes its supplied opens fill.
Give each holding an immutable batch deadline
At entry open six, save quantity forty, entry index six and due index eleven for each selected stock. The holding interval is five open-to-open session intervals. Repeated qualifying signals do not replace or move the deadline. A batch’s history remains tied to its actual entry rather than its most recent selection appearance.
At an execution open, process due exits before new entries. If a stock exits at that same open, the fixture does not reenter it immediately, even if the prior weekly decision selected it again. Existing unexpired batches are also not duplicated. These are explicit overlap rules, not an incidental consequence of dictionary iteration.
The second weekly decision selects the same ten names. At open eleven they all reach their original deadline, so the strategy sells them and records ten skipped same-open reentries. This prevents a fresh signal from indefinitely extending the original batch. A different overlapping-batch design requires independent lot and cash rules.
Reconcile entry, hold and fixed exit
Initial cash is 10,000. Ten purchases of forty shares at ten cost 4,000, plus a fictional fee of one per order. Cash becomes 5,990, shares are worth 4,000 at those opens and equity is 9,990. All ten entry orders, quantities and deadlines are asserted explicitly.
At open eleven, every supplied exit price is 10.2. Four hundred shares produce 4,080 before ten exit fees, so cash becomes 10,060 with no position. Total fees are twenty. Gross price gain is eighty, net gain sixty, or 0.6% of initial account capital. This is a constructed accounting result, not an actual historical return.
The selected stock sleeve gained two percent between its actual opens, while account exposure was only forty percent before fees. Do not report the sleeve return as the whole-account return. The formation losses describe past ranking information and are not added to either profit measure.
Run the full batch acceptance file
Download the complete example, save it as R585.py and run python R585.py with Python 3.12 or later. It uses only the standard library and synthetic prices. The source is docs/growth/research/round-5/examples/R585.py.
Assertions check the exact ten members, S12’s exclusion, all buy and sell records, cash 5,990 after entry, deadline eleven, final cash/equity 10,060, twenty fees, zero final holdings and ten overlap skips. An invalid nonfinite execution open is rejected rather than used to produce imaginary proceeds.
The script truncates inputs after the first entry and requires the same historical ledger. It also changes future closes drastically while requiring the first selection to remain identical. The fixed deadline does not depend on the last supplied row, so a truncated dataset does not manufacture a terminal sale that was not scheduled.
Interpret the counterexamples at the right layer
Illiquid S12 is a selection-eligibility counterexample. The second weekly signal is a holding-lifecycle counterexample. Neither is cured by changing the five-session lookback after seeing results. Keep exclusions, due exits and skipped entries as separate artifact fields.
An opening-price gap is another account input, not a reason to use the earlier close instead. Real daily data do not fully simulate spreads, market impact or distressed-stock liquidity. If a model cannot justify fills, report that limitation or use a separately defined execution stress rather than promise a rebound that could not have been entered.
Extend with a frozen research package
Archive universe, schedule, formation formula, liquidity units, capacity, sizing, batch deadline, overlap priority, fill convention and fee version. Review one ordinary batch and one overlapping signal from original observations through final cash before adding historical performance metrics.
Update the package when market data, historical membership or execution assumptions change. Compare changed members and deadlines before interpreting a new net result. Completion means every selection, immutable holding batch and actual modeled cash movement is reproducible, including explicit no-reentry decisions, with no claim that synthetic success establishes real short-term reversal profitability.
When a dataset stops before a batch is due, preserve the remaining position and its declared deadline. Do not backdate an exit simply to make the report flat. The prefix fixture deliberately ends after entry and compares its existing ledger with the full run. A separate terminal-accounting policy can be added, but its reason and costs must remain distinct from the strategy’s fixed five-session exit. That distinction protects both temporal tests and the meaning of batch performance.
FAQ
Can a new loser signal postpone an existing exit?
Not under this fixed-batch contract. The original entry fixes its deadline.
Does the deepest loser always qualify?
No. Liquidity and valid-history gates apply before ranking, as S12 demonstrates.