indicator-buffer
Implement BufferList incremental indicators with efficient state management. Use for IIncrementFromChain or IIncrementFromQuote implementations. Covers interface selection, constructor patterns, and BufferListTestBase testing requirements.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
BufferList indicator development
Interface selection
All BufferList implementations support IQuote inputs from the base class. The interface determines what additional input types are supported:
| Interface | Additional Inputs | Use Case | Examples |
|---|---|---|---|
IIncrementFromChain |
IReusable, (DateTime, double) |
Chainable single-value indicators | SMA, EMA, RSI |
IIncrementFromQuote |
(none - only IQuote) | Requires OHLCV properties | Stoch, ATR, VWAP |
Constructor pattern
public class MyIndicatorList : BufferList<MyResult>, IIncrementFromChain
{
private readonly Queue<double> _buffer;
// Primary constructor (parameters only)
public MyIndicatorList(int lookbackPeriods)
{
ArgumentOutOfRangeException.ThrowIfLessThan(lookbackPeriods, 1);
LookbackPeriods = lookbackPeriods;
_buffer = new Queue<double>(lookbackPeriods);
}
// Chaining constructor (parameters + quotes)
public MyIndicatorList(int lookbackPeriods, IReadOnlyList<IQuote> quotes)
: this(lookbackPeriods) => Add(quotes);
}
Buffer management
Use extension methods from BufferListUtilities:
-
_buffer.Update(capacity, value)- Standard rolling buffer -
_buffer.UpdateWithDequeue(capacity, value)- Returns dequeued value for sum adjustment
Note: Future refactor planned to rename
BufferListUtilitiestoBufferListExtensionsfor .NET idiomatic naming.
State management
Use Clear() to reset all internal state:
public override void Clear()
{
base.Clear();
_buffer.Clear();
_bufferSum = 0;
}
Testing constraints
- Inherit
BufferListTestBase(NOTTestBase) - Implement test interface matching increment interface:
-
IIncrementFromChain→ITestChainBufferList -
IIncrementFromQuote→ITestQuoteBufferList
-
- Verify exact Series parity with
bufferResults.IsExactly(seriesResults)(NOTShould().Be()) - All 5 base class tests pass (incremental adds, batching, constructor chaining, Clear(), auto-pruning)
Required implementation
- Source code:
src/**/{IndicatorName}.BufferList.csfile exists- Inherits
BufferList<TResult>and implements correct increment interface - Two constructors: primary + chaining via
: this(...) => Add(quotes); - Uses
BufferListUtilities.Update()orUpdateWithDequeue() -
Clear()resets results and all internal buffers
- Inherits
- Unit testing:
tests/indicators/**/{IndicatorName}.BufferList.Tests.csexists- Inherits
BufferListTestBaseand implements correct test interface - All 5 required tests from base class pass
- Verifies equivalence with Series results
- Inherits
- Catalog registration: Registered in Catalog.Listings.cs
- Performance benchmark: Add to #file:../../../tools/performance/Perf.Buffer.cs
- Public documentation: Update
docs/indicators/{IndicatorName}.md - Regression tests: Add to
tests/indicators/**/{IndicatorName}.Regression.Tests.cs - Migration guide: Update docs/migration.md for notable and breaking changes from v2
Common pitfalls
- Manual buffer management instead of using BufferListUtilities extension methods
- Not implementing Clear() to reset all internal state properly
- Using Should().Be() instead of IsExactly() for Series parity verification
Last updated: January 25, 2026
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-01-20
- Mise à jour de l’index
- 2026-01-31
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!