Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
303 commits
Select commit Hold shift + click to select a range
f1ea006
fix: address all 12 remaining pr review comments
ooples Jan 22, 2026
6bc196a
fix: address 5 additional pr review comments
ooples Jan 22, 2026
d426380
fix: address 2 additional pr review comments
ooples Jan 22, 2026
0e584ca
ci: add ci workflow for build and test
ooples Jan 22, 2026
bbb2ed7
ci: build on both net10.0 and net461 frameworks
ooples Jan 22, 2026
76491e4
ci: fix dotnet-version format and add test results upload
ooples Jan 22, 2026
2f59daa
feat: enhance benchmarks and convert devconsole to v2.0 api
ooples Jan 23, 2026
a198db0
perf: fix v2.0 builder performance regression
ooples Jan 23, 2026
65c5ba6
perf: optimize seriesevaluator with fast path and caching
ooples Jan 23, 2026
d665571
perf: reduce allocations in builder catalogs and runtime
ooples Jan 23, 2026
2e231cf
perf: add memory-optimized compute layer for zero-allocation fast path
ooples Jan 23, 2026
6b316d1
perf: implement zero-allocation span-based core indicator computations
ooples Jan 23, 2026
218faca
feat: extend source generator for all 752 indicator compute methods
ooples Jan 23, 2026
8d9a03f
feat: add williams %r and cci to fast path indicators
ooples Jan 23, 2026
9b6acc4
feat: add 19 fast path indicators with span-based core implementations
ooples Jan 23, 2026
28fe3af
perf: add 30+ fast path indicators for zero-allocation compute
ooples Jan 23, 2026
1d5f2f8
perf: add ~30 more fast path indicators to reach ~191 total
ooples Jan 23, 2026
df0e649
perf: add ~18 more fast path indicators to reach ~209 total
ooples Jan 23, 2026
2211ef8
perf: add 7 more fast path moving average indicators to reach ~216 total
ooples Jan 23, 2026
1630172
perf: add 11 more fast path oscillators to reach ~218 total
ooples Jan 23, 2026
73195f3
perf: add 4 more fast path volatility indicators to reach ~222 total
ooples Jan 23, 2026
6e15d7c
perf: add 2 more fast path indicators to reach ~214 total
ooples Jan 23, 2026
62c4803
perf: add WilliamsAccumulationDistribution fast path indicator to rea…
ooples Jan 23, 2026
62f2990
perf: add ConnorsRelativeStrengthIndex alias to reach ~216 fast path …
ooples Jan 23, 2026
7cf7cf3
perf: add StochasticRelativeStrengthIndex alias to reach ~217 fast pa…
ooples Jan 23, 2026
a88fb30
perf: add VolumeWeightedRelativeStrengthIndex alias to reach ~218 fas…
ooples Jan 23, 2026
5af60a3
perf: add MovingAverageConvergenceDivergence mapping to fix fast path…
ooples Jan 23, 2026
81dadaa
perf: add PivotPointAverage fast path indicator to reach ~219 total
ooples Jan 23, 2026
5a9358d
perf: add EhlersSuperSmootherFilter alias to reach ~220 fast path ind…
ooples Jan 23, 2026
603d8c4
perf: add ErgodicCandlestickOscillator fast path indicator to reach ~…
ooples Jan 23, 2026
117299f
perf: add StochasticFastOscillator alias to reach ~221 fast path indi…
ooples Jan 23, 2026
227cec6
perf: add MassThrustIndicator and McGinleyDynamicIndicator aliases
ooples Jan 23, 2026
6d62f9a
perf: add PringSpecialK alias to reach ~224 fast path indicators
ooples Jan 23, 2026
1ad3ef4
perf: add TillsonT3MovingAverage alias to reach ~225 fast path indica…
ooples Jan 23, 2026
405cb62
feat: add chandequickstick fast path alias
ooples Jan 23, 2026
b9f04eb
fix: correct pricechannel enum mapping (singular not plural)
ooples Jan 23, 2026
ecb8209
feat: add bollingerbands percentb and atr fast path indicators
ooples Jan 23, 2026
dd0cb7b
feat: add oscillator fast path batch 1 (7 new indicators)
ooples Jan 23, 2026
1417d39
feat: add oscillator fast path batch 2 (4 new indicators)
ooples Jan 23, 2026
12b768b
feat: add oscillator fast path batch 3 (7 new indicators)
ooples Jan 23, 2026
41433e1
feat: add oscillator fast path batch 4 (6 new indicators)
ooples Jan 23, 2026
491db85
feat: add oscillator fast path batch 5 (7 new indicators)
ooples Jan 23, 2026
95fe65c
feat: add oscillator fast path batch 6 (8 new indicators)
ooples Jan 23, 2026
746008f
feat: add oscillator fast path batch 7 (8 new indicators)
ooples Jan 23, 2026
26623ba
feat: add oscillator fast path batch 8 (8 new indicators)
ooples Jan 23, 2026
9bb3f1b
feat: add oscillator fast path batch 9 (8 new indicators)
ooples Jan 23, 2026
7ae0856
feat: add oscillator fast path batch 10 (8 new indicators)
ooples Jan 23, 2026
bbb9f13
feat: add oscillator fast path batch 11 (8 ehlers oscillators)
ooples Jan 23, 2026
813b164
feat: add oscillator fast path batch 12 (8 new indicators)
ooples Jan 23, 2026
9be2283
feat: add oscillator fast path batch 13 (8 new indicators)
ooples Jan 23, 2026
676ea5c
feat: add moving average fast path batch 14 (8 new indicators)
ooples Jan 23, 2026
85b7d73
feat: add moving average fast path batch 15 (8 new indicators)
ooples Jan 23, 2026
aa7d54a
feat: add trend fast path batch 16 (8 new indicators)
ooples Jan 23, 2026
f419069
feat: add ehlers laguerre fast path batch 17 (8 new indicators)
ooples Jan 23, 2026
4d76220
feat: add moving average fast path batch 18 (6 new indicators)
ooples Jan 24, 2026
e28ea0d
feat: add ehlers filter fast path batch 19 (8 new indicators)
ooples Jan 24, 2026
a7ce56f
feat: add ehlers filters and ma fast path batch 20 (8 new indicators)
ooples Jan 24, 2026
cad777a
fix: add MovingAverageConvergenceDivergence to FastPathIndicators
ooples Jan 24, 2026
309de9c
feat: add ElderRayIndex to fast path indicators
ooples Jan 24, 2026
22cdac8
feat: add SimpleCycle oscillator fast path (batch 21)
ooples Jan 24, 2026
f6ace21
feat: add SimpleLines oscillator fast path (batch 21)
ooples Jan 24, 2026
10f5bf8
feat: add BelkhayateTiming oscillator fast path (batch 21)
ooples Jan 24, 2026
e9434ab
feat: add DetrendedSyntheticPrice oscillator fast path (batch 21)
ooples Jan 24, 2026
3a10270
feat: add DoubleExponentialSmoothing fast path (batch 21)
ooples Jan 24, 2026
75a0548
feat: add counting and performance oscillators fast path (batch 22)
ooples Jan 24, 2026
e58ae6f
feat: add move tracker and market direction oscillators fast path (ba…
ooples Jan 24, 2026
48c66b1
feat: add morphed sine wave oscillator fast path (batch 22 final)
ooples Jan 24, 2026
2cc8e34
feat: add batch 23 fast path indicators (statistical and price)
ooples Jan 24, 2026
7943ff0
perf: add batch 24 fast path indicators (demark)
ooples Jan 24, 2026
f132232
perf: expand getmovingaveragelist fast path to 52 types
ooples Jan 24, 2026
362dfe8
fix: correct core moving average algorithms and expand fast path
ooples Jan 24, 2026
bf3d27f
perf: add holt, kama, and supersmoother to fast path (62 types total)
ooples Jan 24, 2026
385bd72
fix: rewrite ehlersdeviationscaledmovingaverage core to match original
ooples Jan 24, 2026
da46b4c
feat: add 27 more core moving average fast paths
ooples Jan 24, 2026
beb462a
perf: add 52 new Core methods and expand fast path to 142/162 types
ooples Jan 24, 2026
be76a82
fix: resolve streaming parity test failures for 4 indicators
ooples Jan 24, 2026
63f429e
feat: add core methods for 7 remaining single-input movingavgtype values
ooples Jan 24, 2026
b607a18
feat: add core methods for 11 multi-input movingavgtype values
ooples Jan 24, 2026
f818487
feat: add 27 new specoptions classes and wire 32 indicators to fast path
ooples Jan 24, 2026
d3dcde1
feat: add 30 new specoptions classes and wire 62 indicators to fast path
ooples Jan 24, 2026
fc67c30
feat: wire batch 3 specoptions to trycomputefast dispatch
ooples Jan 24, 2026
b6da00c
feat: add batch 4 specoptions and wire remaining batch 3 oscillators
ooples Jan 24, 2026
0660827
feat: add batch 5 specoptions and wire to trycomputefast dispatch
ooples Jan 24, 2026
8173f8a
feat: add batch 6 specoptions and wire to trycomputefast dispatch
ooples Jan 24, 2026
95b9cc5
feat: add batch 7 specoptions and wire to trycomputefast dispatch
ooples Jan 24, 2026
19c09b2
feat: complete all computefast wiring with batch 8 specoptions
ooples Jan 24, 2026
9a9c372
feat: add batch 25-26 fast path wrappers for unwired core methods
ooples Jan 24, 2026
d6d0e86
feat: add batch 27 fast path wrappers for multi-input core methods
ooples Jan 24, 2026
869315a
docs: update v2 fast path checklist with batches 25-27 progress
ooples Jan 24, 2026
6a02cbe
feat: add batch 28 fast path wrappers for remaining core methods
ooples Jan 24, 2026
5a2c962
feat: add multi-output indicator support for fast path
ooples Jan 24, 2026
5c933ff
docs: update checklist with 100% coverage analysis
ooples Jan 24, 2026
86bc33a
feat: add batch 29 core methods and fast path for 3hma and aarma
ooples Jan 24, 2026
a0ac560
feat: add batch 30 specoptions and dispatch for gdema, ehlers fir/iir…
ooples Jan 24, 2026
9018639
docs: update v2 fast path checklist with batch 29-30 progress
ooples Jan 24, 2026
a6916d4
feat: add volume adjusted moving average specoptions and dispatch
ooples Jan 24, 2026
92f4cf4
feat: add average day range specoptions and dispatch
ooples Jan 24, 2026
1b9f8b5
docs: update v2 fast path checklist with accurate coverage stats
ooples Jan 24, 2026
6e19315
feat: add chande intraday momentum index core method and specoptions
ooples Jan 24, 2026
448b8ca
feat: add contract high and contract low core methods and specoptions
ooples Jan 24, 2026
9fb8551
feat: add oscar indicator, narrow bandpass filter, tfs tether line, a…
ooples Jan 24, 2026
8a046a1
feat: add upside downside volume, vortex indicator, and guppy count b…
ooples Jan 24, 2026
5c17186
perf: add core methods for ehlers trendflex, reflex, correlation trend
ooples Jan 24, 2026
e1ced0e
perf: add core methods for trend indicators
ooples Jan 24, 2026
534222f
perf: add core methods for rsi-type indicators
ooples Jan 24, 2026
2db7ec2
perf: add core methods for stochastic and ratio indicators
ooples Jan 24, 2026
4b742c9
feat: add core methods for ravi, wad, total power, turbo indicators
ooples Jan 24, 2026
3d61198
feat: add core methods for ttm scalper and related oscillators
ooples Jan 24, 2026
97df06e
feat: add v2 fast path for 4 ehlers indicators
ooples Jan 24, 2026
ec8b0d5
feat: add v2 fast path for 4 more ehlers indicators
ooples Jan 24, 2026
a8b539d
feat: add v2 fast path for 4 more ehlers indicators
ooples Jan 24, 2026
8f7576a
feat: add v2 fast path for 4 ehlers band pass filters
ooples Jan 24, 2026
a2497ab
feat: add v2 fast path for 4 more ehlers indicators
ooples Jan 24, 2026
1406bb7
perf: add batch 6 ehlers core methods for v2 fast path
ooples Jan 24, 2026
259c04a
feat: add ehlers impulse reaction core method for v2 fast path
ooples Jan 24, 2026
1fc59f5
feat: add ehlers reverse ema and squelch indicator core methods
ooples Jan 24, 2026
0ef3d01
feat: add ehlers reverse ema v2 and stochastic cyber cycle core methods
ooples Jan 24, 2026
60f56d6
feat: add ehlers center of gravity oscillator and reflex indicator co…
ooples Jan 24, 2026
6ae577e
feat: add ehlers trendflex indicator core method
ooples Jan 24, 2026
20ceddf
docs: update v2 fast path checklist with accurate counts and remainin…
ooples Jan 24, 2026
f75ae8b
feat: add jmarsxclone v2 fast path implementation
ooples Jan 24, 2026
7d059a2
feat: add rateofchange and williamsfractals v2 fast path implementations
ooples Jan 24, 2026
541d835
feat: add detrendedpriceoscillator v2 fast path implementation
ooples Jan 24, 2026
8ece05f
feat: add polarizedfractalefficiency and schafftrendcycle v2 fast path
ooples Jan 24, 2026
dd7e32b
feat: add smoothedrateofchange v2 fast path implementation
ooples Jan 24, 2026
804dd00
feat: add pivot point and channel core methods
ooples Jan 25, 2026
5fc2731
feat: add v2 fast path for pivot point and channel indicators
ooples Jan 25, 2026
d8e5943
feat: add batch 35 core methods for trailing stops
ooples Jan 25, 2026
985991f
feat: add batch 36 core methods for welles wilder summation, damping …
ooples Jan 25, 2026
e652fa4
docs: update checklist counts after batch 36
ooples Jan 25, 2026
a8e68e6
feat: add batch 37 spec wiring for vertical horizontal filter and lin…
ooples Jan 25, 2026
fa3e761
docs: update checklist counts after batch 37
ooples Jan 25, 2026
c670e69
feat: add movingaverageregistry infrastructure for v2 fast path
ooples Jan 25, 2026
e8ce722
fix: correct enum names in movingaverageregistry
ooples Jan 25, 2026
39eb712
docs: update checklist with movingaverageregistry infrastructure
ooples Jan 25, 2026
118a8fc
feat: add 105 struct implementations for MovingAverageRegistry
ooples Jan 25, 2026
b8bad67
feat: complete movingaverageregistry with all 49 remaining struct imp…
ooples Jan 25, 2026
e348af1
feat: add movingavgtype support to v2 specoptions and bollingerbands
ooples Jan 25, 2026
f4b6146
feat: add movingavgtype to more v2 specoptions
ooples Jan 25, 2026
addade5
feat: add movingavgtype to oscillator and channel specoptions
ooples Jan 25, 2026
c7b0575
feat: add movingavgtype to momentum, exit, and ehlers specoptions
ooples Jan 25, 2026
0946924
feat: add movingavgtype to oscillator and ma specoptions
ooples Jan 25, 2026
fe1296d
feat: add movingavgtype to more moving average specoptions
ooples Jan 25, 2026
863c1da
feat: add movingavgtype to additional ma specoptions
ooples Jan 25, 2026
ed3cfec
feat: add movingavgtype to smoothed ma specoptions
ooples Jan 25, 2026
1f278df
feat: add movingavgtype to tillson and turbo specoptions
ooples Jan 25, 2026
b7d6709
feat: add movingavgtype to 22 more specoptions classes
ooples Jan 25, 2026
d969584
feat: add movingavgtype to 17 more specoptions classes
ooples Jan 25, 2026
ae1d716
feat: add movingavgtype to 10 more specoptions classes
ooples Jan 25, 2026
6d82707
feat: add movingavgtype to 10 more specoptions classes
ooples Jan 25, 2026
760c586
feat: add movingavgtype to 8 more specoptions classes
ooples Jan 25, 2026
e1c3d8d
feat: add movingavgtype to 10 more specoptions classes
ooples Jan 25, 2026
f1df851
feat: add movingavgtype to 6 more specoptions classes
ooples Jan 25, 2026
2fc6638
feat: add movingavgtype to 8 more specoptions classes
ooples Jan 25, 2026
f81a7ee
feat: add movingavgtype to 8 more specoptions classes
ooples Jan 25, 2026
ba9493f
feat: add 32 new specoptions classes with movingavgtype support
ooples Jan 25, 2026
0b8b502
feat: add 10 more specoptions classes with movingavgtype support
ooples Jan 25, 2026
e24780f
feat: add 7 rsi-related specoptions classes with movingavgtype support
ooples Jan 25, 2026
d9097f1
feat: add 19 ehlers specoptions classes with movingavgtype support
ooples Jan 25, 2026
9473ffe
feat: add 4 trend and rsi specoptions classes with movingavgtype support
ooples Jan 25, 2026
247636e
feat: add 9 oscillator specoptions classes with movingavgtype support
ooples Jan 25, 2026
b6ea5a0
feat: add 3 chande and bollinger specoptions classes with movingavgtype
ooples Jan 25, 2026
11120ca
feat: add 8 volume specoptions classes with movingavgtype support
ooples Jan 25, 2026
87aff32
feat: add 14 price channel specoptions with matype support
ooples Jan 25, 2026
b013346
feat: add 36 specoptions with movingavgtype support
ooples Jan 25, 2026
6d67bea
feat: add 27 more specoptions with movingavgtype support
ooples Jan 25, 2026
d5e5186
feat: add 20 more specoptions with movingavgtype support
ooples Jan 25, 2026
c713208
feat: add movingavgtype support to 381 specoptions classes
ooples Jan 25, 2026
02c20a0
feat: add v2 fast path for 23 more indicators with core methods
ooples Jan 25, 2026
e8f63df
feat: add v2 fast path for 7 oscillator indicators
ooples Jan 25, 2026
5aec8c4
feat: add v2 fast path for batch 7 indicators
ooples Jan 25, 2026
6a5a4b8
feat: add v2 fast path for batch 8 indicators
ooples Jan 25, 2026
1837bca
feat: add v2 fast path for batch 9 indicators
ooples Jan 25, 2026
9b93a6f
feat: add v2 fast path for batch 10 ehlers indicators
ooples Jan 25, 2026
107fa90
feat: add VariableIndexDynamicAverage dispatch route (batch 11)
ooples Jan 25, 2026
b97d30e
feat: add v2 fast path for EhlersSimpleDeriv, EhlersSimpleClip indica…
ooples Jan 25, 2026
a12c0e2
feat: add v2 fast path for elder, ehlers rvi, ehlers mad, dema2 lines
ooples Jan 25, 2026
e72f06c
feat: add v2 fast path for gainloss moving average indicator
ooples Jan 25, 2026
60ce79c
feat: add v2 fast path for ergodic mean deviation indicator
ooples Jan 25, 2026
24386e9
feat: add v2 fast path for 6 volatility indicators
ooples Jan 25, 2026
4c93b70
chore: remove temporary files from previous commit
ooples Jan 25, 2026
9a8252e
feat: add v2 fast path for 6 risk ratios and trend indicators
ooples Jan 25, 2026
7d5ffb8
feat: add v2 fast path for 7 moving average band indicators
ooples Jan 25, 2026
a36a3f0
feat: add v2 fast path for 16 band and channel indicators
ooples Jan 25, 2026
e24cfac
feat: add v2 fast path for 8 strength and zone indicators
ooples Jan 25, 2026
d8fed61
feat: add v2 fast path for 8 volume and movement indicators
ooples Jan 25, 2026
ca97503
feat: add v2 fast path for 8 statistical and correlation indicators
ooples Jan 25, 2026
28a9b51
feat: add v2 fast path for 8 macd-like and directional indicators
ooples Jan 25, 2026
7e58bf8
feat: add v2 fast path for 8 market and volume indicators
ooples Jan 25, 2026
bcfa8ca
feat: add v2 fast path for batch 23 indicators (8 volume/statistical)
ooples Jan 25, 2026
9ad7a42
feat: add v2 fast path for batch 24 indicators (8 ehlers/oscillator)
ooples Jan 25, 2026
c6f4c6e
feat: complete v2 fast path dispatch for all 797 specoptions
ooples Jan 25, 2026
4f8dfcd
refactor: change computefast methods from public to internal
ooples Jan 25, 2026
81e17f9
perf: convert 36 placeholder v2 methods to full core implementations
ooples Jan 25, 2026
60337b3
perf: implement proper v2 algorithms for 4 placeholder methods
ooples Jan 25, 2026
3d3df69
perf: implement proper v2 algorithms for 3 more placeholder methods
ooples Jan 25, 2026
586797e
perf: implement proper v2 algorithms for 2 more placeholder methods
ooples Jan 25, 2026
c4b9854
perf: implement proper v2 algorithms for 4 more indicators and add hi…
ooples Jan 25, 2026
b74d1c4
perf: implement proper v2 algorithms for 5 more placeholder methods
ooples Jan 25, 2026
c0ddb08
perf: implement proper v2 algorithms for 2 more placeholder methods
ooples Jan 25, 2026
216bfae
perf: implement proper v2 algorithms for 4 ehlers indicators
ooples Jan 25, 2026
54de2fa
perf: implement proper v2 algorithms for 3 more indicators
ooples Jan 25, 2026
e27d5c7
perf: implement proper v2 algorithms for 2 more indicators
ooples Jan 25, 2026
d7c6caa
perf: implement proper v2 algorithms for 6 more indicators
ooples Jan 25, 2026
68c808e
perf: implement proper v2 algorithms for ehlers indicators
ooples Jan 25, 2026
cb16f19
perf: implement proper v2 algorithm for ehlersrocketrsi
ooples Jan 25, 2026
c2d903a
perf: add proper core methods for ehlers snr indicators
ooples Jan 25, 2026
3bf06d4
perf: add ehlers v2 and peak valley core methods
ooples Jan 25, 2026
cf76d1a
perf: complete final composite indicator core implementations
ooples Jan 25, 2026
4264d15
test: add 166 missing stateful indicator parity tests
ooples Jan 26, 2026
cf39f0b
feat: add kasedevstopv2 compute method
ooples Jan 26, 2026
b46e6db
fix: correct true range calculation for first bar
ooples Jan 26, 2026
24dcc1c
test: add comprehensive v2 indicator edge case tests
ooples Jan 26, 2026
6ea550f
fix: streaming/batch parity bugs in multiple indicators
ooples Jan 26, 2026
7217da1
feat: add multi-stock comparison indicators to v2 api
ooples Jan 26, 2026
56f31e5
test: add integration tests for multi-stock indicators
ooples Jan 26, 2026
6e755e0
feat: complete v2 standalone migration with native multi-stock indica…
ooples Jan 26, 2026
510346c
fix: numerical stability in v1 batch code for parity with v2 streaming
ooples Jan 26, 2026
299f0cd
fix: numerical stability in v2 streaming indicators
ooples Jan 26, 2026
40cc180
refactor: make indicatorcatalog v2-native, mark indicatorinvoker obso…
ooples Jan 26, 2026
b2bc2d5
test: add property-based validation tests for all indicators
ooples Jan 26, 2026
eae0260
docs: add v2 migration plan document
ooples Jan 26, 2026
10fc21e
feat: add validation tracking infrastructure
ooples Jan 26, 2026
76ad089
docs: complete variant research for core indicators
ooples Jan 26, 2026
22b4898
test: add 72 reference tests for phase 4 validation
ooples Jan 26, 2026
3fa2567
test: add more reference tests for v2 validation
ooples Jan 26, 2026
7c3fab4
test: add additional reference tests for v2 validation
ooples Jan 26, 2026
a785b30
test: add 49 golden file tests for indicator validation
ooples Jan 26, 2026
e643711
test: expand golden file tests to 89 indicators
ooples Jan 26, 2026
1902ef5
test: expand golden file tests to 117 indicators
ooples Jan 26, 2026
a8c5daf
test: add 18 more golden file tests (135 total)
ooples Jan 26, 2026
57cb4a9
test: add 25 more golden file tests (160 total)
ooples Jan 26, 2026
c5bb629
test: add 24 more golden file tests (184 total)
ooples Jan 26, 2026
fac4f38
test: add 32 more golden file tests (216 total)
ooples Jan 26, 2026
3f7c975
test: add 49 more golden file tests (265 total)
ooples Jan 26, 2026
c436062
test: add 27 more golden file tests for I-L indicators (292 total)
ooples Jan 26, 2026
5562e5c
test: add 51 more golden file tests for M-N indicators (343 total)
ooples Jan 26, 2026
f032552
test: add golden file tests for o-p-q indicators (48 tests)
ooples Jan 26, 2026
5d4dc75
test: add golden file tests for r indicators (35 tests)
ooples Jan 26, 2026
599c8a4
test: add golden file tests for S indicators (52 tests, 426→478)
ooples Jan 26, 2026
ceec970
test: add golden file tests for T-Z indicators (93 tests, 478→571)
ooples Jan 27, 2026
2bb980b
test: add golden file tests for missing non-E indicators (95 tests, 5…
ooples Jan 27, 2026
9271d04
test: add golden file tests for ehlers indicators (100 tests, 666→766)
ooples Jan 27, 2026
ceedfcc
test: add golden file tests for remaining missing indicators (59 test…
ooples Jan 27, 2026
744939e
test: add golden file tests for multi-stock indicators (6 tests, 825→…
ooples Jan 27, 2026
b693451
feat: add production grade backtesting engine (phase 8)
ooples Jan 27, 2026
e2bc2dd
feat: add signal generation system with compound signals and notifica…
ooples Jan 27, 2026
c8a97d0
feat: add auto-trading infrastructure with fluent api (phase 10)
ooples Jan 27, 2026
b251108
test: add end-to-end integration tests (phase 11)
ooples Jan 27, 2026
c012125
feat: add phase 3 production hardening - tests, resilience, reconcili…
ooples Jan 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: CI

on:
push:
branches: [master, main]
pull_request:
branches: [master, main]

jobs:
build-and-test:
runs-on: windows-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup .NET 10
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.x

- name: Restore dependencies
run: dotnet restore src/OoplesFinance.StockIndicators.csproj

- name: Build for .NET 10
run: dotnet build src/OoplesFinance.StockIndicators.csproj --no-restore --configuration Release --framework net10.0

- name: Build for .NET Framework 4.6.1
run: dotnet build src/OoplesFinance.StockIndicators.csproj --no-restore --configuration Release --framework net461

- name: Restore test dependencies
run: dotnet restore tests/OoplesFinance.StockIndicators.Tests.Unit.csproj

- name: Build and run tests
run: dotnet test tests/OoplesFinance.StockIndicators.Tests.Unit.csproj --configuration Release --framework net10.0 --verbosity normal --logger trx --results-directory ./test-results

- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: ./test-results
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/
benchmarks/.baseline/

# .NET Core
project.lock.json
Expand Down
206 changes: 206 additions & 0 deletions MIGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
# Migration Guide: v1.x to v2.0

This guide helps you migrate from OoplesFinance.StockIndicators v1.x to v2.0.

## Overview of Changes

### Why We Made Breaking Changes

Version 2.0 introduces a new fluent builder API that provides:
- **Zero-allocation hot paths** using `ArrayPool<T>` for indicator buffers
- **SIMD-optimized calculations** for math operations
- **Unified batch/streaming support** through `IndicatorDataSource`
- **Signal system** for trading alerts with group conditions
- **Notification adapters** (Email, SMS, Webhook, Telegram, Discord)
- **Auto-trading integration** (Console, Alpaca)
- **Lazy evaluation** for better memory efficiency

### Performance Improvements

| Operation | v1.x | v2.0 | Improvement |
|-----------|------|------|-------------|
| Buffer allocations | Multiple per indicator | Zero (ArrayPool) | ~100% reduction |
| Math operations | Scalar | SIMD/loop-unrolled | 2-4x faster |
| Multi-indicator chains | Compute all | Lazy evaluation | Compute only needed |

## Quick Start: Minimum Changes

If you just want to get your existing code working quickly, the old `Calculate*` methods still work. However, they will show deprecation warnings in future versions.

```csharp
// v1.x code - still works in v2.0
var stockData = new StockData(opens, highs, lows, closes, volumes, dates);
var result = stockData.CalculateSimpleMovingAverage(20);
var smaValues = result.OutputValues1.TakeLast(100).ToList();
```

## Full Migration

### Step 1: Create an IndicatorDataSource

```csharp
// v1.x
var stockData = new StockData(opens, highs, lows, closes, volumes, dates);

// v2.0
var stockData = new StockData(opens, highs, lows, closes, volumes, dates);
var source = IndicatorDataSource.FromBatch(stockData);
```

### Step 2: Use the StockIndicatorBuilder

```csharp
// v1.x - Chain Calculate* calls
var result = stockData
.CalculateSimpleMovingAverage(20)
.CalculateRelativeStrengthIndex(14);

// v2.0 - Use builder pattern
var builder = new StockIndicatorBuilder(source)
.ConfigureIndicators(indicators =>
{
var sma = indicators.Sma(20);
var rsi = indicators.Rsi(14);
});

using var runtime = builder.Build();
```

### Step 3: Access Results

```csharp
// v1.x
var smaValues = result.OutputValues1;

// v2.0 - Get typed buffer
var smaBuffer = runtime.GetSeries(smaHandle);
var smaSpan = smaBuffer.AsSpan(); // Zero-allocation access
// Or convert to list when needed:
var smaValues = smaBuffer.ToList();
```

### Step 4: Add Signals (New in v2.0)

```csharp
// Declare handles at outer scope for cross-lambda access
SeriesHandle rsi = default;

var builder = new StockIndicatorBuilder(source)
.ConfigureIndicators(indicators =>
{
rsi = indicators.Rsi(14);
})
.ConfigureSignals(signals =>
{
var overbought = signals.When(rsi).CrossesAbove(70).Emit("overbought");
var oversold = signals.When(rsi).CrossesBelow(30).Emit("oversold");
})
.ConfigureNotifications(notify =>
{
notify.Console();
notify.Email(new EmailOptions { To = "alerts@example.com" });
});
```

## API Mapping

### Moving Averages

| v1.x Method | v2.0 Equivalent |
|-------------|-----------------|
| `CalculateSimpleMovingAverage(20)` | `indicators.Sma(20)` |
| `CalculateExponentialMovingAverage(20)` | `indicators.Ema(20)` |
| `CalculateWeightedMovingAverage(20)` | `indicators.Wma(20)` |
| `CalculateHullMovingAverage(20)` | `indicators.Hma(20)` |

### Oscillators

| v1.x Method | v2.0 Equivalent |
|-------------|-----------------|
| `CalculateRelativeStrengthIndex(14)` | `indicators.Rsi(14)` |
| `CalculateCommodityChannelIndex(20)` | `indicators.Cci(20)` |
| `CalculateWilliamsR(14)` | `indicators.WilliamsR(14)` |

### Multi-Output Indicators

```csharp
// v1.x - Access multiple outputs via OutputValues1, OutputValues2, etc.
var bb = stockData.CalculateBollingerBands(20, 2);
var upper = bb.OutputValues1;
var middle = bb.OutputValues2;
var lower = bb.OutputValues3;

// v2.0 - Get typed series
var bb = indicators.BollingerBands(20, 2);
var upperBuffer = runtime.GetSeries(bb.Upper);
var middleBuffer = runtime.GetSeries(bb.Middle);
var lowerBuffer = runtime.GetSeries(bb.Lower);
```

### Generic Indicator Access

For any indicator not explicitly listed in the catalog:

```csharp
// v2.0 - Access any of 750+ indicators by name
var handle = indicators.Calculate(
IndicatorName.AdaptiveMovingAverage,
parameters: new object[] { 10, 2.0 });
```

## Breaking Changes

### Removed

- None - all v1.x methods are still available (will be deprecated in v3.0)

### Changed

- `IndicatorBuffer<T>` is now the primary container for indicator values (replaces raw lists)
- Results are accessed via `runtime.GetSeries(handle)` instead of `OutputValues*` properties

### New Dependencies (net461 only)

- `System.Net.Http` 4.3.4
- `System.Text.Json` 6.0.11
- `System.Memory` 4.5.5
- `System.Buffers` 4.5.1

## FAQ

### Q: Do I have to migrate everything at once?

No. You can use the old `Calculate*` methods alongside the new builder API. They share the same underlying calculations.

### Q: Will my existing code break?

No. All v1.x methods remain functional. You'll see deprecation warnings starting in a future release.

### Q: How do I get the best performance?

1. Use `IndicatorBuffer<double>.AsSpan()` for zero-allocation access
2. Dispose `IndicatorRuntime` when done to return buffers to the pool
3. Use `ConfigureSignals` to enable lazy evaluation - only computed indicators are materialized

### Q: Can I still use LINQ on results?

Yes. `IndicatorBuffer<T>` implements `IReadOnlyList<T>` and works with all LINQ methods. However, for best performance, use `AsSpan()` when possible.

### Q: How do I handle streaming data?

```csharp
// Create streaming source
var source = IndicatorDataSource.FromStreaming(streamSource);

var builder = new StockIndicatorBuilder(source)
.ConfigureIndicators(i => i.Sma(20))
.ConfigureSignals(s => s.When(sma).CrossesAbove(100).Emit());

using var runtime = builder.Build();
// Runtime will process streaming updates automatically
```

## Getting Help

- [GitHub Issues](https://github.com/ooples/OoplesFinance.StockIndicators/issues)
- [Full Documentation](https://github.com/ooples/OoplesFinance.StockIndicators/wiki)
Loading
Loading