Williams Fractal
Created by Bill Williams in Trading Chaos (1995), Fractal is a retrospective price pattern that identifies a central high or low point chevron. [Discuss] 💬
// C# usage syntax
IReadOnlyList<FractalResult> results =
bars.ToFractal(windowSpan);Parameters
| param | description |
|---|---|
windowSpanint | Evaluation window span width (S). Must be at least 2. Default is 2. |
endTypeEndType | Determines whether Close or High/Low are used to find end points. Default is EndType.HighLow. |
The total evaluation window size is 2×S+1, representing ±S from the evaluation date.
An overload takes leftSpan and rightSpan in place of windowSpan to evaluate an asymmetric window: bars.ToFractal(leftSpan, rightSpan, endType). Each span must be at least 2, and the total evaluation window size is leftSpan+rightSpan+1.
Historical price bars requirements
You must have at least 2×S+1 periods of bars (leftSpan+rightSpan+1 for the overload) to cover the warmup periods; however, more is typically provided since this is a chartable candlestick pattern.
bars is a collection of generic TBar historical price bars. It should have a consistent frequency (day, hour, minute, etc). See the Guide for more information.
EndType enum options
| enum / value | description |
|---|---|
EndType.Close0 | Threshold measured from bar Close price |
EndType.HighLow1 | Threshold measured from bar High and Low price |
Response
IReadOnlyList<FractalResult>- This method returns a time series of all available indicator values for the
barsprovided. - It always returns the same number of elements as there are in the historical price bars.
- It does not return a single incremental indicator value.
- The first and last
Speriods inbarsare unable to be calculated since there's not enough prior/following data. - Per Williams' definition the middle bar must be strictly beyond both wings, so when two or more bars tie for the extreme value, no fractal is identified.
🖌️ Repaint warning
This price pattern uses future bars and will never identify a fractal in the last S periods of bars. Fractals are retroactively identified.
FractalResult
| property | description |
|---|---|
TimestampDateTime | Date from evaluated TBar |
FractalBeardecimal? | Value indicates a high point; otherwise null is returned. |
FractalBulldecimal? | Value indicates a low point; otherwise null is returned. |
Utilities
See Utilities and helpers for more information.
Chaining
This indicator is not chain-enabled and must be generated from bars. It cannot be used for further processing by other chain-enabled indicators.
See Chaining indicators for more.
Streaming
Use the buffer-style List<T> when you need incremental calculations without a hub:
FractalList fractalList = new(windowSpan);
// call from your WebSocket or SSE message handler
void OnBarReceived(IBar bar) => fractalList.Add(bar);
// based on `ICollection<FractalResult>`; fills as the handler runs
IReadOnlyList<FractalResult> results = fractalList;Subscribe to a BarHub for advanced streaming scenarios:
BarHub barHub = new();
FractalHub observer = barHub.ToFractalHub(windowSpan);
// call from your WebSocket or SSE message handler
void OnBarReceived(IBar bar) => barHub.Add(bar);
// results fill as the handler runs
IReadOnlyList<FractalResult> results = observer.Results;See Buffer lists and Stream hubs for full usage guides.