How the AnalytikCapital engine builds, or rejects, a plan
AnalytikCapital builds a plan with three deterministic engines. An Elliott Wave engine counts the structure, a Smart Money engine maps zones and liquidity, and a plan engine sets the entry zone, stop and targets only where both agree; otherwise it rejects the setup with a stable reason code.
What happens when you ask for a plan?
Three engines run in sequence on the same price series, with no language model, no clock and no randomness: the Elliott Wave engine counts the waves, the Smart Money engine maps structure, zones and liquidity, and the plan engine turns both into levels or a stated rejection. This page describes each step as the code implements it, including where it departs from textbook theory.
How does the Elliott Wave engine find the swings?
Pivots come from a ZigZag filter scaled by volatility: a new swing is accepted only when price reverses by a multiple of the average true range (ATR, 14 periods), not a fixed percentage, so the same logic fits a quiet currency pair and a volatile coin. The multiple adapts until each window holds roughly ten structural pivots, and highs and lows must alternate. The most recent pivot is always provisional, because the next bar can still extend it.
Pivots are taken from the bar extremes (the wicks). Fibonacci measurements use a linear price scale by default.
How are the three degrees built?
Every analysis keeps three related degrees, all relative to the timeframe you chose:
| Degree | Built from |
|---|---|
| Major | Your bars grouped into the next larger timeframe (for example 15m bars grouped into 1h) |
| Medium | Your chosen timeframe |
| Minor | The next smaller timeframe (for example 5m under a 15m chart) |
The major count is found first. Medium waves are then fitted inside each major wave, and minor waves inside each medium wave, so the three degrees describe one nested structure rather than three unrelated counts. See Elliott Wave basics for what impulses and corrections are.
What are hard rules and what is soft scoring?
The engine generates candidate patterns from the pivots: impulses, zigzags, three kinds of flat (regular, expanded, running) and contracting or expanding triangles. Ending diagonals and double threes are defined in the code but switched off by default until they pass the engine’s benchmark.
Each candidate first faces hard rules. A single violation removes it:
- Impulse: wave 2 may not reach the start of wave 1; wave 4 may not enter wave 1’s price territory; wave 3 may not be the shortest of waves 1, 3 and 5.
- Zigzag: wave B may not retrace beyond the start of wave A.
- Flat: wave B must retrace at least 61.8% of wave A, otherwise the shape is a zigzag.
- Triangle: the two boundary lines must genuinely converge (contracting) or diverge (expanding), not run parallel.
Survivors are then scored, not filtered: closeness to typical Fibonacci ratios, guidelines such as alternation, channel fit, time proportions, leg-size shape, level confluence and a momentum check. The highest score wins. It is reported as “confidence”, but it is a ranking score, not a probability.
Which Fibonacci ratios does the engine use?
Retracements: 23.6%, 38.2%, 50%, 61.8%, 78.6%, 85.4% and 100%. Extensions: 100%, 123.6%, 138.2%, 161.8%, 200% and 261.8%. Each wave also has a typical zone, for example 38.2% to 85.4% for wave 2 with 61.8% as the center, and 14.6% to 50% for wave 4 with 38.2% as the center.
What invalidates a count?
Each pattern carries one invalidation price, its structural origin: the start of wave 1 for an impulse, the start of wave A for a zigzag or flat, and the A–C boundary line for a triangle. If price trades through it, that count is no longer valid and a different one takes over.
The last label of a count is shown as confirmed only when the pattern is complete and price has moved away from its last pivot durably (at least five bars and two ATR, without retaking the extreme). Until then the label is tentative. When the most recent stretch of price fits no rule-valid pattern at all, the engine draws a tentative tail: an honest best guess that has not passed the hard rules.
Why is the count deterministic?
The same bars always produce the same pivots, candidates and ranking. Thresholds live in configuration, not scattered through the code, and nothing depends on the time of day or a random seed, so any count can be reproduced and audited.
What does the Smart Money engine add?
The Smart Money engine reads the same bars and makes no trade call of its own:
- Market structure: swing highs and lows from a three-candle fractal; a break of structure (BOS) when a candle body closes beyond the last swing in the trend direction; a change of character (CHoCH) when it closes beyond the protected opposite swing. A wick alone never counts as a break. A counter-trend break with a strong candle (body above 1.5 ATR) is labeled a market structure shift (MSS).
- Zones: order blocks (the last opposite-colored candle before a displacement break), fair value gaps, inversion gaps and balanced price ranges, each tracked until mitigated or invalidated.
- Liquidity: equal highs and lows within a tenth of an ATR, previous day and week highs and lows, and sweeps where a wick takes a level and the body closes back.
- Premium and discount: the midpoint of the current dealing range splits it into a premium half and a discount half.
- Killzones: Asian, London, New York and London-close session windows on New York time, shown only on charts of one hour or less.
How does the plan engine choose a direction?
The plan engine trades the medium degree only. There is no silent fallback to another degree.
- If the last medium wave is tentative, the leg is still running, so the plan goes with it.
- If it is confirmed, price has already reversed off it, so the plan trades the counter-move.
- If it is only projected, there is no plan.
The Elliott side must also be fresh: the terminal pivot can be at most 120 bars old, and the last leg must measure between 1.5 and 40 ATR. The Smart Money side needs a defined trend and a structure break within the last 50 bars. Then the two directions must agree. If they disagree, there is no plan.
How are the entry, stop and targets set?
Entry zone. Elliott contributes a band: the 38.2% to 78.6% retracement of the last leg. Smart Money contributes live zones (active order blocks, open or partly filled gaps, active inversion gaps, balanced ranges). A zone is kept only if it is sensibly sized, sits on the correct side of the premium/discount midpoint, rests below price for a long (above for a short) and lies within six ATR. Overlapping zones are combined and scored, with Elliott agreement weighted most. The published zone is the winning block clipped to the Elliott band: where the engines agree, not the union of both.
Stop. The farther of two candidates, the far edge of the zone or the Elliott invalidation price when it lies on the correct side, plus a buffer of a quarter ATR. Risk is measured from the worst fill in the zone. A stop under half an ATR or over five ATR rejects the plan.
Targets. Only real levels, in priority order: equal highs or lows, previous day and week extremes, the near edge of opposite zones, and Elliott extensions while the wave is still running. Levels too close together are merged, up to three are kept, the first must pay at least 1R and the plan as a whole at least 2R. If the farthest target implies more than 10R, the ladder is shortened from the far end.
Coherence. Before returning, the engine checks its own output: for a LONG, stop below entry below TP1 below TP2 below TP3; for a SHORT, the reverse. A violation is treated as a bug and stops the process. It is never published.
What are the rejection reason codes?
A rejection is a valid answer, not an error. The engine defines 18 codes: 17 from its original design plus one added later. One is reserved and not produced today.
| Code | Plain-English meaning |
|---|---|
stale_data | The latest bar is too old; the plan would describe the past. |
elliott_tentative_tail | The latest stretch is only a tentative tail with no rule-valid pattern behind it. |
elliott_no_structure | No usable wave count at any degree. |
elliott_degree_unavailable | A count exists, but the medium degree cannot be traded: its last leg is too old, too small, too large, or only projected. |
smc_no_trend | Smart Money structure has no defined trend. |
smc_structure_stale | The last structure break is too old. |
direction_conflict | Elliott and Smart Money point opposite ways. |
no_premium_discount | No dealing range to tell premium from discount. |
no_entry_candidates | No live zone qualifies on the right side. |
price_through_zone | Price has already traded through the candidate zones. |
price_inside_zone | Price is sitting inside the candidate zone, so there is nothing to wait for. |
no_zone_intersection | No Smart Money zone overlaps the Elliott band enough to form an entry. |
no_invalidation_price | Reserved. Today a missing Elliott invalidation falls back to the structural stop instead. |
stop_too_tight | The stop sits inside normal bar-to-bar noise. |
stop_too_wide | The stop is far enough to be a swing stop in disguise. |
no_targets | No real level beyond the entry pays at least the risk. |
rr_below_minimum | The plan pays less than twice the risk. |
rr_above_maximum | Even one target pays implausibly more than the risk, a sign the stop is too tight. |
Why are there days with no plan?
The checks are strict on purpose. On most symbol-days at least one fails, and the engine says which instead of loosening a rule. Published plans rotate across a selected universe, so a quiet symbol never forces a weak plan.
What time, session and timeframes does a plan use?
All timestamps are shown in market time (ET). Published plans for US equities use the 15-minute regular-session series; a separate pre-market slot also includes the current day’s pre-market bars, and its plans are always measured apart from regular-session ones. Pre-market and after-hours extremes are folded into the nearest regular-session bar, and that bar is flagged, instead of being dropped. Crypto has no session filter. In the app you can choose 1m, 5m, 15m, 1h, 1d or 1w. The plan engine’s age and size limits were calibrated on 15-minute data, which is why published plans stay on that timeframe.
Every published plan carries a validity window. The window governs the entry: if the zone is not touched inside it, the plan expires.
What does the language model do?
Only one thing: for a published plan it may write a short rationale in plain English. It receives a plan that is already decided, is told to refer to levels by name only (“the entry zone”, “the stop”, “TP2”), and its text is checked by a deterministic filter that rejects any price or ratio not present in the evidence it was given. If the text fails twice, the plan is kept without prose. The plan is the product; the text is optional.
Where does the engine depart from textbook theory?
Five points are recorded as open adjudications. Each is either a deliberate choice or an open question, stated here plainly.
- A leaner Fibonacci grid with extra ratios. The engine’s specification lists many more levels (including 14%, 16%, 54%, 65% and higher extensions). The engine keeps a smaller set and adds 85.4%, 123.6% and 138.2%. Deferred: a candidate for benchmarking, not a defect.
- A low floor for wave 4. Common teaching treats 23.6% as the shallow limit for a wave 4 retracement. The engine’s typical zone starts at 14.6%. This only affects scoring; a shallower wave 4 is never rejected by it. Deferred.
- Triangle leg ratios under review. The specification describes contracting legs of about 78% of the previous leg and a final leg near 61.8%; the engine scores against 61.8% and 78.6%, which looks transposed. It will only change if a benchmark run confirms the fix.
- Wave 3 is never the shortest. The usual rule says wave 3 may not be the shortest of waves 1, 3 and 5. A stricter reading requires wave 3 to be at least as long as wave 1. The engine keeps the usual rule, which allows extended first and fifth waves. Kept; the conflict is in the specification’s wording.
- One pivot stream, not two. The specification describes two parallel pivot sets, one from wicks and one from closes, held until one fails. The engine uses a single wick-based stream. Deferred as a roadmap item.
How are plan outcomes measured?
The scoring rules are fixed in advance. A plan is scored from the later of its start time and its publication time, so no bar the generator already saw counts in its favor. The entry fills only if price touches the zone inside the validity window, at the zone’s near edge; a filled plan then runs to its stop or its first target, even after the window closes. Extended-hours bars that decide an exit are checked for bad prints, and pre-market plans are never pooled with regular-session plans. This page reports no results or win rates.
What the engine does not do
- It does not place orders, hold accounts or manage positions.
- It does not use news, fundamentals, order flow or volume to set levels.
- It does not let a language model choose or adjust a price.
- It does not loosen a gate to produce more plans.
- It does not promise a plan every day, and a plan is not a recommendation.
To see these steps applied to a live chart, join the waitlist.
Questions
Does a language model decide the entry, stop or targets?
No. Every level in a published plan comes from the deterministic plan engine. A language model may afterwards write a short plain-English rationale; it must refer to levels by name, and a filter discards any text that quotes a price.
Why do so many days end with no plan?
A plan needs a fresh Elliott count, a fresh Smart Money trend pointing the same way, a zone where both engines agree, a stop inside sensible limits and targets that pay at least twice the risk. Most symbol-days fail at least one of those checks, and the engine reports which one instead of forcing a trade.
Will the same chart always give the same count?
Yes, for the same input bars. The engines use no randomness and no clock, so identical data produces an identical count and an identical plan. A new bar, or a data provider revising a bar, is new input and can change the result.
Which timeframes can I analyze?
Six: 1m, 5m, 15m, 1h, 1d and 1w. Published plans use the 15-minute timeframe, on the regular-session series for US equities (a separate pre-market slot adds the current day's pre-market bars); crypto trades around the clock and has no session filter.
Is the confidence score a probability?
No. It is the weighted score the Elliott engine used to rank competing counts. It is useful for comparing counts on the same chart, not as a chance of being right.
How are published plans scored after the fact?
From the later of the plan's start time and its publication time, so no bar the plan could already see counts in its favor. The entry must fill inside the validity window; a filled plan then runs to its stop or its first target.
Sources
- Elliott wave principle — Wikipedia
- Fibonacci retracement — Wikipedia
- Average true range — Wikipedia
Educational content, not financial advice. Trading involves substantial risk of loss.