Skip to main content

from stats to trading rules

how to turn an edgeful data point — like a gap fill rate or a midnight open retracement level — into a concrete trade with a defined entry, stop, contract size, and filters.

Written by Brad
Updated over a week ago

edgeful gives you the data. what most traders get stuck on isn't finding a stat — it's turning that stat into a repeatable rule they can actually trade.

"gaps fill 63% of the time" isn't a trade. it's a starting point.

this article walks you through how to go from a number on a report to a defined setup — entry trigger, stop distance, contract size, and the filters that keep you from trading it when the edge isn't there.

we'll do it twice. once with gap fill. once with midnight open retracement. same framework both times.

the 5-step framework

every stat on edgeful gets turned into a rule the same way. the order matters.

  1. pick the data point — a single number from a single report, with the ticker, timeframe, and session locked in

  2. define the level — what price are you entering at, and where is the target

  3. set the stop — based on structure, not a round number you pulled from nowhere

  4. filter the setup — which days, gap sizes, prior-day conditions, etc. the data supports

  5. size the position — based on your account and stop distance, not on how confident you feel

skip any of these and you're back to guessing.

worked example 1: gap fill

the data point

let's say you're looking at the gap report on ES, 6-month lookback, NY session. the data shows gaps fill 63% of the time.

that's the starting point — not the trade.

define the level

a "gap fill" on edgeful means price trades back to the prior session close (PSC). so PSC is your target. your entry is wherever the gap opens.

  • entry: at the open (or on a small pullback if you want confirmation)

  • target: PSC (the fill level)

set the stop

the stop is not "10 points because that feels right." the stop is structural.

for a gap-down fade (expecting price to rally back up to PSC), the stop goes below the most recent swing low on the 5-minute chart before the open. that's the level that, if broken, tells you the fill isn't happening today.

for a gap-up fade, flip it — stop above the most recent swing high.

you can take this further by using the gap fill by spike report; which takes all the days where the gap has filled and checks how far away from the gap price moved before filling.

filter the setup

this is where most traders skip a step. the 63% fill rate is the average across all gaps. the data almost always shows more nuance when you slice it.

check the gap report's customization options:

  • gap size: small gaps (under 0.25%) fill more often than large gaps. customize the gap size filter and re-check the fill rate

  • day of week: some weekdays show higher fill rates than others. use the by-day-of-week view

  • prior day close: inside day vs outside day prior can shift the fill rate materially

only trade the setup when the sliced data still supports the edge — say, 70%+ on the specific day and gap size you're looking at.

size the position

stop distance × contract value = risk per contract.

if your stop is 6 ES points away and you're risking $300 per trade, that's 1 MES contract (6 pts × $5/pt = $30 risk per micro, so $300 / $30 = 10 MES, or 1 ES). size from the stop — never from confidence.

the rule, written out

on ES in the NY session, when the cash open gaps down less than 0.25% from the prior session close, and the gap report shows a 70%+ fill rate for that specific gap size and day of week, enter long at the open, stop below the most recent 5m swing low, target PSC. size to risk 1% of account.

that's a rule. not a feeling.

worked example 2: midnight open retracement

same 5-step framework. different report.

the data point

the midnight open report shows how often NY session price retraces back to the midnight open level before continuing. let's say the data shows the midnight open gets tagged 63% of the time on ES over the last 6 months in the NY session.

define the level

the level is the midnight open price itself.

  • entry: at the midnight open level, on first touch during the NY session

  • target: depends on the follow-through. a common target is the session high/low or a prior-day level

set the stop

structural again. for a long at midnight open (expecting bounce), stop goes below the nearest 5m swing low formed during the retracement. for a short, above the nearest swing high.

do not use a fixed-point stop. the whole point of the retracement is that price is pulling back to a level — the level itself is the invalidation zone, so structure tells you where it's failing.

filter the setup

the retracement rate varies based on:

  • direction of the overnight move — was the overnight session strongly one-directional into NY, or choppy

  • day of week — check the by-day view

  • prior-day close relative to midnight open — closed above vs below can shift the follow-through rate

customize the report and only trade the setup when the filtered rate still supports the edge.

size the position

same math as above. stop distance × contract value = risk per contract. work backwards from your per-trade risk.

the rule, written out

on ES in the NY session, when the overnight session has moved directionally and the midnight open report shows a 64%+ retracement rate for that day of week and direction, enter at the midnight open on first touch, stop beyond the nearest 5m structure, target the session high or prior-day level. size to risk 1% of account.

where this breaks down

three pitfalls to watch for:

  1. over-filtering — if you customize so tight that you're only looking at 5 setups over 6 months, the sample is too small. look for at least 20+ occurrences in the filtered view before calling it an edge

  2. ignoring the recent window — a stat that holds up across the 1-year, 6-month, and 3-month lookbacks is more reliable than one that only shows up on the long window. check the recent window on the date range selector before committing to a rule

  3. treating the rate as a guarantee — 72% is not "this will fill." it's "over a large sample, this has filled 72% of the time." you will have runs of losers. size accordingly

the data tells you the edge exists. the framework turns it into a rule. your execution — same rule, every time, without second-guessing — is what makes it work.

related articles

Did this answer your question?