Test your strategy
Log every historical trade your rules would have produced: wins and losses both, nothing filtered out. Crucible will tell you whether they hold a filterable edge, or that there isn’t enough here to say.
Start with your trade log
One CSV, one row per historical trade your rules fired. It is read in this browser and never uploaded, so nothing about your strategy reaches us.
Or read a worked example
Six rules run on the same SPY daily bars, one for every answer this tool can give.
What a good log looks like
Every historical instance your rules would have flagged: wins and losses both, nothing filtered out. Crucible needs at least 40 of them, and at least 15 wins and 15 losses among those, before it will give you a verdict.
What Crucible is asking you for
Say your strategy is the Double Top. You would log every Double Top your rules flagged, every one and not just the memorable ones. Set the stop and target the way your rules already set them, record whether each hit the target or the stop, then add what was different about each instance.
- 1
The pattern is the rule. It is not a factor.
“Double Top” is what decides a trade exists at all, so it is identical on every row and tells the model nothing. A factor is what differed between one Double Top and the next: the RSI at entry, how far price sat from the 200-day, the time of day.
- 2
One exit, applied the same way every time.
Set the stop and target the way your rules already set them, and read the outcome the same way on every row. A trade you nursed by hand produces a label the model cannot learn from. The verdict is about your entries under that exit, not about the trade you would have managed.
- 3
A yes/no is a factor. A distance is a better one.
“Was price at a round number like 1.4000, 1 or 0” is allowed. But it pre-commits to where the edge starts. “How many pips from the nearest round number” lets the model find that cut-point itself, which is the whole reason trades get scored on a scale instead of sorted into two piles.
- 4
If a factor pays at both ends, measure from the middle.
The model reads each factor as pushing one way: more is better, or less is. So an RSI that pays below 20 and again above 80 argues against itself and comes out looking like nothing. Log the distance from the middle instead. |RSI − 50| lands both ends together, where the model can see them.
One catch this example sets
A Double Top is a short and a Double Bottom is a long, so most factors mean the opposite thing across the two. RSI 75 is stretched for the short and strong for the long; distance above the 200-day flips sign entirely. Logged together untouched, the model sees the same value arguing both ways and learns nothing from it. No error, just a factor that quietly washes out. Either read each factor in the direction of the trade, or calibrate the long and the short as two strategies.
All of it goes in as one CSV. Every numeric column in the file is read as a factor, so however many you have, they all come along.
entry_date,direction,outcome,ret_pct,rsi14,distMa20Atr,atrPercentile100,rangePos20 2024-03-04,long,win,1.82,28,-2.4,0.70,0.20 2024-03-11,short,loss,-0.95,62,1.1,0.30,0.80
Outcome and at least one factor are required. Entry date, direction and a per-trade return are optional, and each one makes the verdict better. Extra factor columns are welcome: every numeric column is read as a factor.
No filterable edge · A profitable strategy that has nothing worth filtering on. The threshold that scored best in-sample earns less on the out-of-sample half, so the answer is to trade all of it. “No edge found” beside a strategy that makes money is a real result, not a failure.
When RSI(2) closes below 10, buy the next open. Exit when the close clears its 5-day average, or after ten bars.
SPY · RSI(2) mean-reversion · 1993–2026 · 395 trades · real daily prices, scored in your browser