DaveSkender

indicator-series

@DaveSkender/indicator-series
DaveSkender
1,166
265 forks
Updated 1/18/2026
View on GitHub

Implement Series-style batch indicators with mathematical precision. Use for new StaticSeries implementations or optimization. Series results are the canonical reference—all other styles must match exactly. Focus on cross-cutting requirements and performance optimization decisions.

Installation

$skills install @DaveSkender/indicator-series
Claude Code
Cursor
Copilot
Codex
Antigravity

Details

Path.github/skills/indicator-series/SKILL.md
Branchv3
Scoped Name@DaveSkender/indicator-series

Usage

After installing, this skill will be available to your AI coding assistant.

Verify installation:

skills list

Skill Instructions


name: indicator-series description: Implement Series-style batch indicators with mathematical precision. Use for new StaticSeries implementations or optimization. Series results are the canonical reference—all other styles must match exactly. Focus on cross-cutting requirements and performance optimization decisions.

Series indicator development

File structure

  • Implementation: src/{category}/{Indicator}/{Indicator}.StaticSeries.cs
  • Test: tests/indicators/{category}/{Indicator}/{Indicator}.StaticSeries.Tests.cs
  • Catalog: src/{category}/{Indicator}/{Indicator}.Catalog.cs
  • Categories: a-d, e-k, m-r, s-z (alphabetical)

Performance optimization

Array allocation pattern (recommended for new implementations):

TResult[] results = new TResult[length];
// ... assign results[i] = new TResult(...);
return new List<TResult>(results);  // NOT results.ToList()

When to use: Indicators with predictable result counts show ~2x improvement (Issue #1259)

When NOT to use: Benchmark first. Some indicators (ADL) remain faster with List.Add()

Conversion strategy:

  1. Benchmark existing List-based implementation
  2. Convert to array pattern
  3. Benchmark again
  4. Revert if no improvement or regression

Required implementation

Beyond the .StaticSeries.cs file, ensure:

  • Catalog registration: Create src/**/{IndicatorName}.Catalog.cs and register in src/_common/Catalog/Catalog.Listings.cs
  • Unit tests: Create tests/indicators/**/{IndicatorName}.StaticSeries.Tests.cs
    • Inherit from StaticSeriesTestBase
    • Include [TestCategory("Regression")] for baseline validation
    • Verify against manually calculated reference values
  • Performance benchmark: Add to tools/performance/SeriesIndicators.cs
  • Public documentation: Update docs/_indicators/{IndicatorName}.md

Precision testing patterns

  • Store reference data separately: Create {Indicator}.Data.cs files with arrays of expected values at maximum precision
  • Excel manual calculations: Export at highest precision available (~14 decimal places for default.csv values ~200)
  • Baseline regression validation: Compare full dataset against reference arrays using Money10-Money12 precision
  • Spot check assertions: Use Money4 for individual sample value readability (sanity checks, not proofs)
  • Longer datasets: May require lower precision (e.g., Money10 for 15k quotes) due to accumulated floating-point error
  • Document degradation: When precision must be lowered, explain why in test comments

Examples

  • Simple single-value: src/s-z/Sma/Sma.StaticSeries.cs
  • Exponential smoothing: src/e-k/Ema/Ema.StaticSeries.cs
  • Complex multi-stage: src/a-d/Adx/Adx.StaticSeries.cs
  • Multi-line results: src/a-d/Alligator/Alligator.StaticSeries.cs

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

Constitutional constraints

  • Series is truth: All other styles (BufferList, StreamHub) MUST match Series results exactly
  • Verify against authoritative sources: NEVER trust other libraries—use reference publications only
  • Algebraic stability: Prefer boundary detection over clamping
  • Real-world testing: Synthetic boundary data may miss precision edge cases
  • Fix formulas, not symptoms: When all styles fail identically, fix the core algorithm

NEVER modify formulas without verification against authoritative mathematical references. See src/AGENTS.md for formula protection rules.


Last updated: December 31, 2025