---
url: /indicators/rolling-pivots.md
description: >-
  Rolling Pivot Points is a modern update to traditional fixed calendar window
  Pivot Points.  It depicts support and resistance levels, based on a defined
  rolling window and offset.
package: FacioQuo.Stock.Indicators
docs_version: v3
canonical: https://dotnet.stockindicators.dev/indicators/rolling-pivots
generated: 2026-09-30T04:41:06.055Z
commit: ae1f432eaa0b03ae9f39e032c69434b557efa4a2
---

# Rolling Pivot Points

Created by Dave Skender, Rolling Pivot Points is a modern update to traditional fixed calendar window Pivot Points.  It depicts support and resistance levels, based on a defined *rolling* window and offset.
[\[Discuss\] 💬](https://github.com/facioquo/stock-indicators-dotnet/discussions/274 "Community discussion about this indicator")

```csharp
// C# usage syntax
IReadOnlyList<RollingPivotsResult> results =
  bars.ToRollingPivots(windowPeriods, offsetPeriods, pointType);
```

## Parameters

| param | type | description |
| ----- | ---- | ----------- |
| `windowPeriods` | *`int`* | Number of periods (`W`) in the evaluation window.  Must be greater than 0 to calculate; but is typically specified in the 5-20 range. |
| `offsetPeriods` | *`int`* | Number of periods (`F`) to offset the window from the current period.  Must be greater than or equal to 0 and is typically less than or equal to `W`. |
| `pointType` | PivotPointType | Type of Pivot Point.  Default is `PivotPointType.Standard` |

For example, a window of 8 with an offset of 4 would evaluate bars like: `W W W W W W W W F F  F F C`, where `W` is the window included in the Pivot Point calculation, and `F` is the distance from the current evaluation position `C`.  A `bars` with daily bars using `W/F` values of `20/10` would most closely match the `month` variant of the traditional [Pivot Points](/indicators/pivot-points.md) indicator.

### Historical price bars requirements

You must have at least `W+F` periods of `bars` to cover the warmup periods.

`bars` is a collection of generic `TBar` historical price bars.  It should have a consistent frequency (day, hour, minute, etc).  See [the Guide](/guide/getting-started.md#historical-bars) for more information.

### PivotPointType options

**`PivotPointType.Standard`** - Floor Trading (default)

**`PivotPointType.Camarilla`** - Camarilla

**`PivotPointType.Demark`** - Demark

**`PivotPointType.Fibonacci`** - Fibonacci

**`PivotPointType.Woodie`** - Woodie

## Response

```csharp
IReadOnlyList<RollingPivotsResult>
```

* This method returns a time series of all available indicator values for the `bars` provided.
* 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 `W+F-1` periods will have `null` values since there's not enough data to calculate.

> [!WARNING]
> **️🖌️ Repaint warning**
>
> Historical results are a function of the rolling window position and will shift as new bars are added.  Each new period causes the window to move forward, recalculating pivot points based on the new window data.

### `RollingPivotsResult`

| property | type | description |
| -------- | ---- | ----------- |
| `Timestamp` | *`DateTime`* | Date from evaluated `TBar` |
| `R4` | *`double`* | Resistance level 4 (Camarilla only) |
| `R3` | *`double`* | Resistance level 3 |
| `R2` | *`double`* | Resistance level 2 |
| `R1` | *`double`* | Resistance level 1 |
| `PP` | *`double`* | Pivot Point |
| `S1` | *`double`* | Support level 1 |
| `S2` | *`double`* | Support level 2 |
| `S3` | *`double`* | Support level 3 |
| `S4` | *`double`* | Support level 4 (Camarilla only) |

### Utilities

* [.Find(lookupDate)](/utilities/results.md#find-by-date)
* [.RemoveWarmupPeriods()](/utilities/results.md#remove-warmup-periods)
* [.RemoveWarmupPeriods(removePeriods)](/utilities/results.md#remove-warmup-periods)

See [Utilities and helpers](/utilities.md) 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](/guide/chaining.md) for more.

## Streaming

Use the buffer-style `List<T>` when you need incremental calculations without a hub:

```csharp
RollingPivotsList rollingPivotsList = new(windowPeriods, offsetPeriods, pointType);

foreach (IBar bar in bars)  // simulating stream
{
  rollingPivotsList.Add(bar);
}

// based on `ICollection<RollingPivotsResult>`
IReadOnlyList<RollingPivotsResult> results = rollingPivotsList;
```

Subscribe to a `BarHub` for advanced streaming scenarios:

```csharp
BarHub barHub = new();
RollingPivotsHub observer = barHub.ToRollingPivotsHub(windowPeriods, offsetPeriods, pointType);

foreach (IBar bar in bars)  // simulating stream
{
  barHub.Add(bar);
}

IReadOnlyList<RollingPivotsResult> results = observer.Results;
```

See [Buffer lists](/guide/styles/buffer.md) and [Stream hubs](/guide/styles/stream.md) for full usage guides.
