// study VC-001 · ICT unicorn model · rules locked at v1.1 · published in full

We gave the Unicorn the full fund treatment.

We took the public "Unicorn" tutorial (Breaker overlapping Fair Value Gap), wrote the rules down word for word, locked them, and ran 991 trades through five years of clean data across five markets with worst-case fills. This page publishes the method and the verdict together, including the parts a marketing department would delete.

NOT VALIDATED · rules as written, v1.1 Publishing a failed test is the point. It is what makes a passed one worth something.
SEND ME THE STUDY » Validate your strategy
Opens an email to studies@vannacharm.org. Tell us who you are and what you teach, and we reply with the full PDF. No forms, no funnel, no commitment.
991
Filled trades
5 × 5
Instruments × years
30.5%
Win rate
0.80
Profit factor
−0.17R
Avg trade
15
Configs tested
// visual proof

Real trades, straight from the archived log. Not illustrations.

Each chart below is a real trade from the 991-row log, rebuilt from the same bars and the same zones the engine used. The exact same code that produced every statistic on this page also drew these annotations. Nothing here is a mock-up.

2024-11-01 · NQ 15M · LONGWIN +3.17R
1234523:4501:3003:1505:0006:4508:30TP 20,127.00IN 20,085.50SL 20,072.63
  • 1. Sell-side sweep takes the most recent unswept SSL
  • 2. Bullish MSS: displacement body-closes above the prior swing high
  • 3. Unicorn zone = Breaker fresh FVG overlap
  • 4. Limit fill at the zone near edge
  • 5. DOL target hit: unswept 15m swing high · +3.17R
2024-02-08 · EURUSD 15M · SHORTLOSS −1.25R
1234519:4521:1522:4500:1501:45TP 1.07754IN 1.07828SL 1.07869
  • 1. Buy-side sweep takes the most recent unswept BSL
  • 2. Bearish MSS: displacement body-closes below the prior swing low
  • 3. Unicorn zone = Breaker fresh FVG overlap
  • 4. Limit fill at the zone near edge
  • 5. Price reverses; stop hit · −1.25R

No cherry-picking. These are the first clean examples matching broad criteria (compact hold, typical R-multiple) at the top of the search: one win, one loss, straight off the log. Both were found and filled by the same detector that produced every statistic in this study.

// the methodology

From YouTube prose to rules a machine can run.

You cannot backtest an adjective. Tutorials are written to teach, not to spell things out, so the first and hardest job is turning the words into rules a machine can run without anyone quietly deciding anything along the way.

01 · Write down every ruleFour public sources, one consistent rulebook, nothing left vague

We collected four primary sources (the Unicorn tutorial plus the Breaker Block, Fair Value Gap and Order Block guides) and rebuilt them into one consistent rulebook: 14 exact definitions (swing, sweep, MSS, displacement, Breaker, FVG, Unicorn zone, premium/discount, bias, targets, buffers), a locked rule sequence, and a parameter table.

When sources disagreed, there was a fixed pecking order: the strategy document wins on the strategy’s trade parameters, and each component guide wins on its own component. Anything still genuinely unclear was kept as a switch and tested both ways instead of being quietly decided. The finished rulebook was version-stamped and SHA-256 hashed, so nobody can move the goalposts after the fact.

02_Canonical Definitions.md · D1–D1403_Strategy Specification.mdSPEC_HASHES.txt · SHA-256v1.0 → v1.1 frozen
02 · Log every contradiction, on the record14 conflicts in the source material, each settled in writing

Read carefully, the source material contradicts itself. We logged 14 conflicts in a register anyone can read. Three stop-loss rules at materially different prices. Buffers in "pips" for index futures, which don’t have pips. A take-profit ("the next draw on liquidity") that is never actually pinned down anywhere.

  • RESOLVED (7): we picked one reading and wrote down why.
  • TESTED BOTH WAYS (5): genuinely ambiguous, so both readings went into the backtest and the difference got measured instead of argued about. This is the heart of the whole method.
  • ASSUMPTION (2): the sources just don’t say. We supplied a stand-in definition and flagged it clearly.
01_Conflict Register.md · C1–C14C3 stop rules · C7 breaker width · C9 entry level · C11 DOL · C12 bias · C14 session
03 · Check the charts before the mathHuman and machine must agree on what a Unicorn is before the machine judges how it performs

A detector that finds the "wrong" setups produces precise numbers about nothing. Before any statistics, we built the detection engine and put its output on charts: annotated 2024 setups on MNQ and EURUSD, every sweep, structure shift, Breaker and FVG overlap drawn by the machine and checked by eye against the source material’s own examples.

That review surfaced eight small judgment calls no tutorial ever mentions. Can the Breaker candle be the broken-swing candle itself? Which FVG forms the zone when the leg prints several? How long may a sweep wait for its MSS? Each one got a written answer (FD-1…FD-8) before the backtest ran. Leave those open, and a backtest can quietly be bent to say whatever you want it to say. That is how people fool themselves.

05_Frozen Implementation Decisions.md · FD-1…FD-8POC visual artifact · six annotated setupsPOC → pipeline deltas logged
04 · Scrub the data. This is where most backtests quietly dieEvery bar gets checked before the pipeline sees it. The checks caught a fatal dataset on day one.

All five timeframes (1D → 5m) are built from one underlying series per instrument: continuous, back-adjusted futures and institutional FX feeds, every timestamp set to New York time. Before anything runs, the data has to pass quality checks: prices that make sense, no duplicate bars, no oversized session gaps, and at least 60% of a normal weekday’s bars present.

The checks earned their keep immediately. The first gold dataset was a far-month contract averaging ∼17 bars a day: thin enough to fake market structure, blow the stops out, and fire false signals, all while looking perfectly normal in the output. The coverage check failed it loudly, and gold was remapped to a dense micro-gold feed (∼95% coverage) with the right contract economics. A backtest on bad data doesn’t warn you. It just hands you wrong numbers with a straight face.

1m/5m/15m/1H/4H/D from one seriesAmerica/New_York normalizationCoverage gate: median weekday bar coverage ≥ 60%10 residual interpretations (IN-1…IN-10)
05 · Run it honestEvery grey area is a switch, no peeking ahead, pass/fail agreed before the first run

Every grey area from step 02 became a switch in a 10-parameter table: swing width, breaker zone width, entry level, stop rule, ATR buffer, target logic, bias filter, HTF-array filter, session filter, order expiry. The baseline was locked before any run; then we flipped one switch at a time to put a price on each documented ambiguity.

  • No peeking ahead, built into the code: swings confirm only after the right-side candles close; MSS on body close only; entry orders placed only after the zone-completing bar closes; bias and HTF read from already-closed bars.
  • Worst-case everything: when stop and target land in the same bar, the stop is assumed to hit first (both readings reported; it affected 2.4% of fills). Slippage and commissions on every trade; fixed 0.5% risk; futures contracts rounded down.
  • Pass/fail agreed before the first run: ≥ 100 pooled trades · profit factor ≥ 1.25 after costs · still positive on the held-back data · drawdown < 2× the Monte-Carlo median. The held-back split was fixed in advance, so it measures whether the edge travels, not optimizer luck.
  • Repeatable: 15 unit tests on synthetic candles; version-pinned environment; raw trade logs archived.
04_Validation Protocol.md10-parameter matrix · 15 configurationsPass/fail fixed before first run1,000-path Monte Carlo
// results

Then we ran it. And published exactly what came out.

Five markets, 2021–2025, setups found on the 15m chart and filled on lower timeframes, worst-case fills. As written, the rules did not pass.

The four checks

agreed before the first run · spec 04 §6
✔ PASS
Sample floor ≥ 100 trades
991 pooled
✘ FAIL
Profit factor ≥ 1.25 after costs
0.80
✘ FAIL
OOS expectancy > 0
PF 0.88 IS → 0.60 OOS
✔ PASS
DD < 2× MC median
−58.4% vs −61% median

Cumulative performance, 2021–2025

running total of per-trade R multiples · pooled across instruments · worst-case fills
No daily-bias filter · 3,276 trades · −608R Locked baseline · 991 trades · −166R NY-AM killzone only · 55 trades · −4R
0R−100 −200−300 −400−500 −600 20212022 20232024 20252026 −608R −166R −4R

Not one documented version of the rules reaches a profit factor of 1.0, never mind the 1.25 bar we set. Drop the daily-bias filter and you more than triple the trades and nearly quadruple the bleed. The killzone flattens the curve, but at 55 trades in five years.

// what the data says

A failed test is not an empty result. It is a map of where the edge isn’t, and where it might be.

This is what educators almost never get to see about their own material: not whether it feels right on a chart, but which pieces pull their weight, which are decoration, and which actively hurt.

Full configuration matrixEvery grey area from the 10-parameter table, one switch at a time from the locked baseline
#ConfigParameter changedDefault → ValueTradesWin %PFAvg R
1Baseline— (locked defaults)n=1, bz=A, en=A, sl=A, k=0.10, tp=DOL, bias=y, htf=y, sess=n, exp=2099130.5%0.80−0.17
2n=2Swing fractal width (D1)n=1 → 2 (2-bar swing breakout)76129.4%0.78−0.17
3bz=BBreaker zone width (C7)A (last candle) → B (full run of all breaker candles)1,01129.9%0.79−0.18
4en=BEntry level (C9)A (near zone edge) → B (zone centre / 50%)79128.1%0.78−0.19
5sl=BStop rule (C3) — 3 conflicting stop rules in sourcesA (FVG candle extreme) → B (swept extreme of the sweep leg)1,09431.3%0.79−0.16
6k=0.05ATR buffer multiple (D14) — tighter0.10 → 0.05 (half the buffer width)94729.7%0.77−0.19
7k=0.20ATR buffer multiple (D14) — wider0.10 → 0.20 (double the buffer width)1,04930.4%0.80−0.15
8tp=1RTarget logic (C11/D13)DOL (hierarchy) → fixed 1:1 risk target32743.4%0.51−0.35
9tp=2RTarget logic (C11/D13)DOL (hierarchy) → fixed 2:1 risk target85833.8%0.77−0.18
10tp=3RTarget logic (C11/D13)DOL (hierarchy) → fixed 3:1 risk target1,21724.7%0.75−0.21
11BF-0Daily bias filter (D12)True → False (no bias requirement; trade all directions)3,27629.9%0.77−0.19
12HTF-0HTF array confluence filter (D11)True → False (no HTF array requirement)1,07930.9%0.81−0.15
13SF-1Session filter (C14)False → True (NY-AM killzone only, 09:30–11:00 ET)5532.7%0.90−0.07
14EXP 10Order expiry (FD-6)20 → 10 bars (2.5 hours on 15m)94330.3%0.78−0.18
15EXP 40Order expiry (FD-6)20 → 40 bars (10 hours on 15m)1,01030.4%0.80−0.16
10 parameters totalSwing · Breaker · Entry · Stop · Buffer · Target · Bias · HTF · Session · ExpiryPF range: 0.51–0.90 · none ≥ 1.0

1 · The losses are not a matter of interpretation

Fifteen versions of the rules, covering every documented way to read them, all land in a tight profit-factor band of 0.77–0.90, every one unprofitable after costs. The endless comment-section wars (stop at the FVG candle or the swept extreme? single-candle breaker or the full sequence? edge entry or 50%?) are arguments about ±0.03 of profit factor on a losing bet.

EVIDENCE: All structural sweeps: PF 0.77–0.80 · same-bar ambiguity affects only 2.4% of fills

2 · One filter saves drawdown, one adds nothing, one is the signal

The daily-bias filter cuts the bleed by 63% (−608R down to −166R) but barely moves the profit factor. HTF confluence adds nothing (PF 0.81 without it). The NY-AM killzone is the only piece of the entire rule set with real signal in it (PF 0.90), but it shrinks the sample to 55 trades in five years. Still unprofitable, but it is the one component that actually lifts the numbers.

EVIDENCE: BF-0: PF 0.77, −96% DD · HTF-0: PF 0.81 · SF-1: PF 0.90 on n=55

3 · DOL exits beat every fixed-R target. And 1:1 is the worst thing you can teach.

Force the fuzzy "next draw on liquidity" idea into an explicit 3-tier rule and it beats every fixed-R alternative (PF 0.80 vs 0.51–0.77). The worst documented configuration is a fixed 1R target: PF 0.51. The intuition in the exit logic is real. It just cannot rescue an entry with no edge.

EVIDENCE: DOL hierarchy 0.80 · fixed 1R: 0.51 · 2R: 0.77 · 3R: 0.75

4 · What little edge shows up doesn’t travel

On the first 70% of the data, PF 0.88. On the 30% held back, PF 0.60 and −0.36R per trade. That split was fixed before anything ran, so this is not a tuning artifact. It is the strategy telling you its behaviour shifts with market conditions, and the public material never tells you when to stand aside.

EVIDENCE: IS PF 0.88 → OOS PF 0.60 · OOS win rate 27.0% · split fixed up front at 70/30
What a validated curriculum could have taught

None of this is trading advice. It is what the data would have handed an educator who tested this exact rule set before teaching it:

a

Teach the window, not just the shape. Whatever quality the overlap has is concentrated inside the NY-AM killzone. A course that says "this is a 09:30–11:00 ET pattern, expect roughly one setup per month per market" is telling students the truth. PF 0.90 vs 0.77 unfiltered.

b

Sell the bias filter as drawdown control, not win-rate magic. It barely moves profit factor but cuts the account bleed by two thirds. −166R vs −608R cumulative; −58% vs −96% drawdown.

c

Cut the HTF confluence homework. The PD-array requirement added nothing here (PF 0.81 without it). Shorter checklist, same results.

d

Never teach fixed 1:1 targets on this model. It is the single most destructive documented configuration. It wins 43% of the time, which is exactly why it feels good while it bleeds the fastest. PF 0.51.

e

End the stop-placement debate. FVG-candle stops vs swept-extreme stops: PF 0.79 either way. The feud is noise. Spend the teaching hours on the session filter instead, where the signal actually lives.

f

Say the honest headline out loud. Traded purely mechanically, this model does not survive costs. So if a trader using it profits, the edge lives in the judgment on top of the rules. That is exactly what a mentorship claims to add. It is also exactly the thing we can measure next.

This study tests one locked, word-for-word reading of the public material (v1.1, SHA-256 hashes published), under worst-case fills. It says nothing about your version. Your bias method, your session windows, your setup selection make yours a different strategy. That is the point. If your version beats this mechanical floor, the difference is measurable. If it doesn’t, you want to be the first to know. Not your students.

// private validation studies · limited concurrent engagements

Your strategy. Same treatment. Your proof.

Every step on this page (the rulebook, the conflict register, the chart review, the scrubbed data, the locked pass/fail) runs as a private, NDA-backed study on your strategy, exactly as you trade and teach it. Not our reading of your rules: yours, signed off line by line.

NDA FIRST · YOUR RULES, SIGNED OFF · PASS/FAIL AGREED UP FRONT · RESULTS PRIVATE, BOTH WAYS