Article contents

Evidence and scope

The accessible Wyckoff Analytics tutorial describes the framework, not an audited trading record for this detector. The proposed state machine captures one sequence rather than a complete Phase A–E classification.

Data and marketsOHLCV with a causal range definition. Volume quality, session effects and the availability of short execution vary by instrument.
Research timeframesIntraday or daily research examples require different holding horizons. Pivot confirmation and range duration must be stated in bars and actual elapsed time.
A 100–106 range is penetrated to 99.40, followed by a higher test at 99.90 on lower volume and a break of the reaction high.Open full-size illustration
Synthetic price and volume. The test marker shows its geometric location; the signal exists only after confirmation. This is not a backtest. Points are selected event landmarks, not consecutive bars or equal elapsed-time intervals.

Practical workflow

Workflow for Wyckoff spring and upthrust: testing the range–test–confirmation sequence
The full steps appear below. At each stage, missing data or failed conditions require a recorded rejection reason.
  1. Establish the rangeFreeze boundaries before a penetration occurs.
  2. Observe spring or upthrustRequire return through the specified buffer.
  3. Confirm the testWait for the pivot and comparable volume window.
  4. Confirm strength or weaknessBreak a reaction swing that was already known.
  5. Evaluate the executable tradeCheck remaining reward, stop distance and expiry.

A range must exist before the spring

A wick beneath a newly formed low is not automatically a spring. Before the event, there should be a trading range with support, resistance and repeated movement between them. During a persistent decline, a brief recovery can remain an ordinary countertrend bounce. Defining that prior range online is harder than finding the penetration candle.

Wyckoff Analytics describes return into a range, a subsequent test and strength confirmation, while noting that springs or UTADs need not appear in every structure [1]. The machine version here covers only this sequence and does not automatically label every broader phase.

An upper-side sequence is an upthrust candidate. Calling it UTAD additionally requires a defined distribution context. If that context has not been operationalized, keep the narrower label. Stories about who accumulates or distributes remain hypotheses because candle data does not identify the participants.

A state machine for range, spring, test and strength

All thresholds below are proposed research parameters. Construct a range from 50 completed bars, with at least two separated touches at each boundary, width between 3 and 8 ATR, and a small slope under a fixed measurement. Freeze its boundaries, ATR and a 40-bar lifetime. Choosing the range only after seeing a future breakout would violate the information sequence.

A spring candidate penetrates support−0.10ATR and closes back above support+0.15ATR within at most three bars. Then wait for a confirmed test pivot low more than 0.10ATR above the spring extreme. Use the same pivot definition for every candidate; selecting a prettier low after the outcome changes the rule.

Compare spring and test volume over equal-length windows or through same-time RVOL. A proposed filter requires lower normalized mean volume and a narrower range at the test. After confirmation, a sign of strength requires a close above an already confirmed reaction swing high plus b. If that high is not yet known, wait rather than backdating it.

The range detector itself needs a versioned specification. For example, a separate implementation experiment could quantify slope with a regression over the 50 closes and require its projected change to remain below one quarter of range width. That is an additional proposal, not a rule taken from the source or a threshold already validated here.

RANGE -> SPRING_CANDIDATE after reclaim
SPRING_CANDIDATE -> TEST_CONFIRMED only at test_pivot.confirmed_at
require test_low > spring_low + b
optional: normalized_test_volume < normalized_spring_volume
TEST_CONFIRMED -> SOS when close > known_reaction_high+b
any state -> INVALID if spring_extreme breaks
any waiting state -> EXPIRED at fixed TTL

Effort and result without an after-the-fact story

Comparing price progress with trading activity gives an observable effort/result description. High volume without a new low can be consistent with absorption, auction mechanics or substantial two-way turnover. Low test volume can indicate less selling or simply fewer participants. Subsequent price behavior is needed to distinguish the hypotheses.

Split high-volume and low-volume springs before inspecting outcomes. Use a price-only baseline, then add the test-volume condition to measure incremental value. Strong SOS volume and a wide bullish candle may be related observations rather than independent evidence.

Duration normalization matters. A three-bar spring will mechanically have more total volume than a one-bar test in many cases. Missing trade records or shortened sessions can create false dry-up. Keep the count of valid observations and use the same treatment for both parts of the sequence.

Synthetic sequence and an unattractive entry

Take a synthetic range [100,106] with A=1. Price reaches 99.40 and closes at 100.40. After a reaction to 102.20, a test low forms at 99.90 with normalized mean volume 70 versus 150 at the spring. Only after the test pivot is confirmed does a close at 102.40 exceed the reaction high of 102.20 plus b=0.10. That is the proposed SOS event.

Buying after the signal at 102.50, with a stop beyond the spring at 99.30 and target at range resistance 106, gives reward 3.50 against risk 3.20: about 1.09R before costs. A visually complete sequence therefore need not offer an attractive entry. Buying at reclaim would have different risk/reward but would also include many candidates that never complete a test or SOS.

A test falling to 99.20 invalidates the old sequence before entry. In another path, the SOS trade has already filled and price subsequently falls to 99.20, with protection executed at 99.25. The loss is 3.25. Relabeling the test as a new spring must not erase that failed trade. All prices and volume figures here are invented examples.

Choose the point of commitment in advance

Three versions enter after the spring reclaim, after test confirmation, or after SOS and possibly its retest. They are different strategies. The SOS version cannot claim an entry at the earlier test low because later data established that low as a valid test. The distinction between historical marker location and information availability is covered by technical documentation [2].

A stop below the spring extreme invalidates the complete proposed structure. A tighter stop below the test low may exit even while the broader range survives. Name these trade protection and structural invalidation separately. Predetermine maximum holding time and behavior near the opposite range boundary.

Reverse the geometry for upthrusts without assuming short costs equal long costs. A valid signal without borrow or with an excessive spread is not necessarily an executable trade. Consult the venue’s order mechanics when specifying stops and entries [3].

A range may generate several tests. The baseline should identify the first eligible test and either accept it, reject it or expire. Allowing unlimited replacement tests until one looks successful makes confirmation depend on the outcome. Any re-entry policy should preserve the original event lineage and the total risk spent on it.

Validate the sequence rather than selecting schematics

Count every range that qualified at creation, including ranges with no spring, springs without tests and tests without SOS. These stage counts reveal how much opportunity each confirmation removes. Starting with completed textbook examples inflates apparent success.

Compare spring alone, spring plus test, and spring plus test plus SOS on the same event population. Report delay, reward/risk at actual entry, no-fill rates and net expectancy. Continued range breakdowns are useful controls for asking whether reclaim contributes information beyond volatility.

Do not optimize phase labels manually on the final test set. A complete Wyckoff system would require its own causal phase definitions or a documented human-rating process. Check agreement between independent reviewers before treating subjective classifications as reproducible inputs. This article does not provide enough evidence to label every qualifying sequence accumulation or distribution.

Common pitfalls

Every lower wick becomes a spring

Without a prior range the event lacks this framework’s intended context.

Buying at the test low after SOS

Later confirmation cannot authorize an earlier historical fill.

Renaming a failure

A new spring candidate must preserve losses and invalidations from the old sequence.

Checklist before using this method

Check each item after verifying it on your data. Progress is saved in this browser; it does not certify a profitable strategy.

0/7 items

Frequently asked questions

Must every accumulation contain a spring?

No. The source framework allows other structures. This detector intentionally studies one limited sequence.

Is lower test volume mandatory?

It is an optional proposed filter. Compare the price-only sequence with the filtered version rather than assuming lower volume must improve returns.

Research sources

Each source supports the definition or evidence described beside it. The pseudocode, synthetic examples and proposed parameters require separate validation.

  1. Wyckoff MethodWyckoff Analytics. Read the public spring, test, SOS and upthrust tutorial, not the complete original books. Checked: .
  2. RepaintingTradingView. Read technical documentation about information timing. Checked: .
  3. Futures Order TypesCME Group. Read order mechanics; no strategy profitability is established. Checked: .

Related methods

Risk note

This content supports education and research design, not financial advice. Backtest is historical simulation, does not guarantee future performance and does not place real trades. Methods in this library are not automatically features available in the app. See methodology and learning center.

Validate rules before risking real capital

Check app support, data and individual simulated trades; advanced detectors may require a separate implementation.

Download Backtest on the App Store