indicator-buffer

SKILL.md

BufferList indicator development

Interface selection

Interface Additional Inputs Use Case
IIncrementFromChain IReusable, (DateTime, double) Chainable single-value indicators
IIncrementFromQuote (none — only IQuote from base) Requires OHLCV properties

See references/interface-selection.md for decision tree.

Constructor pattern

The chaining constructor parameter type depends on the interface implemented:

// IIncrementFromChain — chaining ctor takes IReadOnlyList<IReusable>
public class EmaList : BufferList<EmaResult>, IIncrementFromChain, IEma
{
    public EmaList(int lookbackPeriods)
    {
        Ema.Validate(lookbackPeriods);
        LookbackPeriods = lookbackPeriods;
        _buffer = new Queue<double>(lookbackPeriods);
    }

    public EmaList(int lookbackPeriods, IReadOnlyList<IReusable> values)
        : this(lookbackPeriods) => Add(values);
}
// IIncrementFromQuote — chaining ctor takes IReadOnlyList<IQuote>
public class AdxList : BufferList<AdxResult>, IIncrementFromQuote, IAdx
{
    public AdxList(int lookbackPeriods)
    {
        Adx.Validate(lookbackPeriods);
        LookbackPeriods = lookbackPeriods;
    }

    public AdxList(int lookbackPeriods, IReadOnlyList<IQuote> quotes)
        : this(lookbackPeriods) => Add(quotes);
}

Buffer management

  • _buffer.Update(capacity, value) — standard rolling buffer
  • _buffer.UpdateWithDequeue(capacity, value) — returns dequeued value for sum adjustment

State management

Use Clear() to reset all internal state:

public override void Clear()
{
    base.Clear();
    _buffer.Clear();
    _bufferSum = 0;
}

Testing constraints

  • Inherit BufferListTestBase
  • IIncrementFromChain → implement ITestChainBufferList
  • IIncrementFromQuote → implement ITestQuoteBufferList
  • Series parity: bufferResults.IsExactly(seriesResults)

Required implementation

  • Source code: src/**/{IndicatorName}.BufferList.cs file exists
    • Inherits BufferList<TResult> and implements correct increment interface
    • Two constructors: primary + chaining via : this(...) => Add(...);
    • Uses BufferListUtilities.Update() or UpdateWithDequeue()
    • Clear() resets results and all internal buffers
  • Unit testing: tests/indicators/**/{IndicatorName}.BufferList.Tests.cs exists
    • Inherits BufferListTestBase and implements correct test interface
    • All required abstract + interface methods implemented
    • Verifies equivalence with Series results
  • Catalog registration: Registered in Catalog.Listings.cs
  • Performance benchmark: Add to 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
Weekly Installs
16
GitHub Stars
1.2K
First Seen
Jan 30, 2026
Installed on
codex14
cursor14
trae14
cline13
github-copilot13
kiro-cli13