Backtest: Run The Test And Read Risk Before Return
A practical Backtest lesson for treating the run button as an evidence gate and reading risk, sample size, and distribution before return.
Educational only
The examples teach workflow and risk framing. They do not provide trade recommendations, personalized advice, leverage guidance, or guaranteed outcomes.
Chapter 01
Run the locked rulebook
Trader question
What exactly did this result test?
The run button should mark the boundary between assumptions and evidence. Context, entry rules, exits, stop, target, and date window must be named before the result is interpreted.
Desk checklist
- Confirm the rulebook was complete before the run.
- Do not edit assumptions inside the same result story.
- Label any changed assumption as a new case.
Interactive proof
Run Backtest button, loading state, and result tab
Use the Risk-First Result Reader to choose whether a result was read from locked assumptions or from a tempting return number.
Read the result as evidence quality: drawdown first, sample size second, distribution third, then return and grade. The grade can help triage review, but it cannot approve live use.
Interactive desk lab
Backtest Risk-First Result Reader
A practical Backtest result lab for sorting drawdown, trade count, win rate, payoff, return, and grade into a risk-first reading order.
A practical Backtest result lab for sorting drawdown, trade count, win rate, payoff, return, and grade into a risk-first reading order.
The run button locks the case
A completed rulebook is stamped before the result surface opens, making the run button a boundary between assumptions and evidence.
Context, entry rules, exits, and risk controls line up.
The run button stamps the case.
Result metrics appear only after the case is locked.
A reminder appears: changed assumptions are a new run.
Remotion code
RunLocksCaseVideo
The snippet is stored with the lesson so a future Remotion project can render the chapter video.
Show component snippet
import {AbsoluteFill, Easing, Sequence, interpolate, useCurrentFrame} from "remotion";
export const RunLocksCaseVideo = () => {
const frame = useCurrentFrame();
const lock = interpolate(frame, [36, 68], [0, 1], {
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
easing: Easing.bezier(0.16, 1, 0.3, 1),
});
const steps = ["Context", "Entry", "Exit", "Risk"];
return (
<AbsoluteFill style={{background: "#fff8e8", color: "#071126", padding: 72}}>
<h1 style={{fontSize: 54, margin: 0}}>Run after the rulebook is complete.</h1>
<div style={{display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: 18, marginTop: 70}}>
{steps.map((step, index) => (
<div key={step} style={{border: "1px solid #b69a5b", background: "#fffdf7", padding: 24, opacity: interpolate(frame, [index * 8, index * 8 + 18], [0.25, 1], {extrapolateLeft: "clamp", extrapolateRight: "clamp"})}}>
<strong style={{fontSize: 26}}>{step}</strong>
<p style={{fontSize: 18, color: "#5f6b7c"}}>locked before result</p>
</div>
))}
</div>
<Sequence from={38} layout="none">
<div style={{marginTop: 54, display: "flex", alignItems: "center", gap: 20}}>
<div style={{borderRadius: 999, background: "#071126", color: "#f9d78b", padding: "18px 34px", fontWeight: 800, transform: "scale(" + (0.92 + lock * 0.08) + ")"}}>Run Backtest</div>
<div style={{height: 4, width: 260, background: "#d9971f", transform: "scaleX(" + lock + ")", transformOrigin: "left"}} />
<div style={{border: "1px solid #047857", background: "#dff3e8", color: "#047857", padding: 18, opacity: lock}}>Evidence opens</div>
</div>
</Sequence>
<Sequence from={84} layout="none">
<p style={{fontSize: 25, marginTop: 42}}>If assumptions change, label it as a new case.</p>
</Sequence>
</AbsoluteFill>
);
};Sources used for this tutorial
Next step
Open the tool with the checklist beside you.
Move from the lesson into the matching Bullion Brains tool, keep the checklist visible, and treat the output as evidence until the caveats are clear.