Moving Average Envelopes
Moving Average Envelopes is a price band channel overlay that is offset from the moving average of price. [Discuss] 💬
// C# usage syntax
IReadOnlyList<MaEnvelopeResult> results =
bars.ToMaEnvelopes(lookbackPeriods, percentOffset, movingAverageType);Parameters
| param | type | description |
|---|---|---|
lookbackPeriods | int | Number of periods (N) in the moving average. Must be greater than 1. |
percentOffset | double | Percent offset for envelope width. Example: 3.5% would be entered as 3.5 (not 0.035). Must be greater than 0. Typical values range from 2 to 10. Default is 2.5. |
movingAverageType | MaType | Type of moving average (e.g. SMA, EMA, HMA). See MaType enum options below. Default is MaType.SMA. |
Historical price bars requirements
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.
Detailed bars requirements for each of the MaType enum options types can be found at the links in the following table.
MaType enum options
These are the supported moving average types:
| enum value | moving average |
|---|---|
MaType.ALMA | Arnaud Legoux Moving Average |
MaType.DEMA | Double Exponential Moving Average |
MaType.EPMA | Endpoint Moving Average |
MaType.EMA | Exponential Moving Average |
MaType.HMA | Hull Moving Average |
MaType.SMA | Simple Moving Average (default) |
MaType.SMMA | Smoothed Moving Average |
MaType.TEMA | Triple Exponential Moving Average |
MaType.WMA | Weighted Moving Average |
🚩
For ALMA, default values are used for offset and sigma.
Response
IReadOnlyList<MaEnvelopeResult>- 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 periods will have
nullvalues since there's not enough data to calculate; the quantity will vary based on themovingAverageTypespecified.
🚩 ⚞ Convergence warning
Some moving average variants have decreasing magnitude, convergence-related precision errors that can be as high as ~5% deviation in indicator values for earlier periods. See the MaType enum options section above for more information.
MaEnvelopeResult
| property | type | description |
|---|---|---|
Timestamp | DateTime | Date from evaluated TBar |
Centerline | double | Moving average |
UpperEnvelope | double | Upper envelope band |
LowerEnvelope | double | Lower envelope band |
The moving average Centerline is based on the movingAverageType type specified.
Utilities
See Utilities and helpers for more information.
Chaining
This indicator may be generated from any chain-enabled indicator or method.
// example
var results = bars
.Use(CandlePart.HLC3)
.ToMaEnvelopes(..);Results cannot be further chained with additional transforms.
See Chaining indicators for more.
Streaming
Use the buffer-style List<T> when you need incremental calculations without a hub:
MaEnvelopesList maEnvList = new(lookbackPeriods, percentOffset, movingAverageType);
foreach (IBar bar in bars) // simulating stream
{
maEnvList.Add(bar);
}
// based on `ICollection<MaEnvelopeResult>`
IReadOnlyList<MaEnvelopeResult> results = maEnvList;Subscribe to a BarHub for advanced streaming scenarios:
BarHub barHub = new();
MaEnvelopesHub observer = barHub.ToMaEnvelopesHub(lookbackPeriods, percentOffset, movingAverageType);
foreach (IBar bar in bars) // simulating stream
{
barHub.Add(bar);
}
IReadOnlyList<MaEnvelopeResult> results = observer.Results;::: note In streaming mode, only certain moving average types are supported. ALMA, EPMA, and HMA are not yet supported in streaming mode and will throw a NotImplementedException. :::
See Buffer lists and Stream hubs for full usage guides.