From 98adfdda165c575a25f5943e0c997f6a88265f46 Mon Sep 17 00:00:00 2001 From: Dave Skender <8432125+DaveSkender@users.noreply.github.com> Date: Sun, 26 Jun 2022 22:47:57 -0400 Subject: [PATCH] add SyncIndex utility (#834) --- .vscode/settings.json | 39 +++++++ docs/_indicators/Adl.md | 4 +- docs/_indicators/Adx.md | 4 +- docs/_indicators/Alligator.md | 4 +- docs/_indicators/Alma.md | 4 +- docs/_indicators/Aroon.md | 4 +- docs/_indicators/Atr.md | 4 +- docs/_indicators/Awesome.md | 4 +- docs/_indicators/BasicQuote.md | 2 +- docs/_indicators/Beta.md | 4 +- docs/_indicators/BollingerBands.md | 4 +- docs/_indicators/Bop.md | 4 +- docs/_indicators/Cci.md | 4 +- docs/_indicators/ChaikinOsc.md | 4 +- docs/_indicators/Chandelier.md | 4 +- docs/_indicators/Chop.md | 4 +- docs/_indicators/Cmf.md | 4 +- docs/_indicators/ConnorsRsi.md | 4 +- docs/_indicators/Correlation.md | 4 +- docs/_indicators/Dema.md | 4 +- docs/_indicators/Doji.md | 2 +- docs/_indicators/Donchian.md | 2 +- docs/_indicators/Dpo.md | 4 +- docs/_indicators/ElderRay.md | 4 +- docs/_indicators/Ema.md | 4 +- docs/_indicators/Epma.md | 4 +- docs/_indicators/Fcb.md | 2 +- docs/_indicators/FisherTransform.md | 4 +- docs/_indicators/ForceIndex.md | 4 +- docs/_indicators/Fractal.md | 2 +- docs/_indicators/Gator.md | 4 +- docs/_indicators/HeikinAshi.md | 4 +- docs/_indicators/Hma.md | 4 +- docs/_indicators/HtTrendline.md | 4 +- docs/_indicators/Hurst.md | 4 +- docs/_indicators/Ichimoku.md | 2 +- docs/_indicators/Kama.md | 4 +- docs/_indicators/Keltner.md | 2 +- docs/_indicators/Kvo.md | 4 +- docs/_indicators/MaEnvelopes.md | 4 +- docs/_indicators/Macd.md | 4 +- docs/_indicators/Mama.md | 4 +- docs/_indicators/Marubozu.md | 2 +- docs/_indicators/Mfi.md | 4 +- docs/_indicators/Obv.md | 4 +- docs/_indicators/ParabolicSar.md | 4 +- docs/_indicators/PivotPoints.md | 2 +- docs/_indicators/Pivots.md | 2 +- docs/_indicators/Pmo.md | 4 +- docs/_indicators/Prs.md | 4 +- docs/_indicators/Pvo.md | 4 +- docs/_indicators/Renko.md | 2 +- docs/_indicators/Roc.md | 4 +- docs/_indicators/RocWb.md | 4 +- docs/_indicators/RollingPivots.md | 2 +- docs/_indicators/Rsi.md | 4 +- docs/_indicators/Slope.md | 4 +- docs/_indicators/Sma.md | 4 +- docs/_indicators/Smi.md | 4 +- docs/_indicators/Smma.md | 4 +- docs/_indicators/StarcBands.md | 2 +- docs/_indicators/Stc.md | 4 +- docs/_indicators/StdDev.md | 4 +- docs/_indicators/StdDevChannels.md | 4 +- docs/_indicators/Stoch.md | 4 +- docs/_indicators/StochRsi.md | 4 +- docs/_indicators/SuperTrend.md | 2 +- docs/_indicators/T3.md | 4 +- docs/_indicators/Tema.md | 4 +- docs/_indicators/Trix.md | 4 +- docs/_indicators/Tsi.md | 4 +- docs/_indicators/UlcerIndex.md | 4 +- docs/_indicators/Ultimate.md | 4 +- docs/_indicators/VolatilityStop.md | 4 +- docs/_indicators/Vortex.md | 2 +- docs/_indicators/Vwap.md | 4 +- docs/_indicators/Vwma.md | 4 +- docs/_indicators/WilliamsR.md | 4 +- docs/_indicators/Wma.md | 4 +- docs/_indicators/ZigZag.md | 4 +- docs/guide.md | 2 - docs/utilities.md | 4 +- src/_common/Candles/Candles.cs | 3 +- src/_common/Candles/Models.cs | 3 +- src/_common/Enums.cs | 28 +++-- src/_common/Results/Result.Utilities.cs | 98 ++++++++++++++++++ src/a-d/Adl/Adl.Models.cs | 5 + src/a-d/Adl/Adl.Series.cs | 7 +- src/a-d/Adx/Adx.Models.cs | 5 + src/a-d/Adx/Adx.Series.cs | 17 ++- src/a-d/Alligator/Alligator.Api.cs | 3 +- src/a-d/Alligator/Alligator.Models.cs | 5 + src/a-d/Alligator/Alligator.Series.cs | 5 +- src/a-d/Alma/Alma.Api.cs | 3 +- src/a-d/Alma/Alma.Models.cs | 5 + src/a-d/Alma/Alma.Series.cs | 8 +- src/a-d/Aroon/Aroon.Models.cs | 5 + src/a-d/Aroon/Aroon.Series.cs | 14 +-- src/a-d/Atr/Atr.Models.cs | 5 + src/a-d/Atr/Atr.Series.cs | 17 ++- src/a-d/Awesome/Awesome.Api.cs | 3 +- src/a-d/Awesome/Awesome.Models.cs | 5 + src/a-d/Awesome/Awesome.Series.cs | 8 +- src/a-d/Beta/Beta.Models.cs | 5 + src/a-d/Beta/Beta.Series.cs | 5 +- src/a-d/BollingerBands/BollingerBands.Api.cs | 3 +- .../BollingerBands/BollingerBands.Models.cs | 5 + .../BollingerBands/BollingerBands.Series.cs | 8 +- src/a-d/Bop/Bop.Models.cs | 5 + src/a-d/Bop/Bop.Series.cs | 8 +- src/a-d/Cci/Cci.Models.cs | 5 + src/a-d/Cci/Cci.Series.cs | 9 +- src/a-d/ChaikinOsc/ChaikinOsc.Models.cs | 5 + src/a-d/ChaikinOsc/ChaikinOsc.Series.cs | 3 +- src/a-d/Chandelier/Chandelier.Models.cs | 5 + src/a-d/Chandelier/Chandelier.Series.cs | 12 +-- src/a-d/Chop/Chop.Models.cs | 5 + src/a-d/Chop/Chop.Series.cs | 5 +- src/a-d/Cmf/Cmf.Models.cs | 5 + src/a-d/Cmf/Cmf.Series.cs | 14 ++- src/a-d/ConnorsRsi/ConnorsRsi.Api.cs | 3 +- src/a-d/ConnorsRsi/ConnorsRsi.Models.cs | 5 + src/a-d/ConnorsRsi/ConnorsRsi.Series.cs | 3 +- src/a-d/Correlation/Correlation.Models.cs | 5 + src/a-d/Correlation/Correlation.Series.cs | 8 +- src/a-d/Dema/Dema.Api.cs | 3 +- src/a-d/Dema/Dema.Models.cs | 5 + src/a-d/Dema/Dema.Series.cs | 12 +-- src/a-d/Donchian/Donchian.Models.cs | 5 + src/a-d/Donchian/Donchian.Series.cs | 18 ++-- src/a-d/Dpo/Dpo.Api.cs | 3 +- src/a-d/Dpo/Dpo.Models.cs | 5 + src/a-d/Dpo/Dpo.Series.cs | 5 +- src/e-k/ElderRay/ElderRay.Models.cs | 5 + src/e-k/ElderRay/ElderRay.Series.cs | 3 +- src/e-k/Ema/Ema.Api.cs | 3 +- src/e-k/Ema/Ema.Models.cs | 5 + src/e-k/Ema/Ema.Series.cs | 2 +- src/e-k/Ema/Ema.Stream.cs | 2 +- src/e-k/Epma/Epma.Api.cs | 3 +- src/e-k/Epma/Epma.Models.cs | 5 + src/e-k/Epma/Epma.Series.cs | 3 +- src/e-k/Fcb/Fcb.Models.cs | 5 + src/e-k/Fcb/Fcb.Series.cs | 8 +- .../FisherTransform/FisherTransform.Api.cs | 3 +- .../FisherTransform/FisherTransform.Models.cs | 5 + .../FisherTransform/FisherTransform.Series.cs | 8 +- src/e-k/ForceIndex/ForceIndex.Models.cs | 5 + src/e-k/ForceIndex/ForceIndex.Series.cs | 5 +- src/e-k/Fractal/Fractal.Models.cs | 5 + src/e-k/Fractal/Fractal.Series.cs | 8 +- src/e-k/Gator/Gator.Api.cs | 3 +- src/e-k/Gator/Gator.Models.cs | 7 +- src/e-k/Gator/Gator.Series.cs | 3 +- src/e-k/HeikinAshi/HeikinAshi.Models.cs | 5 + src/e-k/HeikinAshi/HeikinAshi.Series.cs | 5 +- src/e-k/Hma/Hma.Api.cs | 3 +- src/e-k/Hma/Hma.Models.cs | 5 + src/e-k/Hma/Hma.Series.cs | 8 +- src/e-k/HtTrendline/HtTrendline.Api.cs | 3 +- src/e-k/HtTrendline/HtTrendline.Models.cs | 5 + src/e-k/HtTrendline/HtTrendline.Series.cs | 8 +- src/e-k/Hurst/Hurst.Api.cs | 3 +- src/e-k/Hurst/Hurst.Models.cs | 5 + src/e-k/Hurst/Hurst.Series.cs | 10 +- src/e-k/Ichimoku/Ichimoku.Models.cs | 5 + src/e-k/Ichimoku/Ichimoku.Series.cs | 17 ++- src/e-k/Kama/Kama.Api.cs | 3 +- src/e-k/Kama/Kama.Models.cs | 5 + src/e-k/Kama/Kama.Series.cs | 8 +- src/e-k/Keltner/Keltner.Models.cs | 5 + src/e-k/Keltner/Keltner.Series.cs | 18 ++-- src/e-k/Kvo/Kvo.Models.cs | 5 + src/e-k/Kvo/Kvo.Series.cs | 5 +- src/m-r/MaEnvelopes/MaEnvelopes.Api.cs | 3 +- src/m-r/MaEnvelopes/MaEnvelopes.Models.cs | 5 + src/m-r/MaEnvelopes/MaEnvelopes.Series.cs | 27 ++--- src/m-r/Macd/Macd.Models.cs | 5 + src/m-r/Macd/Macd.Series.cs | 8 +- src/m-r/Macd/MacdApi.cs | 3 +- src/m-r/Mama/Mama.Api.cs | 3 +- src/m-r/Mama/Mama.Models.cs | 5 + src/m-r/Mama/Mama.Series.cs | 8 +- src/m-r/Mfi/Mfi.Models.cs | 5 + src/m-r/Mfi/Mfi.Series.cs | 8 +- src/m-r/Obv/Obv.Models.cs | 5 + src/m-r/Obv/Obv.Series.cs | 7 +- src/m-r/ParabolicSar/ParabolicSar.Models.cs | 5 + src/m-r/ParabolicSar/ParabolicSar.Series.cs | 5 +- src/m-r/Pivots/Pivots.Models.cs | 7 +- src/m-r/Pivots/Pivots.Series.cs | 3 +- src/m-r/Pmo/Pmo.Api.cs | 3 +- src/m-r/Pmo/Pmo.Models.cs | 5 + src/m-r/Pmo/Pmo.Series.cs | 17 ++- src/m-r/Prs/Prs.Models.cs | 5 + src/m-r/Prs/Prs.Series.cs | 3 +- src/m-r/Pvo/Pvo.Models.cs | 5 + src/m-r/Pvo/Pvo.Series.cs | 10 +- src/m-r/Renko/Renko.Models.cs | 5 + src/m-r/Renko/Renko.Series.cs | 3 +- src/m-r/Roc/Roc.Api.cs | 3 +- src/m-r/Roc/Roc.Models.cs | 5 + src/m-r/Roc/Roc.Series.cs | 12 +-- src/m-r/RocWb/Roc.Models.cs | 5 + src/m-r/RocWb/RocWb.Api.cs | 3 +- src/m-r/RocWb/RocWb.Series.cs | 3 +- src/m-r/Rsi/Rsi.Api.cs | 3 +- src/m-r/Rsi/Rsi.Models.cs | 5 + src/m-r/Rsi/Rsi.Series.cs | 5 +- src/s-z/Slope/Slope.Api.cs | 3 +- src/s-z/Slope/Slope.Models.cs | 5 + src/s-z/Slope/Slope.Series.cs | 6 +- src/s-z/Sma/Sma.Analysis.cs | 2 +- src/s-z/Sma/Sma.Api.cs | 6 +- src/s-z/Sma/Sma.Models.cs | 10 ++ src/s-z/Sma/Sma.Series.cs | 8 +- src/s-z/Smi/Smi.Models.cs | 5 + src/s-z/Smi/Smi.Series.cs | 8 +- src/s-z/Smma/Smma.Api.cs | 3 +- src/s-z/Smma/Smma.Models.cs | 5 + src/s-z/Smma/Smma.Series.cs | 11 +- src/s-z/StarcBands/StarcBands.Models.cs | 5 + src/s-z/StarcBands/StarcBands.Series.cs | 3 +- src/s-z/Stc/Stc.Api.cs | 3 +- src/s-z/Stc/Stc.Models.cs | 5 + src/s-z/Stc/Stc.Series.cs | 4 +- src/s-z/StdDev/StdDev.Api.cs | 3 +- src/s-z/StdDev/StdDev.Models.cs | 5 + src/s-z/StdDev/StdDev.Series.cs | 18 ++-- src/s-z/StdDevChannels/StdDevChannels.Api.cs | 3 +- .../StdDevChannels/StdDevChannels.Models.cs | 5 + .../StdDevChannels/StdDevChannels.Series.cs | 2 +- src/s-z/Stoch/Stoch.Models.cs | 5 + src/s-z/Stoch/Stoch.Series.cs | 10 +- src/s-z/StochRsi/StochRsi.Models.cs | 5 + src/s-z/StochRsi/StochRsi.Series.cs | 5 +- src/s-z/SuperTrend/SuperTrend.Models.cs | 5 + src/s-z/SuperTrend/SuperTrend.Series.cs | 8 +- src/s-z/T3/T3.Api.cs | 3 +- src/s-z/T3/T3.Models.cs | 5 + src/s-z/T3/T3.Series.cs | 8 +- src/s-z/Tema/Tema.Api.cs | 3 +- src/s-z/Tema/Tema.Models.cs | 5 + src/s-z/Tema/Tema.Series.cs | 12 +-- src/s-z/Trix/Trix.Api.cs | 3 +- src/s-z/Trix/Trix.Models.cs | 5 + src/s-z/Trix/Trix.Series.cs | 12 +-- src/s-z/Tsi/Tsi.Api.cs | 3 +- src/s-z/Tsi/Tsi.Models.cs | 5 + src/s-z/Tsi/Tsi.Series.cs | 5 +- src/s-z/UlcerIndex/UlcerIndex.Api.cs | 3 +- src/s-z/UlcerIndex/UlcerIndex.Models.cs | 5 + src/s-z/UlcerIndex/UlcerIndex.Series.cs | 10 +- src/s-z/Ultimate/Ultimate.Models.cs | 5 + src/s-z/Ultimate/Ultimate.Series.cs | 5 +- .../VolatilityStop/VolatilityStop.Models.cs | 5 + .../VolatilityStop/VolatilityStop.Series.cs | 6 +- src/s-z/Vortex/Vortex.Models.cs | 5 + src/s-z/Vortex/Vortex.Series.cs | 13 +-- src/s-z/Vwap/Vwap.Models.cs | 5 + src/s-z/Vwap/Vwap.Series.cs | 8 +- src/s-z/Vwma/Vwma.Models.cs | 5 + src/s-z/Vwma/Vwma.Series.cs | 10 +- src/s-z/WilliamsR/WilliamsR.Models.cs | 5 + src/s-z/WilliamsR/WilliamsR.Series.cs | 3 +- src/s-z/Wma/Wma.Api.cs | 3 +- src/s-z/Wma/Wma.Models.cs | 5 + src/s-z/Wma/Wma.Series.cs | 10 +- src/s-z/ZigZag/ZigZag.Models.cs | 5 + src/s-z/ZigZag/ZigZag.Series.cs | 8 +- tests/indicators/_common/Test.Results.cs | 88 +++++++++++++++- tests/indicators/a-d/Adx/Adx.Tests.cs | 2 +- .../a-d/Alligator/Alligator.Tests.cs | 15 ++- tests/indicators/a-d/Alma/Alma.Tests.cs | 6 +- tests/indicators/a-d/Aroon/Aroon.Tests.cs | 2 +- tests/indicators/a-d/Atr/Atr.Tests.cs | 2 +- tests/indicators/a-d/Awesome/Awesome.Tests.cs | 6 +- tests/indicators/a-d/Beta/Beta.Tests.cs | 2 +- .../BollingerBands/BollingerBands.Tests.cs | 6 +- tests/indicators/a-d/Bop/Bop.Tests.cs | 2 +- tests/indicators/a-d/Cci/Cci.Tests.cs | 2 +- .../a-d/ChaikinOsc/ChaikinOsc.Tests.cs | 2 +- .../a-d/Chandelier/Chandelier.Tests.cs | 2 +- tests/indicators/a-d/Chop/Chop.Tests.cs | 2 +- tests/indicators/a-d/Cmf/Cmf.Tests.cs | 2 +- .../a-d/ConnorsRsi/ConnorsRsi.Tests.cs | 6 +- .../a-d/Correlation/Correlation.Tests.cs | 2 +- tests/indicators/a-d/Dema/Dema.Tests.cs | 6 +- tests/indicators/a-d/Dpo/Dpo.Calc.xlsx | Bin 50347 -> 59979 bytes tests/indicators/a-d/Dpo/Dpo.Tests.cs | 15 +-- .../indicators/e-k/ElderRay/ElderRay.Tests.cs | 2 +- tests/indicators/e-k/Ema/Ema.Tests.cs | 24 ++--- tests/indicators/e-k/Epma/Epma.Tests.cs | 6 +- .../FisherTransform/FisherTransform.Tests.cs | 2 +- .../e-k/ForceIndex/ForceIndex.Tests.cs | 2 +- tests/indicators/e-k/Gator/Gator.Tests.cs | 4 +- tests/indicators/e-k/Hma/Hma.Tests.cs | 6 +- .../e-k/HtTrendline/HtTrendline.Tests.cs | 4 +- tests/indicators/e-k/Hurst/Hurst.Tests.cs | 2 +- tests/indicators/e-k/Kama/Kama.Tests.cs | 6 +- tests/indicators/e-k/Kvo/Kvo.Tests.cs | 2 +- .../m-r/MaEnvelopes/MaEnvelopes.Tests.cs | 4 +- tests/indicators/m-r/Macd/Macd.Tests.cs | 6 +- tests/indicators/m-r/Mama/Mama.Tests.cs | 6 +- tests/indicators/m-r/Mfi/Mfi.Tests.cs | 2 +- .../m-r/ParabolicSar/ParabolicSar.Tests.cs | 2 +- tests/indicators/m-r/Pmo/Pmo.Tests.cs | 6 +- tests/indicators/m-r/Pvo/Pvo.Tests.cs | 2 +- tests/indicators/m-r/Roc/Roc.Tests.cs | 6 +- tests/indicators/m-r/RocWb/RocWb.Tests.cs | 6 +- tests/indicators/m-r/Rsi/Rsi.Calc.xlsx | Bin 124125 -> 120757 bytes tests/indicators/m-r/Rsi/Rsi.Tests.cs | 6 +- tests/indicators/s-z/Slope/Slope.Tests.cs | 6 +- .../indicators/s-z/Sma/Sma.Analysis.Tests.cs | 6 +- tests/indicators/s-z/Sma/Sma.Tests.cs | 10 +- tests/indicators/s-z/Smi/Smi.Tests.cs | 2 +- tests/indicators/s-z/Smma/Smma.Tests.cs | 6 +- tests/indicators/s-z/Stc/Stc.Tests.cs | 6 +- tests/indicators/s-z/StdDev/StdDev.Tests.cs | 6 +- .../StdDevChannels/StdDevChannels.Tests.cs | 2 +- tests/indicators/s-z/Stoch/Stoch.Tests.cs | 2 +- .../indicators/s-z/StochRsi/StochRsi.Tests.cs | 2 +- tests/indicators/s-z/T3/T3.Tests.cs | 6 +- tests/indicators/s-z/Tema/Tema.Tests.cs | 6 +- tests/indicators/s-z/Trix/Trix.Tests.cs | 6 +- tests/indicators/s-z/Tsi/Tsi.Tests.cs | 6 +- .../s-z/UlcerIndex/UlcerIndex.Tests.cs | 6 +- .../indicators/s-z/Ultimate/Ultimate.Tests.cs | 2 +- .../VolatilityStop/VolatilityStop.Tests.cs | 2 +- tests/indicators/s-z/Vortex/Vortex.Tests.cs | 8 +- tests/indicators/s-z/Vwma/Vwma.Tests.cs | 2 +- .../s-z/WilliamsR/WilliamsR.Tests.cs | 2 +- tests/indicators/s-z/Wma/Wma.Tests.cs | 6 +- tests/indicators/s-z/ZigZag/ZigZag.Tests.cs | 2 +- 334 files changed, 1116 insertions(+), 830 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 2490a28f3..ce0ed61d8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -117,5 +117,44 @@ "Vwap", "Vwma", "Woodie" + ], + "cSpell.ignorePaths": [ + "package-lock.json", + "node_modules", + "vscode-extension", + ".git/objects", + ".vscode", + ".vscode-insiders", + "src", + "tests" + ], + "cSpell.enableFiletypes": [ + "!asciidoc", + "!c", + "!cpp", + "!csharp", + "!css", + "!elixir", + "!git-commit", + "!go", + "!graphql", + "!handlebars", + "!haskell", + "!jade", + "!java", + "!javascript", + "!javascriptreact", + "!jsonc", + "!latex", + "!less", + "!pug", + "!python", + "!restructuredtext", + "!rust", + "!scala", + "!swift", + "!typescript", + "!typescriptreact", + "!vue" ] } \ No newline at end of file diff --git a/docs/_indicators/Adl.md b/docs/_indicators/Adl.md index efe4d9581..23128cc7f 100644 --- a/docs/_indicators/Adl.md +++ b/docs/_indicators/Adl.md @@ -41,7 +41,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. ### AdlResult @@ -75,5 +75,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Adx.md b/docs/_indicators/Adx.md index 4426abdcd..8a5c2b5f9 100644 --- a/docs/_indicators/Adx.md +++ b/docs/_indicators/Adx.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `2×N-1` periods will have `null` values for `Adx` since there's not enough data to calculate. @@ -73,5 +73,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Alligator.md b/docs/_indicators/Alligator.md index 641d264f0..525fbccaf 100644 --- a/docs/_indicators/Alligator.md +++ b/docs/_indicators/Alligator.md @@ -42,7 +42,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `JP+JO` periods will have `null` values since there's not enough data to calculate. @@ -77,5 +77,3 @@ var results = quotes ``` Results **cannot** be further chained with additional transforms. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Alma.md b/docs/_indicators/Alma.md index f6b6fa347..abe8f8a1a 100644 --- a/docs/_indicators/Alma.md +++ b/docs/_indicators/Alma.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -77,5 +77,3 @@ var results = quotes .GetAlma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Aroon.md b/docs/_indicators/Aroon.md index d39fc3db4..10df1489b 100644 --- a/docs/_indicators/Aroon.md +++ b/docs/_indicators/Aroon.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values for `Aroon` since there's not enough data to calculate. @@ -70,5 +70,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Atr.md b/docs/_indicators/Atr.md index 3b5ef3d69..b7a83bc1f 100644 --- a/docs/_indicators/Atr.md +++ b/docs/_indicators/Atr.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values for ATR since there's not enough data to calculate. @@ -72,5 +72,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Awesome.md b/docs/_indicators/Awesome.md index 8dd46bcb7..80609f417 100644 --- a/docs/_indicators/Awesome.md +++ b/docs/_indicators/Awesome.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first period `S-1` periods will have `null` values since there's not enough data to calculate. @@ -78,5 +78,3 @@ var results = quotes .GetAwesome(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/BasicQuote.md b/docs/_indicators/BasicQuote.md index e44df4690..023e0b598 100644 --- a/docs/_indicators/BasicQuote.md +++ b/docs/_indicators/BasicQuote.md @@ -36,7 +36,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. ### BasicData diff --git a/docs/_indicators/Beta.md b/docs/_indicators/Beta.md index e2e77f52a..66ba9e746 100644 --- a/docs/_indicators/Beta.md +++ b/docs/_indicators/Beta.md @@ -47,7 +47,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -92,8 +92,6 @@ var results = quotesEval .GetSlope(..); ``` -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. - ## Pro tips - Financial institutions often depict a single number for Beta on their sites. To get that same long-term Beta value, use 5 years of monthly bars for `quotes` and a value of 60 for `lookbackPeriods`. If you only have daily bars, use the [quotes.Aggregate(PeriodSize.Monthly)]({{site.baseurl}}/utilities#resize-quote-history) utility to convert it. diff --git a/docs/_indicators/BollingerBands.md b/docs/_indicators/BollingerBands.md index 896490a28..d88d63016 100644 --- a/docs/_indicators/BollingerBands.md +++ b/docs/_indicators/BollingerBands.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -81,5 +81,3 @@ var results = quotes .GetBollingerBands(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Bop.md b/docs/_indicators/Bop.md index 3904d133f..4332a1671 100644 --- a/docs/_indicators/Bop.md +++ b/docs/_indicators/Bop.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -69,5 +69,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Cci.md b/docs/_indicators/Cci.md index 5500df918..5ebfdce0e 100644 --- a/docs/_indicators/Cci.md +++ b/docs/_indicators/Cci.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -68,5 +68,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/ChaikinOsc.md b/docs/_indicators/ChaikinOsc.md index d294b59cf..fa708bdbc 100644 --- a/docs/_indicators/ChaikinOsc.md +++ b/docs/_indicators/ChaikinOsc.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `S-1` periods will have `null` values for `Oscillator` since there's not enough data to calculate. @@ -76,5 +76,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Chandelier.md b/docs/_indicators/Chandelier.md index d27c44279..080118172 100644 --- a/docs/_indicators/Chandelier.md +++ b/docs/_indicators/Chandelier.md @@ -46,7 +46,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` Chandelier values since there's not enough data to calculate. @@ -77,5 +77,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Chop.md b/docs/_indicators/Chop.md index 013d2df9e..97e1fedee 100644 --- a/docs/_indicators/Chop.md +++ b/docs/_indicators/Chop.md @@ -36,7 +36,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` values since there's not enough data to calculate. @@ -67,5 +67,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Cmf.md b/docs/_indicators/Cmf.md index 8cab0875c..582f3fd52 100644 --- a/docs/_indicators/Cmf.md +++ b/docs/_indicators/Cmf.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -72,5 +72,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/ConnorsRsi.md b/docs/_indicators/ConnorsRsi.md index 4a281c381..6029aa36f 100644 --- a/docs/_indicators/ConnorsRsi.md +++ b/docs/_indicators/ConnorsRsi.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `MAX(R,S,P)-1` periods will have `null` values since there's not enough data to calculate. @@ -82,5 +82,3 @@ var results = quotes .GetConnorsRsi(..) .GetSma(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Correlation.md b/docs/_indicators/Correlation.md index 640e2a3a4..cb60a1d92 100644 --- a/docs/_indicators/Correlation.md +++ b/docs/_indicators/Correlation.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -81,5 +81,3 @@ var results = quotes .GetCorrelation(..) .GetSlope(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Dema.md b/docs/_indicators/Dema.md index 877db373c..07ef85400 100644 --- a/docs/_indicators/Dema.md +++ b/docs/_indicators/Dema.md @@ -41,7 +41,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -81,5 +81,3 @@ var results = quotes .GetDema(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Doji.md b/docs/_indicators/Doji.md index fc1543698..e1a7c18ab 100644 --- a/docs/_indicators/Doji.md +++ b/docs/_indicators/Doji.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The candlestick pattern is indicated on dates where `Match` is `Match.Neutral`. - `Price` is `Close` price; however, all OHLCV elements are included in `CandleProperties`. diff --git a/docs/_indicators/Donchian.md b/docs/_indicators/Donchian.md index f496134fa..b6769fe72 100644 --- a/docs/_indicators/Donchian.md +++ b/docs/_indicators/Donchian.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` values since there's not enough data to calculate. diff --git a/docs/_indicators/Dpo.md b/docs/_indicators/Dpo.md index 3d1e0f82e..1017057e7 100644 --- a/docs/_indicators/Dpo.md +++ b/docs/_indicators/Dpo.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N/2-2` and last `N/2+1` periods will be `null` since they cannot be calculated. @@ -75,5 +75,3 @@ var results = quotes .GetDpo(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/ElderRay.md b/docs/_indicators/ElderRay.md index 35c1d6456..3affbfd78 100644 --- a/docs/_indicators/ElderRay.md +++ b/docs/_indicators/ElderRay.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` indicator values since there's not enough data to calculate. @@ -73,5 +73,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Ema.md b/docs/_indicators/Ema.md index b3dba6614..06d7f128e 100644 --- a/docs/_indicators/Ema.md +++ b/docs/_indicators/Ema.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -79,5 +79,3 @@ var results = quotes .GetEma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Epma.md b/docs/_indicators/Epma.md index f9e0e34cc..9f797e6ea 100644 --- a/docs/_indicators/Epma.md +++ b/docs/_indicators/Epma.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -76,5 +76,3 @@ var results = quotes .GetEpma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Fcb.md b/docs/_indicators/Fcb.md index 5ef408745..63d0b3b33 100644 --- a/docs/_indicators/Fcb.md +++ b/docs/_indicators/Fcb.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The periods before the first fractal are `null` since they cannot be calculated. diff --git a/docs/_indicators/FisherTransform.md b/docs/_indicators/FisherTransform.md index ddfe01fc2..7c5f27cff 100644 --- a/docs/_indicators/FisherTransform.md +++ b/docs/_indicators/FisherTransform.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. :hourglass: **Convergence Warning**: The first `N+15` warmup periods will have unusable decreasing magnitude, convergence-related precision errors that can be as high as ~25% deviation in earlier indicator values. @@ -83,5 +83,3 @@ var results = quotes .GetFisherTransform(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/ForceIndex.md b/docs/_indicators/ForceIndex.md index f41c23e2a..a8aead050 100644 --- a/docs/_indicators/ForceIndex.md +++ b/docs/_indicators/ForceIndex.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods for will be `null` since they cannot be calculated. @@ -70,5 +70,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Fractal.md b/docs/_indicators/Fractal.md index cd1d77405..cde54b6c6 100644 --- a/docs/_indicators/Fractal.md +++ b/docs/_indicators/Fractal.md @@ -47,7 +47,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first and last `S` periods in `quotes` are unable to be calculated since there's not enough prior/following data. diff --git a/docs/_indicators/Gator.md b/docs/_indicators/Gator.md index 116c2349f..8efd2e7cb 100644 --- a/docs/_indicators/Gator.md +++ b/docs/_indicators/Gator.md @@ -36,7 +36,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first 10-20 periods will have `null` values since there's not enough data to calculate. @@ -72,5 +72,3 @@ var results = quotes ``` Results **cannot** be further chained with additional transforms. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/HeikinAshi.md b/docs/_indicators/HeikinAshi.md index b04df6de1..ef6a0c9a4 100644 --- a/docs/_indicators/HeikinAshi.md +++ b/docs/_indicators/HeikinAshi.md @@ -33,7 +33,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first period will have `null` values since there's not enough data to calculate. - `HeikinAshiResult` is based on `IQuote`, so it can be used as a direct replacement for `quotes`. @@ -68,5 +68,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Hma.md b/docs/_indicators/Hma.md index ee8133fa9..7c9b6f3da 100644 --- a/docs/_indicators/Hma.md +++ b/docs/_indicators/Hma.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N+(integer of SQRT(N))-1` periods will have `null` values since there's not enough data to calculate. @@ -75,5 +75,3 @@ var results = quotes .GetHma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/HtTrendline.md b/docs/_indicators/HtTrendline.md index e217dbb71..d05f50f79 100644 --- a/docs/_indicators/HtTrendline.md +++ b/docs/_indicators/HtTrendline.md @@ -31,7 +31,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `6` periods will have `null` values for `SmoothPrice` since there's not enough data to calculate. @@ -72,5 +72,3 @@ var results = quotes .GetHtTrendline(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Hurst.md b/docs/_indicators/Hurst.md index 8d6e266f2..a544692d9 100644 --- a/docs/_indicators/Hurst.md +++ b/docs/_indicators/Hurst.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` values since there's not enough data to calculate. @@ -76,5 +76,3 @@ var results = quotes .GetHurst(..) .GetSlope(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Ichimoku.md b/docs/_indicators/Ichimoku.md index e511b94be..baab8fc09 100644 --- a/docs/_indicators/Ichimoku.md +++ b/docs/_indicators/Ichimoku.md @@ -53,7 +53,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `T-1`, `K-1`, and `S-1` periods will have various `null` values since there's not enough data to calculate. Custom offset periods may also increase `null` results for warmup periods. diff --git a/docs/_indicators/Kama.md b/docs/_indicators/Kama.md index e2f8223a1..2c0a5b462 100644 --- a/docs/_indicators/Kama.md +++ b/docs/_indicators/Kama.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `E-1` periods will have `null` values since there's not enough data to calculate. @@ -82,5 +82,3 @@ var results = quotes .GetKama(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Keltner.md b/docs/_indicators/Keltner.md index 0c0960bfa..d48426d0b 100644 --- a/docs/_indicators/Keltner.md +++ b/docs/_indicators/Keltner.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. diff --git a/docs/_indicators/Kvo.md b/docs/_indicators/Kvo.md index ea456b373..ac07c5d23 100644 --- a/docs/_indicators/Kvo.md +++ b/docs/_indicators/Kvo.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `L+1` periods will have `null` values since there's not enough data to calculate. @@ -73,5 +73,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/MaEnvelopes.md b/docs/_indicators/MaEnvelopes.md index 745c355dc..9f5655463 100644 --- a/docs/_indicators/MaEnvelopes.md +++ b/docs/_indicators/MaEnvelopes.md @@ -57,7 +57,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first periods will have `null` values since there's not enough data to calculate; the quantity will vary based on the `movingAverageType` specified. @@ -93,5 +93,3 @@ var results = quotes ``` Results **cannot** be further chained with additional transforms. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Macd.md b/docs/_indicators/Macd.md index effeb7628..1d2866791 100644 --- a/docs/_indicators/Macd.md +++ b/docs/_indicators/Macd.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `S-1` slow periods will have `null` values since there's not enough data to calculate. @@ -83,5 +83,3 @@ var results = quotes .GetMacd(..) .GetSlope(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Mama.md b/docs/_indicators/Mama.md index ab7fcc259..44b1af8ee 100644 --- a/docs/_indicators/Mama.md +++ b/docs/_indicators/Mama.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `5` periods will have `null` values for `Mama` since there's not enough data to calculate. @@ -79,5 +79,3 @@ var results = quotes .GetMama(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Marubozu.md b/docs/_indicators/Marubozu.md index 385d5812c..04e92db60 100644 --- a/docs/_indicators/Marubozu.md +++ b/docs/_indicators/Marubozu.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The candlestick pattern is indicated on dates where `Match` is `Match.BullSignal` or `Match.BearSignal`. - `Price` is `Close` price; however, all OHLCV elements are included in `CandleProperties`. diff --git a/docs/_indicators/Mfi.md b/docs/_indicators/Mfi.md index 3ae24b4ee..4d008f19e 100644 --- a/docs/_indicators/Mfi.md +++ b/docs/_indicators/Mfi.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` MFI values since they cannot be calculated. @@ -68,5 +68,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Obv.md b/docs/_indicators/Obv.md index 5ab67f98a..7132a8095 100644 --- a/docs/_indicators/Obv.md +++ b/docs/_indicators/Obv.md @@ -41,7 +41,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first period OBV will have `0` value since there's not enough data to calculate. @@ -74,5 +74,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/ParabolicSar.md b/docs/_indicators/ParabolicSar.md index 429604741..8000ce520 100644 --- a/docs/_indicators/ParabolicSar.md +++ b/docs/_indicators/ParabolicSar.md @@ -43,7 +43,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first trend will have `null` values since it is not accurate and based on an initial guess. @@ -75,5 +75,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/PivotPoints.md b/docs/_indicators/PivotPoints.md index da4da9eaa..f46e179ad 100644 --- a/docs/_indicators/PivotPoints.md +++ b/docs/_indicators/PivotPoints.md @@ -58,7 +58,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first window will have `null` values since there's not enough data to calculate. diff --git a/docs/_indicators/Pivots.md b/docs/_indicators/Pivots.md index 2541a55e6..41da7f41a 100644 --- a/docs/_indicators/Pivots.md +++ b/docs/_indicators/Pivots.md @@ -49,7 +49,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `L` and last `R` periods in `quotes` are unable to be calculated since there's not enough prior/following data. diff --git a/docs/_indicators/Pmo.md b/docs/_indicators/Pmo.md index dbe311779..2ed519987 100644 --- a/docs/_indicators/Pmo.md +++ b/docs/_indicators/Pmo.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `T+S-1` periods will have `null` values for PMO since there's not enough data to calculate. @@ -80,5 +80,3 @@ var results = quotes .GetPmo(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Prs.md b/docs/_indicators/Prs.md index a193858db..17557699b 100644 --- a/docs/_indicators/Prs.md +++ b/docs/_indicators/Prs.md @@ -43,7 +43,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The `N` periods will have `null` values for `PrsPercent` and the first `S-1` periods will have `null` values for `Sma` since there's not enough data to calculate. @@ -82,5 +82,3 @@ var results = quotesEval .GetPrs(quotesBase, ..) .GetSlope(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Pvo.md b/docs/_indicators/Pvo.md index 855550fed..144f65256 100644 --- a/docs/_indicators/Pvo.md +++ b/docs/_indicators/Pvo.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `S-1` slow periods will have `null` values since there's not enough data to calculate. @@ -74,5 +74,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Renko.md b/docs/_indicators/Renko.md index 35d812d34..058a9d580 100644 --- a/docs/_indicators/Renko.md +++ b/docs/_indicators/Renko.md @@ -114,7 +114,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. :paintbrush: **Repaint Warning**: When using the `GetRenkoAtr()` variant, the last [Average True Range (ATR)]({{site.baseurl}}/indicators/Atr/#content) value is used to set `brickSize`. Since the ATR changes over time, historical bricks will be repainted as new periods are added or updated in `quotes`. diff --git a/docs/_indicators/Roc.md b/docs/_indicators/Roc.md index e86475127..ae11d4b67 100644 --- a/docs/_indicators/Roc.md +++ b/docs/_indicators/Roc.md @@ -43,7 +43,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` values for ROC since there's not enough data to calculate. @@ -82,5 +82,3 @@ var results = quotes .GetRoc(..) .GetEma(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/RocWb.md b/docs/_indicators/RocWb.md index 3a81e99b0..57bbe6ca7 100644 --- a/docs/_indicators/RocWb.md +++ b/docs/_indicators/RocWb.md @@ -40,7 +40,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` values for ROC since there's not enough data to calculate. @@ -81,5 +81,3 @@ var results = quotes .GetRocWb(..) .GetEma(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/RollingPivots.md b/docs/_indicators/RollingPivots.md index d921d9c78..5b2ff0071 100644 --- a/docs/_indicators/RollingPivots.md +++ b/docs/_indicators/RollingPivots.md @@ -51,7 +51,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `W+F-1` periods will have `null` values since there's not enough data to calculate. diff --git a/docs/_indicators/Rsi.md b/docs/_indicators/Rsi.md index a315cd68b..6e60efdb1 100644 --- a/docs/_indicators/Rsi.md +++ b/docs/_indicators/Rsi.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -77,5 +77,3 @@ var results = quotes .GetRsi(..) .GetSlope(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Slope.md b/docs/_indicators/Slope.md index 26936e7ff..987f38fc3 100644 --- a/docs/_indicators/Slope.md +++ b/docs/_indicators/Slope.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values for `Slope` since there's not enough data to calculate. @@ -82,5 +82,3 @@ var results = quotes .GetSlope(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Sma.md b/docs/_indicators/Sma.md index ba20c5aa9..2956c8a90 100644 --- a/docs/_indicators/Sma.md +++ b/docs/_indicators/Sma.md @@ -40,7 +40,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -98,5 +98,3 @@ var results = quotes .GetSma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Smi.md b/docs/_indicators/Smi.md index 61559e405..876e4c83e 100644 --- a/docs/_indicators/Smi.md +++ b/docs/_indicators/Smi.md @@ -41,7 +41,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` SMI values since there's not enough data to calculate. @@ -75,5 +75,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Smma.md b/docs/_indicators/Smma.md index ac9522175..360372e82 100644 --- a/docs/_indicators/Smma.md +++ b/docs/_indicators/Smma.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -78,5 +78,3 @@ var results = quotes .GetSmma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/StarcBands.md b/docs/_indicators/StarcBands.md index 5e8f9d24b..40174b0d3 100644 --- a/docs/_indicators/StarcBands.md +++ b/docs/_indicators/StarcBands.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate, where `N` is the greater of `S` or `A`. diff --git a/docs/_indicators/Stc.md b/docs/_indicators/Stc.md index a68acb654..b77e6b7a1 100644 --- a/docs/_indicators/Stc.md +++ b/docs/_indicators/Stc.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `S+C` slow periods will have `null` values since there's not enough data to calculate. @@ -79,5 +79,3 @@ var results = quotes .GetStc(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/StdDev.md b/docs/_indicators/StdDev.md index 228cf9d21..73343cc75 100644 --- a/docs/_indicators/StdDev.md +++ b/docs/_indicators/StdDev.md @@ -43,7 +43,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -84,5 +84,3 @@ var results = quotes .GetStdDev(..) .GetSlope(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/StdDevChannels.md b/docs/_indicators/StdDevChannels.md index 75c66940d..9df4ecb61 100644 --- a/docs/_indicators/StdDevChannels.md +++ b/docs/_indicators/StdDevChannels.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - Up to `N-1` periods will have `null` values since there's not enough data to calculate. @@ -80,5 +80,3 @@ var results = quotesEval ``` Results **cannot** be further chained with additional transforms. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Stoch.md b/docs/_indicators/Stoch.md index 558ee3cc3..82555ab19 100644 --- a/docs/_indicators/Stoch.md +++ b/docs/_indicators/Stoch.md @@ -59,7 +59,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N+S-2` periods will have `null` Oscillator values since there's not enough data to calculate. @@ -96,5 +96,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/StochRsi.md b/docs/_indicators/StochRsi.md index 57aa1be82..7e4ab8bfa 100644 --- a/docs/_indicators/StochRsi.md +++ b/docs/_indicators/StochRsi.md @@ -42,7 +42,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `R+S+M` periods will have `null` values for `StochRsi` since there's not enough data to calculate. @@ -76,5 +76,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/SuperTrend.md b/docs/_indicators/SuperTrend.md index fd6d5fb47..84552eff0 100644 --- a/docs/_indicators/SuperTrend.md +++ b/docs/_indicators/SuperTrend.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` SuperTrend values since there's not enough data to calculate. diff --git a/docs/_indicators/T3.md b/docs/_indicators/T3.md index a8adb1b05..171d53ac5 100644 --- a/docs/_indicators/T3.md +++ b/docs/_indicators/T3.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `6×(N-1)` periods will have `null` values since there's not enough data to calculate. @@ -78,5 +78,3 @@ var results = quotes .GetT3(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Tema.md b/docs/_indicators/Tema.md index c74bd4710..02cb315e2 100644 --- a/docs/_indicators/Tema.md +++ b/docs/_indicators/Tema.md @@ -42,7 +42,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. Also note that we are using the proper [weighted variant](https://en.wikipedia.org/wiki/Triple_exponential_moving_average) for TEMA. If you prefer the unweighted raw 3 EMAs value, please use the `Ema3` output from the [TRIX]({{site.baseurl}}/indicators/Trix#content) oscillator instead. @@ -82,5 +82,3 @@ var results = quotes .GetTema(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Trix.md b/docs/_indicators/Trix.md index 4cc70d5a7..73f31ca67 100644 --- a/docs/_indicators/Trix.md +++ b/docs/_indicators/Trix.md @@ -42,7 +42,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `3×N-3` periods will have `null` values since there's not enough data to calculate. @@ -84,5 +84,3 @@ var results = quotes .GetTrix(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Tsi.md b/docs/_indicators/Tsi.md index 73aeb8cd0..ffec3ffc0 100644 --- a/docs/_indicators/Tsi.md +++ b/docs/_indicators/Tsi.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N+M-1` periods will have `null` values since there's not enough data to calculate. - `Signal` will be `null` for all periods if `signalPeriods=0`. @@ -81,5 +81,3 @@ var results = quotes .GetTsi(..) .GetSlope(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/UlcerIndex.md b/docs/_indicators/UlcerIndex.md index 69a1711a6..933e488da 100644 --- a/docs/_indicators/UlcerIndex.md +++ b/docs/_indicators/UlcerIndex.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -75,5 +75,3 @@ var results = quotes .GetAlma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Ultimate.md b/docs/_indicators/Ultimate.md index 9116e4719..0acb2726c 100644 --- a/docs/_indicators/Ultimate.md +++ b/docs/_indicators/Ultimate.md @@ -39,7 +39,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `L-1` periods will have `null` Ultimate values since there's not enough data to calculate. @@ -70,5 +70,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/VolatilityStop.md b/docs/_indicators/VolatilityStop.md index 4ce0ed4af..e4ce2109a 100644 --- a/docs/_indicators/VolatilityStop.md +++ b/docs/_indicators/VolatilityStop.md @@ -38,7 +38,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first trend will have `null` values since it is not accurate and based on an initial guess. @@ -76,5 +76,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Vortex.md b/docs/_indicators/Vortex.md index 6de202f3d..df0c2a61b 100644 --- a/docs/_indicators/Vortex.md +++ b/docs/_indicators/Vortex.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N` periods will have `null` values for VI since there's not enough data to calculate. diff --git a/docs/_indicators/Vwap.md b/docs/_indicators/Vwap.md index b58a407b3..f6dc21a24 100644 --- a/docs/_indicators/Vwap.md +++ b/docs/_indicators/Vwap.md @@ -41,7 +41,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first period or the `startDate` will have a `Vwap = Close` value since it is the initial starting point. - `Vwap` values before `startDate`, if specified, will be `null`. @@ -73,5 +73,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Vwma.md b/docs/_indicators/Vwma.md index 1008ce84d..0ee2435b3 100644 --- a/docs/_indicators/Vwma.md +++ b/docs/_indicators/Vwma.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values for `Vwma` since there's not enough data to calculate. @@ -68,5 +68,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/WilliamsR.md b/docs/_indicators/WilliamsR.md index bc46c6e28..17015b060 100644 --- a/docs/_indicators/WilliamsR.md +++ b/docs/_indicators/WilliamsR.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` Oscillator values since there's not enough data to calculate. @@ -68,5 +68,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/Wma.md b/docs/_indicators/Wma.md index 3dfa81852..c2336e2cf 100644 --- a/docs/_indicators/Wma.md +++ b/docs/_indicators/Wma.md @@ -37,7 +37,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - The first `N-1` periods will have `null` values since there's not enough data to calculate. @@ -75,5 +75,3 @@ var results = quotes .GetWma(..) .GetRsi(..); ``` - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/_indicators/ZigZag.md b/docs/_indicators/ZigZag.md index 56d06e21b..eb06364f5 100644 --- a/docs/_indicators/ZigZag.md +++ b/docs/_indicators/ZigZag.md @@ -45,7 +45,7 @@ IEnumerable ``` - This method returns a time series of all available indicator values for the `quotes` provided. -- It always returns the same number of elements as there are in the historical quotes when not chained from another indicator. +- It always returns the same number of elements as there are in the historical quotes. - It does not return a single incremental indicator value. - If you do not supply enough points to cover the percent change, there will be no Zig Zag points or lines. - The first line segment starts after the first confirmed point; ZigZag values before the first confirmed point will be `null`. @@ -84,5 +84,3 @@ var results = quotes ``` This indicator must be generated from `quotes` and **cannot** be generated from results of another chain-enabled indicator or method. - -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. diff --git a/docs/guide.md b/docs/guide.md index f66d491ec..8a4b4a291 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -227,8 +227,6 @@ IEnumerable obvResults = quotes.GetObv(); IEnumerable rsiOfObv = obvResults.GetRsi(14); ``` -:warning: **Warning:** fewer results are returned from chained indicators because unusable warmup period `null` values are removed. - ## Candlestick patterns [Candlestick Patterns]({{site.baseurl}}/indicators/#candlestick-pattern) are a unique form of indicator and have a common output model. diff --git a/docs/utilities.md b/docs/utilities.md index 0c83e83c5..0bc444c24 100644 --- a/docs/utilities.md +++ b/docs/utilities.md @@ -19,7 +19,7 @@ redirect_from: `quotes.Use()` can be used before most indicator calls to specify price element to analyze. It cannot be used for indicators that require the full OHLCV quote profile. ```csharp -// example: use HL2 price instead of +// example: use HL2 price instead of // the standard Close price for RSI var results = quotes .Use(CandlePart.HL2) @@ -113,7 +113,7 @@ See [individual indicator pages]({{site.baseurl}}/indicators/#content) for infor :warning: Note: `.RemoveWarmupPeriods()` is not available on indicators that do not have any recommended pruning; however, you can still do a custom pruning by using the customizable `.RemoveWarmupPeriods(removePeriods)`. -:warning: WARNING! `.RemoveWarmupPeriods()` will reverse-engineer some parameters in determing the recommended pruning amount. Consequently, on rare occassions when there are unusual results, there can be an erroneous increase in the amount of pruning. If you want more certainty, use the `.RemoveWarmupPeriods(removePeriods)` with a specific number of `removePeriods`. +:warning: WARNING! `.RemoveWarmupPeriods()` will reverse-engineer some parameters in determining the recommended pruning amount. Consequently, on rare occasions when there are unusual results, there can be an erroneous increase in the amount of pruning. Using this method on chained indicators without specifying `removePeriods` is strongly discouraged. If you want more certainty, use the `.RemoveWarmupPeriods(removePeriods)` with a specific number of `removePeriods`. ### Condense diff --git a/src/_common/Candles/Candles.cs b/src/_common/Candles/Candles.cs index 51b2aafb6..e782af512 100644 --- a/src/_common/Candles/Candles.cs +++ b/src/_common/Candles/Candles.cs @@ -13,9 +13,8 @@ internal static List ToCandleResults( where TQuote : IQuote { List candlesList = quotes - .Select(x => new CandleResult + .Select(x => new CandleResult(x.Date) { - Date = x.Date, Match = Match.None, Candle = new CandleProperties { diff --git a/src/_common/Candles/Models.cs b/src/_common/Candles/Models.cs index d5d6a4681..7de0260f7 100644 --- a/src/_common/Candles/Models.cs +++ b/src/_common/Candles/Models.cs @@ -24,8 +24,9 @@ public class CandleProperties : Quote [Serializable] public class CandleResult : ResultBase { - public CandleResult() + public CandleResult(DateTime date) { + Date = date; Candle = new CandleProperties(); } diff --git a/src/_common/Enums.cs b/src/_common/Enums.cs index 6bbfdc33d..300efadef 100644 --- a/src/_common/Enums.cs +++ b/src/_common/Enums.cs @@ -23,6 +23,18 @@ public enum EndType HighLow = 1 } +public enum Match +{ + BullConfirmed = 200, + BullSignal = 100, + BullBasis = 10, + Neutral = 1, + None = 0, + BearBasis = -10, + BearSignal = -100, + BearConfirmed = -200 +} + public enum MaType { ALMA, @@ -54,14 +66,10 @@ public enum PeriodSize OneMinute } -public enum Match +public enum SyncType { - BullConfirmed = 200, - BullSignal = 100, - BullBasis = 10, - Neutral = 1, - None = 0, - BearBasis = -10, - BearSignal = -100, - BearConfirmed = -200 -} + Prepend, + AppendOnly, + RemoveOnly, + FullMatch +} \ No newline at end of file diff --git a/src/_common/Results/Result.Utilities.cs b/src/_common/Results/Result.Utilities.cs index d09a85c58..10b497758 100644 --- a/src/_common/Results/Result.Utilities.cs +++ b/src/_common/Results/Result.Utilities.cs @@ -24,6 +24,97 @@ public static IEnumerable RemoveWarmupPeriods( "If specified, the Remove Periods value must be greater than or equal to 0.") : results.Remove(removePeriods); + // SYNC INDEX - RESIZE TO MATCH OTHER + public static IEnumerable SyncIndex( + this IEnumerable results, + IEnumerable resultsToMatch, + SyncType syncType = SyncType.FullMatch) + where TResultR : IResult + where TResultM : IResult + { + // initialize + List resultsList = results.ToSortedList(); + List matchList = resultsToMatch.ToSortedList(); + + if (matchList.Count == 0 || resultsList.Count == 0) + { + return new List(); + } + + bool prepend = false; + bool append = false; + bool remove = false; + + switch (syncType) + { + case SyncType.Prepend: + prepend = true; + break; + + case SyncType.AppendOnly: + prepend = append = true; + break; + + case SyncType.RemoveOnly: + remove = true; + break; + + case SyncType.FullMatch: + prepend = append = remove = true; + break; + } + + Type type = resultsList[0].GetType(); + + // add plugs for missing values + if (prepend || append) + { + List toAppend = new(); + + for (int i = 0; i < matchList.Count; i++) + { + TResultM? m = matchList[i]; + TResultR? r = resultsList.Find(m.Date); + + if (r is null) + { + TResultR? n = (TResultR?)Activator.CreateInstance(type, m.Date); + if (n != null) + { + toAppend.Add(n); + } + } + else if (!append) + { + break; + } + } + + resultsList.AddRange(toAppend); + } + + // remove unmatched results + if (remove) + { + List toRemove = new(); + + for (int i = 0; i < resultsList.Count; i++) + { + TResultR? r = resultsList[i]; + TResultM? m = matchList.Find(r.Date); + + if (m is null) + { + toRemove.Add(r); + } + } + + resultsList.RemoveAll(x => toRemove.Contains(x)); + } + + return resultsList.ToSortedList(); + } + // REMOVE RESULTS private static List Remove( this IEnumerable results, @@ -69,4 +160,11 @@ private static List Remove( return prices.OrderBy(x => x.Date).ToList(); } + + // RETURN SORTED LIST of RESULTS + internal static List ToSortedList( + this IEnumerable results) + where TResult : IResult => results + .OrderBy(x => x.Date) + .ToList(); } diff --git a/src/a-d/Adl/Adl.Models.cs b/src/a-d/Adl/Adl.Models.cs index 2992acb22..d8bbe1f88 100644 --- a/src/a-d/Adl/Adl.Models.cs +++ b/src/a-d/Adl/Adl.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class AdlResult : ResultBase, IReusableResult { + public AdlResult(DateTime date) + { + Date = date; + } + public double? MoneyFlowMultiplier { get; set; } public double? MoneyFlowVolume { get; set; } public double Adl { get; set; } diff --git a/src/a-d/Adl/Adl.Series.cs b/src/a-d/Adl/Adl.Series.cs index c5dd37f24..4f9d05df3 100644 --- a/src/a-d/Adl/Adl.Series.cs +++ b/src/a-d/Adl/Adl.Series.cs @@ -23,14 +23,13 @@ internal static List CalcAdl( double mfv = mfm * q.Volume; double adl = mfv + prevAdl; - AdlResult result = new() + AdlResult r = new(q.Date) { - Date = q.Date, MoneyFlowMultiplier = mfm, MoneyFlowVolume = mfv, Adl = adl }; - results.Add(result); + results.Add(r); prevAdl = adl; @@ -43,7 +42,7 @@ internal static List CalcAdl( sumSma += results[p].Adl; } - result.AdlSma = sumSma / smaPeriods; + r.AdlSma = sumSma / smaPeriods; } } diff --git a/src/a-d/Adx/Adx.Models.cs b/src/a-d/Adx/Adx.Models.cs index 549d61134..3c179a51c 100644 --- a/src/a-d/Adx/Adx.Models.cs +++ b/src/a-d/Adx/Adx.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class AdxResult : ResultBase, IReusableResult { + public AdxResult(DateTime date) + { + Date = date; + } + public double? Pdi { get; set; } public double? Mdi { get; set; } public double? Adx { get; set; } diff --git a/src/a-d/Adx/Adx.Series.cs b/src/a-d/Adx/Adx.Series.cs index bacb5dea9..9701e59f3 100644 --- a/src/a-d/Adx/Adx.Series.cs +++ b/src/a-d/Adx/Adx.Series.cs @@ -34,11 +34,8 @@ internal static List CalcAdx( { QuoteD q = qdList[i]; - AdxResult result = new() - { - Date = q.Date - }; - results.Add(result); + AdxResult r = new(q.Date); + results.Add(r); // skip first period if (i == 0) @@ -104,8 +101,8 @@ internal static List CalcAdx( double pdi = 100 * pdm / (double)trs; double mdi = 100 * mdm / (double)trs; - result.Pdi = pdi; - result.Mdi = mdi; + r.Pdi = pdi; + r.Mdi = mdi; // calculate ADX double dx = (pdi + mdi == 0) @@ -116,11 +113,11 @@ internal static List CalcAdx( if (i + 1 > 2 * lookbackPeriods) { adx = ((prevAdx * (lookbackPeriods - 1)) + dx) / lookbackPeriods; - result.Adx = adx; + r.Adx = adx; double? priorAdx = results[i + 1 - lookbackPeriods].Adx; - result.Adxr = (adx + priorAdx) / 2; + r.Adxr = (adx + priorAdx) / 2; prevAdx = adx; } @@ -129,7 +126,7 @@ internal static List CalcAdx( { sumDx += dx; adx = sumDx / lookbackPeriods; - result.Adx = adx; + r.Adx = adx; prevAdx = adx; } diff --git a/src/a-d/Alligator/Alligator.Api.cs b/src/a-d/Alligator/Alligator.Api.cs index 64f041505..55d006097 100644 --- a/src/a-d/Alligator/Alligator.Api.cs +++ b/src/a-d/Alligator/Alligator.Api.cs @@ -40,7 +40,8 @@ public static IEnumerable GetAlligator( teethPeriods, teethOffset, lipsPeriods, - lipsOffset); + lipsOffset) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetAlligator( diff --git a/src/a-d/Alligator/Alligator.Models.cs b/src/a-d/Alligator/Alligator.Models.cs index 2ff36437f..75f928142 100644 --- a/src/a-d/Alligator/Alligator.Models.cs +++ b/src/a-d/Alligator/Alligator.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class AlligatorResult : ResultBase { + public AlligatorResult(DateTime date) + { + Date = date; + } + public double? Jaw { get; set; } public double? Teeth { get; set; } public double? Lips { get; set; } diff --git a/src/a-d/Alligator/Alligator.Series.cs b/src/a-d/Alligator/Alligator.Series.cs index 190b01ef9..8d16cd853 100644 --- a/src/a-d/Alligator/Alligator.Series.cs +++ b/src/a-d/Alligator/Alligator.Series.cs @@ -27,10 +27,7 @@ internal static List CalcAlligator( List results = tpList - .Select(x => new AlligatorResult - { - Date = x.Date - }) + .Select(x => new AlligatorResult(x.Date)) .ToList(); // roll through quotes diff --git a/src/a-d/Alma/Alma.Api.cs b/src/a-d/Alma/Alma.Api.cs index 66e1328c9..6d180315d 100644 --- a/src/a-d/Alma/Alma.Api.cs +++ b/src/a-d/Alma/Alma.Api.cs @@ -22,7 +22,8 @@ public static IEnumerable GetAlma( double offset = 0.85, double sigma = 6) => results .ToResultTuple() - .CalcAlma(lookbackPeriods, offset, sigma); + .CalcAlma(lookbackPeriods, offset, sigma) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetAlma( diff --git a/src/a-d/Alma/Alma.Models.cs b/src/a-d/Alma/Alma.Models.cs index 8e6f114f2..1ce7e3570 100644 --- a/src/a-d/Alma/Alma.Models.cs +++ b/src/a-d/Alma/Alma.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class AlmaResult : ResultBase, IReusableResult { + public AlmaResult(DateTime date) + { + Date = date; + } + public double? Alma { get; set; } double? IReusableResult.Value => Alma; diff --git a/src/a-d/Alma/Alma.Series.cs b/src/a-d/Alma/Alma.Series.cs index 440f1cef4..d0bff4a3e 100644 --- a/src/a-d/Alma/Alma.Series.cs +++ b/src/a-d/Alma/Alma.Series.cs @@ -34,10 +34,8 @@ internal static List CalcAlma( { (DateTime date, double _) = tpList[i]; - AlmaResult r = new() - { - Date = date - }; + AlmaResult r = new(date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -53,8 +51,6 @@ internal static List CalcAlma( r.Alma = weightedSum / norm; } - - results.Add(r); } return results; diff --git a/src/a-d/Aroon/Aroon.Models.cs b/src/a-d/Aroon/Aroon.Models.cs index 6e98d0aa8..50fdc2ddf 100644 --- a/src/a-d/Aroon/Aroon.Models.cs +++ b/src/a-d/Aroon/Aroon.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class AroonResult : ResultBase, IReusableResult { + public AroonResult(DateTime date) + { + Date = date; + } + public double? AroonUp { get; set; } public double? AroonDown { get; set; } public double? Oscillator { get; set; } diff --git a/src/a-d/Aroon/Aroon.Series.cs b/src/a-d/Aroon/Aroon.Series.cs index f0860feb3..4af941670 100644 --- a/src/a-d/Aroon/Aroon.Series.cs +++ b/src/a-d/Aroon/Aroon.Series.cs @@ -18,10 +18,8 @@ internal static List CalcAroon( { QuoteD q = qdList[i]; - AroonResult result = new() - { - Date = q.Date - }; + AroonResult r = new(q.Date); + results.Add(r); // add aroons if (i + 1 > lookbackPeriods) @@ -48,12 +46,10 @@ internal static List CalcAroon( } } - result.AroonUp = 100d * (lookbackPeriods - (i + 1 - lastHighIndex)) / lookbackPeriods; - result.AroonDown = 100d * (lookbackPeriods - (i + 1 - lastLowIndex)) / lookbackPeriods; - result.Oscillator = result.AroonUp - result.AroonDown; + r.AroonUp = 100d * (lookbackPeriods - (i + 1 - lastHighIndex)) / lookbackPeriods; + r.AroonDown = 100d * (lookbackPeriods - (i + 1 - lastLowIndex)) / lookbackPeriods; + r.Oscillator = r.AroonUp - r.AroonDown; } - - results.Add(result); } return results; diff --git a/src/a-d/Atr/Atr.Models.cs b/src/a-d/Atr/Atr.Models.cs index 531dad0c9..d2980015c 100644 --- a/src/a-d/Atr/Atr.Models.cs +++ b/src/a-d/Atr/Atr.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class AtrResult : ResultBase, IReusableResult { + public AtrResult(DateTime date) + { + Date = date; + } + public double? Tr { get; set; } public double? Atr { get; set; } public double? Atrp { get; set; } diff --git a/src/a-d/Atr/Atr.Series.cs b/src/a-d/Atr/Atr.Series.cs index 5bd781a68..7926446c7 100644 --- a/src/a-d/Atr/Atr.Series.cs +++ b/src/a-d/Atr/Atr.Series.cs @@ -24,10 +24,8 @@ internal static List CalcAtr( { QuoteD q = qdList[i]; - AtrResult result = new() - { - Date = q.Date - }; + AtrResult r = new(q.Date); + results.Add(r); if (i > 0) { @@ -36,14 +34,14 @@ internal static List CalcAtr( } double tr = Math.Max(q.High - q.Low, Math.Max(highMinusPrevClose, lowMinusPrevClose)); - result.Tr = tr; + r.Tr = tr; if (i + 1 > lookbackPeriods) { // calculate ATR double atr = ((prevAtr * (lookbackPeriods - 1)) + tr) / lookbackPeriods; - result.Atr = atr; - result.Atrp = (q.Close == 0) ? null : atr / q.Close * 100; + r.Atr = atr; + r.Atrp = (q.Close == 0) ? null : atr / q.Close * 100; prevAtr = atr; } else if (i + 1 == lookbackPeriods) @@ -51,8 +49,8 @@ internal static List CalcAtr( // initialize ATR sumTr += tr; double atr = sumTr / lookbackPeriods; - result.Atr = atr; - result.Atrp = (q.Close == 0) ? null : atr / q.Close * 100; + r.Atr = atr; + r.Atrp = (q.Close == 0) ? null : atr / q.Close * 100; prevAtr = atr; } else @@ -61,7 +59,6 @@ internal static List CalcAtr( sumTr += tr; } - results.Add(result); prevClose = q.Close; } diff --git a/src/a-d/Awesome/Awesome.Api.cs b/src/a-d/Awesome/Awesome.Api.cs index efc3eba31..8d42da713 100644 --- a/src/a-d/Awesome/Awesome.Api.cs +++ b/src/a-d/Awesome/Awesome.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetAwesome( int fastPeriods = 5, int slowPeriods = 34) => results .ToResultTuple() - .CalcAwesome(fastPeriods, slowPeriods); + .CalcAwesome(fastPeriods, slowPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetAwesome( diff --git a/src/a-d/Awesome/Awesome.Models.cs b/src/a-d/Awesome/Awesome.Models.cs index cafcbbbec..a0dd84a03 100644 --- a/src/a-d/Awesome/Awesome.Models.cs +++ b/src/a-d/Awesome/Awesome.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class AwesomeResult : ResultBase, IReusableResult { + public AwesomeResult(DateTime date) + { + Date = date; + } + public double? Oscillator { get; set; } public double? Normalized { get; set; } diff --git a/src/a-d/Awesome/Awesome.Series.cs b/src/a-d/Awesome/Awesome.Series.cs index a608ea566..287be270a 100644 --- a/src/a-d/Awesome/Awesome.Series.cs +++ b/src/a-d/Awesome/Awesome.Series.cs @@ -22,10 +22,8 @@ internal static List CalcAwesome( (DateTime date, double value) = tpList[i]; pr[i] = value; - AwesomeResult r = new() - { - Date = date - }; + AwesomeResult r = new(date); + results.Add(r); if (i + 1 >= slowPeriods) { @@ -45,8 +43,6 @@ internal static List CalcAwesome( r.Oscillator = (sumFast / fastPeriods) - (sumSlow / slowPeriods); r.Normalized = (pr[i] != 0) ? 100 * r.Oscillator / pr[i] : double.NaN; } - - results.Add(r); } return results; diff --git a/src/a-d/Beta/Beta.Models.cs b/src/a-d/Beta/Beta.Models.cs index 820808ea6..2a1dc5257 100644 --- a/src/a-d/Beta/Beta.Models.cs +++ b/src/a-d/Beta/Beta.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class BetaResult : ResultBase, IReusableResult { + public BetaResult(DateTime date) + { + Date = date; + } + public double? Beta { get; set; } public double? BetaUp { get; set; } public double? BetaDown { get; set; } diff --git a/src/a-d/Beta/Beta.Series.cs b/src/a-d/Beta/Beta.Series.cs index 992708a7e..578a44179 100644 --- a/src/a-d/Beta/Beta.Series.cs +++ b/src/a-d/Beta/Beta.Series.cs @@ -50,9 +50,8 @@ internal static List CalcBeta( { (DateTime date, double _) = tpListEval[i]; - BetaResult r = new() + BetaResult r = new(date) { - Date = date, ReturnsEval = evalReturns[i], ReturnsMrkt = mrktReturns[i] }; @@ -106,7 +105,7 @@ private static void CalcBetaWindow( // note: BetaType.All is ineligible for this method // initialize - CorrResult c = new(); + CorrResult c = new(r.Date); List dataA = new(lookbackPeriods); List dataB = new(lookbackPeriods); diff --git a/src/a-d/BollingerBands/BollingerBands.Api.cs b/src/a-d/BollingerBands/BollingerBands.Api.cs index 13fe9caab..cdab49348 100644 --- a/src/a-d/BollingerBands/BollingerBands.Api.cs +++ b/src/a-d/BollingerBands/BollingerBands.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetBollingerBands( int lookbackPeriods = 20, double standardDeviations = 2) => results .ToResultTuple() - .CalcBollingerBands(lookbackPeriods, standardDeviations); + .CalcBollingerBands(lookbackPeriods, standardDeviations) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetBollingerBands( diff --git a/src/a-d/BollingerBands/BollingerBands.Models.cs b/src/a-d/BollingerBands/BollingerBands.Models.cs index 85ee53e9c..9260a0618 100644 --- a/src/a-d/BollingerBands/BollingerBands.Models.cs +++ b/src/a-d/BollingerBands/BollingerBands.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class BollingerBandsResult : ResultBase, IReusableResult { + public BollingerBandsResult(DateTime date) + { + Date = date; + } + public double? Sma { get; set; } public double? UpperBand { get; set; } public double? LowerBand { get; set; } diff --git a/src/a-d/BollingerBands/BollingerBands.Series.cs b/src/a-d/BollingerBands/BollingerBands.Series.cs index b296093d9..498a3f7d1 100644 --- a/src/a-d/BollingerBands/BollingerBands.Series.cs +++ b/src/a-d/BollingerBands/BollingerBands.Series.cs @@ -19,10 +19,8 @@ internal static List CalcBollingerBands( { (DateTime date, double value) = tpList[i]; - BollingerBandsResult r = new() - { - Date = date - }; + BollingerBandsResult r = new(date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -51,8 +49,6 @@ internal static List CalcBollingerBands( r.ZScore = (stdDev == 0) ? double.NaN : (value - r.Sma) / stdDev; r.Width = (periodAvg == 0) ? double.NaN : (r.UpperBand - r.LowerBand) / periodAvg; } - - results.Add(r); } return results; diff --git a/src/a-d/Bop/Bop.Models.cs b/src/a-d/Bop/Bop.Models.cs index b8a89e50a..74df18931 100644 --- a/src/a-d/Bop/Bop.Models.cs +++ b/src/a-d/Bop/Bop.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class BopResult : ResultBase, IReusableResult { + public BopResult(DateTime date) + { + Date = date; + } + public double? Bop { get; set; } double? IReusableResult.Value => Bop; diff --git a/src/a-d/Bop/Bop.Series.cs b/src/a-d/Bop/Bop.Series.cs index ae55ac84a..a65493282 100644 --- a/src/a-d/Bop/Bop.Series.cs +++ b/src/a-d/Bop/Bop.Series.cs @@ -22,10 +22,8 @@ internal static List CalcBop( // roll through quotes for (int i = 0; i < length; i++) { - BopResult r = new() - { - Date = qdList[i].Date - }; + BopResult r = new(qdList[i].Date); + results.Add(r); if (i >= smoothPeriods - 1) { @@ -37,8 +35,6 @@ internal static List CalcBop( r.Bop = sum / smoothPeriods; } - - results.Add(r); } return results; diff --git a/src/a-d/Cci/Cci.Models.cs b/src/a-d/Cci/Cci.Models.cs index 36a530545..2f3f7a449 100644 --- a/src/a-d/Cci/Cci.Models.cs +++ b/src/a-d/Cci/Cci.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class CciResult : ResultBase, IReusableResult { + public CciResult(DateTime date) + { + Date = date; + } + public double? Cci { get; set; } double? IReusableResult.Value => Cci; diff --git a/src/a-d/Cci/Cci.Series.cs b/src/a-d/Cci/Cci.Series.cs index 13a2cbe15..40786c593 100644 --- a/src/a-d/Cci/Cci.Series.cs +++ b/src/a-d/Cci/Cci.Series.cs @@ -21,11 +21,8 @@ internal static List CalcCci( QuoteD q = qdList[i]; tp[i] = (q.High + q.Low + q.Close) / 3d; - CciResult result = new() - { - Date = q.Date - }; - results.Add(result); + CciResult r = new(q.Date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -47,7 +44,7 @@ internal static List CalcCci( avgDv /= lookbackPeriods; - result.Cci = (avgDv == 0) ? double.NaN + r.Cci = (avgDv == 0) ? double.NaN : (tp[i] - avgTp) / (0.015 * avgDv); } } diff --git a/src/a-d/ChaikinOsc/ChaikinOsc.Models.cs b/src/a-d/ChaikinOsc/ChaikinOsc.Models.cs index ad79639c4..686e2ed0b 100644 --- a/src/a-d/ChaikinOsc/ChaikinOsc.Models.cs +++ b/src/a-d/ChaikinOsc/ChaikinOsc.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ChaikinOscResult : ResultBase, IReusableResult { + public ChaikinOscResult(DateTime date) + { + Date = date; + } + public double? MoneyFlowMultiplier { get; set; } public double? MoneyFlowVolume { get; set; } public double? Adl { get; set; } diff --git a/src/a-d/ChaikinOsc/ChaikinOsc.Series.cs b/src/a-d/ChaikinOsc/ChaikinOsc.Series.cs index aa678291d..430651b33 100644 --- a/src/a-d/ChaikinOsc/ChaikinOsc.Series.cs +++ b/src/a-d/ChaikinOsc/ChaikinOsc.Series.cs @@ -13,9 +13,8 @@ internal static List CalcChaikinOsc( // money flow List results = qdList.CalcAdl(null) - .Select(r => new ChaikinOscResult + .Select(r => new ChaikinOscResult(r.Date) { - Date = r.Date, MoneyFlowMultiplier = r.MoneyFlowMultiplier, MoneyFlowVolume = r.MoneyFlowVolume, Adl = r.Adl diff --git a/src/a-d/Chandelier/Chandelier.Models.cs b/src/a-d/Chandelier/Chandelier.Models.cs index 30d442f6c..2239680cb 100644 --- a/src/a-d/Chandelier/Chandelier.Models.cs +++ b/src/a-d/Chandelier/Chandelier.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ChandelierResult : ResultBase, IReusableResult { + public ChandelierResult(DateTime date) + { + Date = date; + } + public double? ChandelierExit { get; set; } double? IReusableResult.Value => ChandelierExit; diff --git a/src/a-d/Chandelier/Chandelier.Series.cs b/src/a-d/Chandelier/Chandelier.Series.cs index 9a2d6c7a7..5720d3491 100644 --- a/src/a-d/Chandelier/Chandelier.Series.cs +++ b/src/a-d/Chandelier/Chandelier.Series.cs @@ -24,10 +24,8 @@ internal static List CalcChandelier( { QuoteD q = qdList[i]; - ChandelierResult result = new() - { - Date = q.Date - }; + ChandelierResult r = new(q.Date); + results.Add(r); // add exit values if (i + 1 >= lookbackPeriods) @@ -48,7 +46,7 @@ internal static List CalcChandelier( } } - result.ChandelierExit = maxHigh - (atr * multiplier); + r.ChandelierExit = maxHigh - (atr * multiplier); break; case ChandelierType.Short: @@ -63,15 +61,13 @@ internal static List CalcChandelier( } } - result.ChandelierExit = minLow + (atr * multiplier); + r.ChandelierExit = minLow + (atr * multiplier); break; default: break; } } - - results.Add(result); } return results; diff --git a/src/a-d/Chop/Chop.Models.cs b/src/a-d/Chop/Chop.Models.cs index fb24d8ff4..a444acc58 100644 --- a/src/a-d/Chop/Chop.Models.cs +++ b/src/a-d/Chop/Chop.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ChopResult : ResultBase, IReusableResult { + public ChopResult(DateTime date) + { + Date = date; + } + public double? Chop { get; set; } double? IReusableResult.Value => Chop; diff --git a/src/a-d/Chop/Chop.Series.cs b/src/a-d/Chop/Chop.Series.cs index c22ff95f4..1329d2e23 100644 --- a/src/a-d/Chop/Chop.Series.cs +++ b/src/a-d/Chop/Chop.Series.cs @@ -25,10 +25,7 @@ internal static List CalcChop( // roll through quotes for (int i = 0; i < qdList.Count; i++) { - ChopResult r = new() - { - Date = qdList[i].Date - }; + ChopResult r = new(qdList[i].Date); results.Add(r); if (i > 0) diff --git a/src/a-d/Cmf/Cmf.Models.cs b/src/a-d/Cmf/Cmf.Models.cs index e17cf6505..914ac667a 100644 --- a/src/a-d/Cmf/Cmf.Models.cs +++ b/src/a-d/Cmf/Cmf.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class CmfResult : ResultBase, IReusableResult { + public CmfResult(DateTime date) + { + Date = date; + } + public double? MoneyFlowMultiplier { get; set; } public double? MoneyFlowVolume { get; set; } public double? Cmf { get; set; } diff --git a/src/a-d/Cmf/Cmf.Series.cs b/src/a-d/Cmf/Cmf.Series.cs index 6c5e718f6..3f647f0dc 100644 --- a/src/a-d/Cmf/Cmf.Series.cs +++ b/src/a-d/Cmf/Cmf.Series.cs @@ -21,14 +21,14 @@ internal static List CalcCmf( // roll through quotes for (int i = 0; i < length; i++) { - AdlResult r = adlResults[i]; + AdlResult adl = adlResults[i]; - CmfResult result = new() + CmfResult r = new(adl.Date) { - Date = r.Date, - MoneyFlowMultiplier = r.MoneyFlowMultiplier, - MoneyFlowVolume = r.MoneyFlowVolume + MoneyFlowMultiplier = adl.MoneyFlowMultiplier, + MoneyFlowVolume = adl.MoneyFlowVolume }; + results.Add(r); if (i >= lookbackPeriods - 1) { @@ -49,11 +49,9 @@ internal static List CalcCmf( if (avgVol != 0) { - result.Cmf = avgMfv / avgVol; + r.Cmf = avgMfv / avgVol; } } - - results.Add(result); } return results; diff --git a/src/a-d/ConnorsRsi/ConnorsRsi.Api.cs b/src/a-d/ConnorsRsi/ConnorsRsi.Api.cs index 957104edb..7e5424dd8 100644 --- a/src/a-d/ConnorsRsi/ConnorsRsi.Api.cs +++ b/src/a-d/ConnorsRsi/ConnorsRsi.Api.cs @@ -22,7 +22,8 @@ public static IEnumerable GetConnorsRsi( int streakPeriods = 2, int rankPeriods = 100) => results .ToResultTuple() - .CalcConnorsRsi(rsiPeriods, streakPeriods, rankPeriods); + .CalcConnorsRsi(rsiPeriods, streakPeriods, rankPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetConnorsRsi( diff --git a/src/a-d/ConnorsRsi/ConnorsRsi.Models.cs b/src/a-d/ConnorsRsi/ConnorsRsi.Models.cs index ae584df50..8f7556e57 100644 --- a/src/a-d/ConnorsRsi/ConnorsRsi.Models.cs +++ b/src/a-d/ConnorsRsi/ConnorsRsi.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ConnorsRsiResult : ResultBase, IReusableResult { + public ConnorsRsiResult(DateTime date) + { + Date = date; + } + public double? Rsi { get; set; } public double? RsiStreak { get; set; } public double? PercentRank { get; set; } diff --git a/src/a-d/ConnorsRsi/ConnorsRsi.Series.cs b/src/a-d/ConnorsRsi/ConnorsRsi.Series.cs index fa5ce583e..ef7f2caf4 100644 --- a/src/a-d/ConnorsRsi/ConnorsRsi.Series.cs +++ b/src/a-d/ConnorsRsi/ConnorsRsi.Series.cs @@ -63,9 +63,8 @@ private static List CalcStreak( { (DateTime date, double value) = tpList[i]; - ConnorsRsiResult r = new() + ConnorsRsiResult r = new(date) { - Date = date, Rsi = rsiResults[i].Rsi }; results.Add(r); diff --git a/src/a-d/Correlation/Correlation.Models.cs b/src/a-d/Correlation/Correlation.Models.cs index 792d44c1d..04ef2516b 100644 --- a/src/a-d/Correlation/Correlation.Models.cs +++ b/src/a-d/Correlation/Correlation.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class CorrResult : ResultBase, IReusableResult { + public CorrResult(DateTime date) + { + Date = date; + } + public double? VarianceA { get; set; } public double? VarianceB { get; set; } public double? Covariance { get; set; } diff --git a/src/a-d/Correlation/Correlation.Series.cs b/src/a-d/Correlation/Correlation.Series.cs index 6b40eb773..eef289a6c 100644 --- a/src/a-d/Correlation/Correlation.Series.cs +++ b/src/a-d/Correlation/Correlation.Series.cs @@ -27,10 +27,8 @@ internal static List CalcCorrelation( "Date sequence does not match. Correlation requires matching dates in provided histories."); } - CorrResult r = new() - { - Date = aDate - }; + CorrResult r = new(aDate); + results.Add(r); // calculate correlation if (i >= lookbackPeriods - 1) @@ -49,8 +47,6 @@ internal static List CalcCorrelation( r.PeriodCorrelation(dataA, dataB); } - - results.Add(r); } return results; diff --git a/src/a-d/Dema/Dema.Api.cs b/src/a-d/Dema/Dema.Api.cs index 6a03aa3ce..e8ce84a62 100644 --- a/src/a-d/Dema/Dema.Api.cs +++ b/src/a-d/Dema/Dema.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetDema( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcDema(lookbackPeriods); + .CalcDema(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetDema( diff --git a/src/a-d/Dema/Dema.Models.cs b/src/a-d/Dema/Dema.Models.cs index ca8b84d6f..9d8fe3379 100644 --- a/src/a-d/Dema/Dema.Models.cs +++ b/src/a-d/Dema/Dema.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class DemaResult : ResultBase, IReusableResult { + public DemaResult(DateTime date) + { + Date = date; + } + public double? Dema { get; set; } double? IReusableResult.Value => Dema; diff --git a/src/a-d/Dema/Dema.Series.cs b/src/a-d/Dema/Dema.Series.cs index c3fb9b637..1575d1578 100644 --- a/src/a-d/Dema/Dema.Series.cs +++ b/src/a-d/Dema/Dema.Series.cs @@ -33,27 +33,23 @@ internal static List CalcDema( { (DateTime date, double value) = tpList[i]; - DemaResult result = new() - { - Date = date - }; + DemaResult r = new(date); + results.Add(r); if (i > lookbackPeriods - 1) { double? ema1 = lastEma1 + (k * (value - lastEma1)); double? ema2 = lastEma2 + (k * (ema1 - lastEma2)); - result.Dema = (2d * ema1) - ema2; + r.Dema = (2d * ema1) - ema2; lastEma1 = ema1; lastEma2 = ema2; } else if (i == lookbackPeriods - 1) { - result.Dema = (2d * lastEma1) - lastEma2; + r.Dema = (2d * lastEma1) - lastEma2; } - - results.Add(result); } return results; diff --git a/src/a-d/Donchian/Donchian.Models.cs b/src/a-d/Donchian/Donchian.Models.cs index 30d20951f..33594a24e 100644 --- a/src/a-d/Donchian/Donchian.Models.cs +++ b/src/a-d/Donchian/Donchian.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class DonchianResult : ResultBase { + public DonchianResult(DateTime date) + { + Date = date; + } + public decimal? UpperBand { get; set; } public decimal? Centerline { get; set; } public decimal? LowerBand { get; set; } diff --git a/src/a-d/Donchian/Donchian.Series.cs b/src/a-d/Donchian/Donchian.Series.cs index cdae1fd57..4e7a87194 100644 --- a/src/a-d/Donchian/Donchian.Series.cs +++ b/src/a-d/Donchian/Donchian.Series.cs @@ -20,10 +20,8 @@ internal static List CalcDonchian( { TQuote q = quotesList[i]; - DonchianResult result = new() - { - Date = q.Date - }; + DonchianResult r = new(q.Date); + results.Add(r); if (i >= lookbackPeriods) { @@ -46,14 +44,12 @@ internal static List CalcDonchian( } } - result.UpperBand = highHigh; - result.LowerBand = lowLow; - result.Centerline = (result.UpperBand + result.LowerBand) / 2m; - result.Width = (result.Centerline == 0) ? null - : (result.UpperBand - result.LowerBand) / result.Centerline; + r.UpperBand = highHigh; + r.LowerBand = lowLow; + r.Centerline = (r.UpperBand + r.LowerBand) / 2m; + r.Width = (r.Centerline == 0) ? null + : (r.UpperBand - r.LowerBand) / r.Centerline; } - - results.Add(result); } return results; diff --git a/src/a-d/Dpo/Dpo.Api.cs b/src/a-d/Dpo/Dpo.Api.cs index b94ec875e..ee721d443 100644 --- a/src/a-d/Dpo/Dpo.Api.cs +++ b/src/a-d/Dpo/Dpo.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetDpo( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcDpo(lookbackPeriods); + .CalcDpo(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetDpo( diff --git a/src/a-d/Dpo/Dpo.Models.cs b/src/a-d/Dpo/Dpo.Models.cs index 21a07aa7f..0526c7ae6 100644 --- a/src/a-d/Dpo/Dpo.Models.cs +++ b/src/a-d/Dpo/Dpo.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class DpoResult : ResultBase, IReusableResult { + public DpoResult(DateTime date) + { + Date = date; + } + public double? Sma { get; set; } public double? Dpo { get; set; } diff --git a/src/a-d/Dpo/Dpo.Series.cs b/src/a-d/Dpo/Dpo.Series.cs index d9ef5b5ce..bc8a00888 100644 --- a/src/a-d/Dpo/Dpo.Series.cs +++ b/src/a-d/Dpo/Dpo.Series.cs @@ -22,10 +22,7 @@ internal static List CalcDpo( { (DateTime date, double value) = tpList[i]; - DpoResult r = new() - { - Date = date - }; + DpoResult r = new(date); results.Add(r); if (i >= lookbackPeriods - offset - 1 && i < length - offset) diff --git a/src/e-k/ElderRay/ElderRay.Models.cs b/src/e-k/ElderRay/ElderRay.Models.cs index 591635f3d..1ffd29543 100644 --- a/src/e-k/ElderRay/ElderRay.Models.cs +++ b/src/e-k/ElderRay/ElderRay.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ElderRayResult : ResultBase, IReusableResult { + public ElderRayResult(DateTime date) + { + Date = date; + } + public double? Ema { get; set; } public double? BullPower { get; set; } public double? BearPower { get; set; } diff --git a/src/e-k/ElderRay/ElderRay.Series.cs b/src/e-k/ElderRay/ElderRay.Series.cs index 380661fa8..983af5690 100644 --- a/src/e-k/ElderRay/ElderRay.Series.cs +++ b/src/e-k/ElderRay/ElderRay.Series.cs @@ -14,9 +14,8 @@ internal static List CalcElderRay( List results = qdList .ToBasicTuple(CandlePart.Close) .CalcEma(lookbackPeriods) - .Select(x => new ElderRayResult + .Select(x => new ElderRayResult(x.Date) { - Date = x.Date, Ema = x.Ema }) .ToList(); diff --git a/src/e-k/Ema/Ema.Api.cs b/src/e-k/Ema/Ema.Api.cs index 2f5de10c7..122eb1059 100644 --- a/src/e-k/Ema/Ema.Api.cs +++ b/src/e-k/Ema/Ema.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetEma( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcEma(lookbackPeriods); + .CalcEma(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetEma( diff --git a/src/e-k/Ema/Ema.Models.cs b/src/e-k/Ema/Ema.Models.cs index dd40afb49..9d94b7d9f 100644 --- a/src/e-k/Ema/Ema.Models.cs +++ b/src/e-k/Ema/Ema.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class EmaResult : ResultBase, IReusableResult { + public EmaResult(DateTime date) + { + Date = date; + } + public double? Ema { get; set; } double? IReusableResult.Value => Ema; diff --git a/src/e-k/Ema/Ema.Series.cs b/src/e-k/Ema/Ema.Series.cs index ca8dd3a8f..96dd94a11 100644 --- a/src/e-k/Ema/Ema.Series.cs +++ b/src/e-k/Ema/Ema.Series.cs @@ -30,7 +30,7 @@ internal static List CalcEma( for (int i = 0; i < length; i++) { (DateTime date, double value) = tpList[i]; - EmaResult r = new() { Date = date }; + EmaResult r = new(date); if (i + 1 > lookbackPeriods) { diff --git a/src/e-k/Ema/Ema.Stream.cs b/src/e-k/Ema/Ema.Stream.cs index 0009043e0..8a73ef21d 100644 --- a/src/e-k/Ema/Ema.Stream.cs +++ b/src/e-k/Ema/Ema.Stream.cs @@ -57,7 +57,7 @@ public IEnumerable Add( double lastEma = (last.Ema == null) ? double.NaN : (double)last.Ema; double newEma = Increment(tuple.Value, lastEma, K); - EmaResult r = new() { Date = tuple.Date, Ema = newEma }; + EmaResult r = new(tuple.Date) { Ema = newEma }; ProtectedResults.Add(r); } diff --git a/src/e-k/Epma/Epma.Api.cs b/src/e-k/Epma/Epma.Api.cs index e11812f0d..846e3b0b1 100644 --- a/src/e-k/Epma/Epma.Api.cs +++ b/src/e-k/Epma/Epma.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetEpma( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcEpma(lookbackPeriods); + .CalcEpma(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetEpma( diff --git a/src/e-k/Epma/Epma.Models.cs b/src/e-k/Epma/Epma.Models.cs index 718430ad5..eeabaabf6 100644 --- a/src/e-k/Epma/Epma.Models.cs +++ b/src/e-k/Epma/Epma.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class EpmaResult : ResultBase, IReusableResult { + public EpmaResult(DateTime date) + { + Date = date; + } + public double? Epma { get; set; } double? IReusableResult.Value => Epma; diff --git a/src/e-k/Epma/Epma.Series.cs b/src/e-k/Epma/Epma.Series.cs index 2a8769389..d487c2d3c 100644 --- a/src/e-k/Epma/Epma.Series.cs +++ b/src/e-k/Epma/Epma.Series.cs @@ -24,9 +24,8 @@ internal static List CalcEpma( { SlopeResult s = slopeResults[i]; - EpmaResult r = new() + EpmaResult r = new(s.Date) { - Date = s.Date, Epma = (s.Slope * (i + 1)) + s.Intercept }; diff --git a/src/e-k/Fcb/Fcb.Models.cs b/src/e-k/Fcb/Fcb.Models.cs index 255321934..ba4c20d4f 100644 --- a/src/e-k/Fcb/Fcb.Models.cs +++ b/src/e-k/Fcb/Fcb.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class FcbResult : ResultBase { + public FcbResult(DateTime date) + { + Date = date; + } + public decimal? UpperBand { get; set; } public decimal? LowerBand { get; set; } } diff --git a/src/e-k/Fcb/Fcb.Series.cs b/src/e-k/Fcb/Fcb.Series.cs index 4ed3fdcc5..19f68c8aa 100644 --- a/src/e-k/Fcb/Fcb.Series.cs +++ b/src/e-k/Fcb/Fcb.Series.cs @@ -25,10 +25,8 @@ internal static List CalcFcb( { FractalResult f = fractals[i]; - FcbResult r = new() - { - Date = f.Date - }; + FcbResult r = new(f.Date); + results.Add(r); if (i >= 2 * windowSpan) { @@ -40,8 +38,6 @@ internal static List CalcFcb( r.UpperBand = upperLine; r.LowerBand = lowerLine; } - - results.Add(r); } return results; diff --git a/src/e-k/FisherTransform/FisherTransform.Api.cs b/src/e-k/FisherTransform/FisherTransform.Api.cs index df4fdacc3..0ff0d22e4 100644 --- a/src/e-k/FisherTransform/FisherTransform.Api.cs +++ b/src/e-k/FisherTransform/FisherTransform.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetFisherTransform( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcFisherTransform(lookbackPeriods); + .CalcFisherTransform(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetFisherTransform( diff --git a/src/e-k/FisherTransform/FisherTransform.Models.cs b/src/e-k/FisherTransform/FisherTransform.Models.cs index 04ff0c5fd..379d958be 100644 --- a/src/e-k/FisherTransform/FisherTransform.Models.cs +++ b/src/e-k/FisherTransform/FisherTransform.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class FisherTransformResult : ResultBase, IReusableResult { + public FisherTransformResult(DateTime date) + { + Date = date; + } + public double? Fisher { get; set; } public double? Trigger { get; set; } diff --git a/src/e-k/FisherTransform/FisherTransform.Series.cs b/src/e-k/FisherTransform/FisherTransform.Series.cs index f9269a966..b149198d7 100644 --- a/src/e-k/FisherTransform/FisherTransform.Series.cs +++ b/src/e-k/FisherTransform/FisherTransform.Series.cs @@ -31,10 +31,8 @@ internal static List CalcFisherTransform( maxPrice = Math.Max(pr[p], maxPrice); } - FisherTransformResult r = new() - { - Date = date - }; + FisherTransformResult r = new(date); + results.Add(r); if (i > 0) { @@ -56,8 +54,6 @@ internal static List CalcFisherTransform( xv[i] = 0; r.Fisher = 0; } - - results.Add(r); } return results; diff --git a/src/e-k/ForceIndex/ForceIndex.Models.cs b/src/e-k/ForceIndex/ForceIndex.Models.cs index 5eff40940..06f061c4a 100644 --- a/src/e-k/ForceIndex/ForceIndex.Models.cs +++ b/src/e-k/ForceIndex/ForceIndex.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ForceIndexResult : ResultBase, IReusableResult { + public ForceIndexResult(DateTime date) + { + Date = date; + } + public double? ForceIndex { get; set; } double? IReusableResult.Value => ForceIndex; diff --git a/src/e-k/ForceIndex/ForceIndex.Series.cs b/src/e-k/ForceIndex/ForceIndex.Series.cs index b0e8bc6a0..72b5affc5 100644 --- a/src/e-k/ForceIndex/ForceIndex.Series.cs +++ b/src/e-k/ForceIndex/ForceIndex.Series.cs @@ -21,10 +21,7 @@ internal static List CalcForceIndex( { QuoteD q = qdList[i]; - ForceIndexResult r = new() - { - Date = q.Date - }; + ForceIndexResult r = new(q.Date); results.Add(r); // skip first period diff --git a/src/e-k/Fractal/Fractal.Models.cs b/src/e-k/Fractal/Fractal.Models.cs index 5e7cb59c9..406feb5e6 100644 --- a/src/e-k/Fractal/Fractal.Models.cs +++ b/src/e-k/Fractal/Fractal.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class FractalResult : ResultBase { + public FractalResult(DateTime date) + { + Date = date; + } + public decimal? FractalBear { get; set; } public decimal? FractalBull { get; set; } } diff --git a/src/e-k/Fractal/Fractal.Series.cs b/src/e-k/Fractal/Fractal.Series.cs index c69dc246b..66abf1e3c 100644 --- a/src/e-k/Fractal/Fractal.Series.cs +++ b/src/e-k/Fractal/Fractal.Series.cs @@ -21,10 +21,8 @@ internal static List CalcFractal( { TQuote q = quotesList[i]; - FractalResult r = new() - { - Date = q.Date - }; + FractalResult r = new(q.Date); + results.Add(r); if (i + 1 > leftSpan && i + 1 <= quotesList.Count - rightSpan) { @@ -78,8 +76,6 @@ internal static List CalcFractal( r.FractalBull = evalLow; } } - - results.Add(r); } return results; diff --git a/src/e-k/Gator/Gator.Api.cs b/src/e-k/Gator/Gator.Api.cs index 999877d2f..eba223120 100644 --- a/src/e-k/Gator/Gator.Api.cs +++ b/src/e-k/Gator/Gator.Api.cs @@ -26,7 +26,8 @@ public static IEnumerable GetGator( .ToResultTuple() .GetAlligator() .ToList() - .CalcGator(); + .CalcGator() + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetGator( diff --git a/src/e-k/Gator/Gator.Models.cs b/src/e-k/Gator/Gator.Models.cs index c2acc868c..3cf27e8eb 100644 --- a/src/e-k/Gator/Gator.Models.cs +++ b/src/e-k/Gator/Gator.Models.cs @@ -1,8 +1,13 @@ -namespace Skender.Stock.Indicators; +namespace Skender.Stock.Indicators; [Serializable] public class GatorResult : ResultBase { + public GatorResult(DateTime date) + { + Date = date; + } + public double? Upper { get; set; } public double? Lower { get; set; } diff --git a/src/e-k/Gator/Gator.Series.cs b/src/e-k/Gator/Gator.Series.cs index a638e405e..59382d2fa 100644 --- a/src/e-k/Gator/Gator.Series.cs +++ b/src/e-k/Gator/Gator.Series.cs @@ -7,9 +7,8 @@ internal static List CalcGator( this List alligator) { List results = alligator - .Select(x => new GatorResult + .Select(x => new GatorResult(x.Date) { - Date = x.Date, Upper = NullMath.Abs(x.Jaw - x.Teeth), Lower = -NullMath.Abs(x.Teeth - x.Lips) }) diff --git a/src/e-k/HeikinAshi/HeikinAshi.Models.cs b/src/e-k/HeikinAshi/HeikinAshi.Models.cs index 41e12c755..4cb917ac5 100644 --- a/src/e-k/HeikinAshi/HeikinAshi.Models.cs +++ b/src/e-k/HeikinAshi/HeikinAshi.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class HeikinAshiResult : ResultBase, IQuote { + public HeikinAshiResult(DateTime date) + { + Date = date; + } + public decimal Open { get; set; } public decimal High { get; set; } public decimal Low { get; set; } diff --git a/src/e-k/HeikinAshi/HeikinAshi.Series.cs b/src/e-k/HeikinAshi/HeikinAshi.Series.cs index 958881a8f..62eeb19bf 100644 --- a/src/e-k/HeikinAshi/HeikinAshi.Series.cs +++ b/src/e-k/HeikinAshi/HeikinAshi.Series.cs @@ -34,16 +34,15 @@ internal static List CalcHeikinAshi( decimal[] arrL = { q.Low, open, close }; decimal low = arrL.Min(); - HeikinAshiResult result = new() + HeikinAshiResult r = new(q.Date) { - Date = q.Date, Open = open, High = high, Low = low, Close = close, Volume = q.Volume }; - results.Add(result); + results.Add(r); // save for next iteration prevOpen = open; diff --git a/src/e-k/Hma/Hma.Api.cs b/src/e-k/Hma/Hma.Api.cs index f31882992..d0353dacc 100644 --- a/src/e-k/Hma/Hma.Api.cs +++ b/src/e-k/Hma/Hma.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetHma( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcHma(lookbackPeriods); + .CalcHma(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetHma( diff --git a/src/e-k/Hma/Hma.Models.cs b/src/e-k/Hma/Hma.Models.cs index a8d2e5a9c..f63a82743 100644 --- a/src/e-k/Hma/Hma.Models.cs +++ b/src/e-k/Hma/Hma.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class HmaResult : ResultBase, IReusableResult { + public HmaResult(DateTime date) + { + Date = date; + } + public double? Hma { get; set; } double? IReusableResult.Value => Hma; diff --git a/src/e-k/Hma/Hma.Series.cs b/src/e-k/Hma/Hma.Series.cs index e45105a8c..f5a4ed767 100644 --- a/src/e-k/Hma/Hma.Series.cs +++ b/src/e-k/Hma/Hma.Series.cs @@ -43,17 +43,13 @@ internal static List CalcHma( List results = tpList .Take(shiftQty) - .Select(x => new HmaResult - { - Date = x.Item1 - }) + .Select(x => new HmaResult(x.Item1)) .ToList(); // calculate final HMA = WMA with period SQRT(n) List hmaResults = synthHistory.GetWma(sqN) - .Select(x => new HmaResult + .Select(x => new HmaResult(x.Date) { - Date = x.Date, Hma = x.Wma }) .ToList(); diff --git a/src/e-k/HtTrendline/HtTrendline.Api.cs b/src/e-k/HtTrendline/HtTrendline.Api.cs index 543ff1fc6..a3dd6a746 100644 --- a/src/e-k/HtTrendline/HtTrendline.Api.cs +++ b/src/e-k/HtTrendline/HtTrendline.Api.cs @@ -16,7 +16,8 @@ public static IEnumerable GetHtTrendline( public static IEnumerable GetHtTrendline( this IEnumerable results) => results .ToResultTuple() - .CalcHtTrendline(); + .CalcHtTrendline() + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetHtTrendline( diff --git a/src/e-k/HtTrendline/HtTrendline.Models.cs b/src/e-k/HtTrendline/HtTrendline.Models.cs index 07b1166a4..ccfc28a6e 100644 --- a/src/e-k/HtTrendline/HtTrendline.Models.cs +++ b/src/e-k/HtTrendline/HtTrendline.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class HtlResult : ResultBase, IReusableResult { + public HtlResult(DateTime date) + { + Date = date; + } + public double? Trendline { get; set; } public double? SmoothPrice { get; set; } diff --git a/src/e-k/HtTrendline/HtTrendline.Series.cs b/src/e-k/HtTrendline/HtTrendline.Series.cs index 33c5876e0..f85dd2779 100644 --- a/src/e-k/HtTrendline/HtTrendline.Series.cs +++ b/src/e-k/HtTrendline/HtTrendline.Series.cs @@ -36,10 +36,8 @@ internal static List CalcHtTrendline( (DateTime date, double value) = tpList[i]; pr[i] = value; - HtlResult r = new() - { - Date = date, - }; + HtlResult r = new(date); + results.Add(r); if (i > 5) { @@ -133,8 +131,6 @@ internal static List CalcHtTrendline( sd[i] = 0; } - - results.Add(r); } return results; diff --git a/src/e-k/Hurst/Hurst.Api.cs b/src/e-k/Hurst/Hurst.Api.cs index 3cd46f4ef..5a5c938ad 100644 --- a/src/e-k/Hurst/Hurst.Api.cs +++ b/src/e-k/Hurst/Hurst.Api.cs @@ -17,7 +17,8 @@ public static IEnumerable GetHurst( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcHurst(lookbackPeriods); + .CalcHurst(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetHurst( diff --git a/src/e-k/Hurst/Hurst.Models.cs b/src/e-k/Hurst/Hurst.Models.cs index 79a51e65f..3c6b82b15 100644 --- a/src/e-k/Hurst/Hurst.Models.cs +++ b/src/e-k/Hurst/Hurst.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class HurstResult : ResultBase, IReusableResult { + public HurstResult(DateTime date) + { + Date = date; + } + public double? HurstExponent { get; set; } double? IReusableResult.Value => HurstExponent; diff --git a/src/e-k/Hurst/Hurst.Series.cs b/src/e-k/Hurst/Hurst.Series.cs index cc6642f82..9920cb41a 100644 --- a/src/e-k/Hurst/Hurst.Series.cs +++ b/src/e-k/Hurst/Hurst.Series.cs @@ -19,10 +19,8 @@ internal static List CalcHurst( { (DateTime date, double _) = tpList[i]; - HurstResult result = new() - { - Date = date - }; + HurstResult r = new(date); + results.Add(r); if (i + 1 > lookbackPeriods) { @@ -44,10 +42,8 @@ internal static List CalcHurst( } // calculate hurst exponent - result.HurstExponent = CalcHurstWindow(values); + r.HurstExponent = CalcHurstWindow(values); } - - results.Add(result); } return results; diff --git a/src/e-k/Ichimoku/Ichimoku.Models.cs b/src/e-k/Ichimoku/Ichimoku.Models.cs index 57dcc64a9..5fb1692c3 100644 --- a/src/e-k/Ichimoku/Ichimoku.Models.cs +++ b/src/e-k/Ichimoku/Ichimoku.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class IchimokuResult : ResultBase { + public IchimokuResult(DateTime date) + { + Date = date; + } + public decimal? TenkanSen { get; set; } // conversion line public decimal? KijunSen { get; set; } // base line public decimal? SenkouSpanA { get; set; } // leading span A diff --git a/src/e-k/Ichimoku/Ichimoku.Series.cs b/src/e-k/Ichimoku/Ichimoku.Series.cs index 3bc30db47..ab276f947 100644 --- a/src/e-k/Ichimoku/Ichimoku.Series.cs +++ b/src/e-k/Ichimoku/Ichimoku.Series.cs @@ -32,17 +32,14 @@ internal static List CalcIchimoku( { TQuote q = quotesList[i]; - IchimokuResult result = new() - { - Date = q.Date - }; - results.Add(result); + IchimokuResult r = new(q.Date); + results.Add(r); // tenkan-sen conversion line - CalcIchimokuTenkanSen(i, quotesList, result, tenkanPeriods); + CalcIchimokuTenkanSen(i, quotesList, r, tenkanPeriods); // kijun-sen base line - CalcIchimokuKijunSen(i, quotesList, result, kijunPeriods); + CalcIchimokuKijunSen(i, quotesList, r, kijunPeriods); // senkou span A if (i >= senkouStartPeriod) @@ -51,17 +48,17 @@ internal static List CalcIchimoku( if (skq != null && skq.TenkanSen != null && skq.KijunSen != null) { - result.SenkouSpanA = (skq.TenkanSen + skq.KijunSen) / 2; + r.SenkouSpanA = (skq.TenkanSen + skq.KijunSen) / 2; } } // senkou span B - CalcIchimokuSenkouB(i, quotesList, result, senkouOffset, senkouBPeriods); + CalcIchimokuSenkouB(i, quotesList, r, senkouOffset, senkouBPeriods); // chikou line if (i + chikouOffset < quotesList.Count) { - result.ChikouSpan = quotesList[i + chikouOffset].Close; + r.ChikouSpan = quotesList[i + chikouOffset].Close; } } diff --git a/src/e-k/Kama/Kama.Api.cs b/src/e-k/Kama/Kama.Api.cs index 537f7b03d..c24b844da 100644 --- a/src/e-k/Kama/Kama.Api.cs +++ b/src/e-k/Kama/Kama.Api.cs @@ -21,7 +21,8 @@ public static IEnumerable GetKama( int fastPeriods = 2, int slowPeriods = 30) => results .ToResultTuple() - .CalcKama(erPeriods, fastPeriods, slowPeriods); + .CalcKama(erPeriods, fastPeriods, slowPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetKama( diff --git a/src/e-k/Kama/Kama.Models.cs b/src/e-k/Kama/Kama.Models.cs index 4b4097a69..e5e3e0e23 100644 --- a/src/e-k/Kama/Kama.Models.cs +++ b/src/e-k/Kama/Kama.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class KamaResult : ResultBase, IReusableResult { + public KamaResult(DateTime date) + { + Date = date; + } + public double? ER { get; set; } public double? Kama { get; set; } diff --git a/src/e-k/Kama/Kama.Series.cs b/src/e-k/Kama/Kama.Series.cs index b360e7980..53cadc3b0 100644 --- a/src/e-k/Kama/Kama.Series.cs +++ b/src/e-k/Kama/Kama.Series.cs @@ -23,10 +23,8 @@ internal static List CalcKama( { (DateTime date, double value) = tpList[i]; - KamaResult r = new() - { - Date = date - }; + KamaResult r = new(date); + results.Add(r); if (i + 1 > erPeriods) { @@ -67,8 +65,6 @@ internal static List CalcKama( { r.Kama = value; } - - results.Add(r); } return results; diff --git a/src/e-k/Keltner/Keltner.Models.cs b/src/e-k/Keltner/Keltner.Models.cs index a4f3cc31d..ba9d79fbe 100644 --- a/src/e-k/Keltner/Keltner.Models.cs +++ b/src/e-k/Keltner/Keltner.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class KeltnerResult : ResultBase { + public KeltnerResult(DateTime date) + { + Date = date; + } + public double? UpperBand { get; set; } public double? Centerline { get; set; } public double? LowerBand { get; set; } diff --git a/src/e-k/Keltner/Keltner.Series.cs b/src/e-k/Keltner/Keltner.Series.cs index f16356ec2..be0407ec3 100644 --- a/src/e-k/Keltner/Keltner.Series.cs +++ b/src/e-k/Keltner/Keltner.Series.cs @@ -32,10 +32,8 @@ internal static List CalcKeltner( { QuoteD q = qdList[i]; - KeltnerResult result = new() - { - Date = q.Date - }; + KeltnerResult r = new(q.Date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -43,14 +41,12 @@ internal static List CalcKeltner( AtrResult atr = atrResults[i]; double? atrSpan = atr.Atr * multiplier; - result.UpperBand = ema.Ema + atrSpan; - result.LowerBand = ema.Ema - atrSpan; - result.Centerline = ema.Ema; - result.Width = (result.Centerline == 0) ? null - : (result.UpperBand - result.LowerBand) / result.Centerline; + r.UpperBand = ema.Ema + atrSpan; + r.LowerBand = ema.Ema - atrSpan; + r.Centerline = ema.Ema; + r.Width = (r.Centerline == 0) ? null + : (r.UpperBand - r.LowerBand) / r.Centerline; } - - results.Add(result); } return results; diff --git a/src/e-k/Kvo/Kvo.Models.cs b/src/e-k/Kvo/Kvo.Models.cs index 8f0d034ed..030bd1a31 100644 --- a/src/e-k/Kvo/Kvo.Models.cs +++ b/src/e-k/Kvo/Kvo.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class KvoResult : ResultBase, IReusableResult { + internal KvoResult(DateTime date) + { + Date = date; + } + public double? Oscillator { get; set; } public double? Signal { get; set; } diff --git a/src/e-k/Kvo/Kvo.Series.cs b/src/e-k/Kvo/Kvo.Series.cs index b0096eedc..b27ae2b49 100644 --- a/src/e-k/Kvo/Kvo.Series.cs +++ b/src/e-k/Kvo/Kvo.Series.cs @@ -34,10 +34,7 @@ internal static List CalcKvo( { QuoteD q = qdList[i]; - KvoResult r = new() - { - Date = q.Date - }; + KvoResult r = new(q.Date); results.Add(r); // trend basis comparator diff --git a/src/m-r/MaEnvelopes/MaEnvelopes.Api.cs b/src/m-r/MaEnvelopes/MaEnvelopes.Api.cs index aaf77a3ad..ba80a2cdc 100644 --- a/src/m-r/MaEnvelopes/MaEnvelopes.Api.cs +++ b/src/m-r/MaEnvelopes/MaEnvelopes.Api.cs @@ -22,7 +22,8 @@ public static IEnumerable GetMaEnvelopes( double percentOffset = 2.5, MaType movingAverageType = MaType.SMA) => results .ToResultTuple() - .CalcMaEnvelopes(lookbackPeriods, percentOffset, movingAverageType); + .CalcMaEnvelopes(lookbackPeriods, percentOffset, movingAverageType) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetMaEnvelopes( diff --git a/src/m-r/MaEnvelopes/MaEnvelopes.Models.cs b/src/m-r/MaEnvelopes/MaEnvelopes.Models.cs index ba83fea45..399d39c12 100644 --- a/src/m-r/MaEnvelopes/MaEnvelopes.Models.cs +++ b/src/m-r/MaEnvelopes/MaEnvelopes.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class MaEnvelopeResult : ResultBase { + public MaEnvelopeResult(DateTime date) + { + Date = date; + } + public double? Centerline { get; set; } public double? UpperEnvelope { get; set; } public double? LowerEnvelope { get; set; } diff --git a/src/m-r/MaEnvelopes/MaEnvelopes.Series.cs b/src/m-r/MaEnvelopes/MaEnvelopes.Series.cs index 34b89bebf..58634bdc6 100644 --- a/src/m-r/MaEnvelopes/MaEnvelopes.Series.cs +++ b/src/m-r/MaEnvelopes/MaEnvelopes.Series.cs @@ -44,9 +44,8 @@ private static IEnumerable MaEnvAlma( int lookbackPeriods, double offsetRatio) => tpList.GetAlma(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Alma, UpperEnvelope = x.Alma + (x.Alma * offsetRatio), LowerEnvelope = x.Alma - (x.Alma * offsetRatio) @@ -57,9 +56,8 @@ private static IEnumerable MaEnvDema( int lookbackPeriods, double offsetRatio) => tpList.GetDema(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Dema, UpperEnvelope = x.Dema + (x.Dema * offsetRatio), LowerEnvelope = x.Dema - (x.Dema * offsetRatio) @@ -70,9 +68,8 @@ private static IEnumerable MaEnvEma( int lookbackPeriods, double offsetRatio) => tpList.GetEma(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Ema, UpperEnvelope = x.Ema + (x.Ema * offsetRatio), LowerEnvelope = x.Ema - (x.Ema * offsetRatio) @@ -83,9 +80,8 @@ private static IEnumerable MaEnvEpma( int lookbackPeriods, double offsetRatio) => tpList.GetEpma(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Epma, UpperEnvelope = x.Epma + (x.Epma * offsetRatio), LowerEnvelope = x.Epma - (x.Epma * offsetRatio) @@ -96,9 +92,8 @@ private static IEnumerable MaEnvHma( int lookbackPeriods, double offsetRatio) => tpList.GetHma(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Hma, UpperEnvelope = x.Hma + (x.Hma * offsetRatio), LowerEnvelope = x.Hma - (x.Hma * offsetRatio) @@ -109,9 +104,8 @@ private static IEnumerable MaEnvSma( int lookbackPeriods, double offsetRatio) => tpList.GetSma(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Sma, UpperEnvelope = x.Sma + (x.Sma * offsetRatio), LowerEnvelope = x.Sma - (x.Sma * offsetRatio) @@ -122,9 +116,8 @@ private static IEnumerable MaEnvSmma( int lookbackPeriods, double offsetRatio) => tpList.GetSmma(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Smma, UpperEnvelope = x.Smma + (x.Smma * offsetRatio), LowerEnvelope = x.Smma - (x.Smma * offsetRatio) @@ -135,9 +128,8 @@ private static IEnumerable MaEnvTema( int lookbackPeriods, double offsetRatio) => tpList.GetTema(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Tema, UpperEnvelope = x.Tema + (x.Tema * offsetRatio), LowerEnvelope = x.Tema - (x.Tema * offsetRatio) @@ -148,9 +140,8 @@ private static IEnumerable MaEnvWma( int lookbackPeriods, double offsetRatio) => tpList.GetWma(lookbackPeriods) - .Select(x => new MaEnvelopeResult + .Select(x => new MaEnvelopeResult(x.Date) { - Date = x.Date, Centerline = x.Wma, UpperEnvelope = x.Wma + (x.Wma * offsetRatio), LowerEnvelope = x.Wma - (x.Wma * offsetRatio) diff --git a/src/m-r/Macd/Macd.Models.cs b/src/m-r/Macd/Macd.Models.cs index 47060cb93..e989b1a5e 100644 --- a/src/m-r/Macd/Macd.Models.cs +++ b/src/m-r/Macd/Macd.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class MacdResult : ResultBase, IReusableResult { + public MacdResult(DateTime date) + { + Date = date; + } + public double? Macd { get; set; } public double? Signal { get; set; } public double? Histogram { get; set; } diff --git a/src/m-r/Macd/Macd.Series.cs b/src/m-r/Macd/Macd.Series.cs index 8dbbad40e..7708a4bb9 100644 --- a/src/m-r/Macd/Macd.Series.cs +++ b/src/m-r/Macd/Macd.Series.cs @@ -27,27 +27,25 @@ internal static List CalcMacd( EmaResult df = emaFast[i]; EmaResult ds = emaSlow[i]; - MacdResult result = new() + MacdResult r = new(date) { - Date = date, FastEma = df.Ema, SlowEma = ds.Ema }; + results.Add(r); if (i >= slowPeriods - 1 && df.Ema is not null && ds.Ema is not null) { double macd = (double)(df.Ema - ds.Ema); - result.Macd = macd; + r.Macd = macd; // temp data for interim EMA of macd (DateTime, double) diff = (date, macd); emaDiff.Add(diff); } - - results.Add(result); } // add signal and histogram to result diff --git a/src/m-r/Macd/MacdApi.cs b/src/m-r/Macd/MacdApi.cs index ab2c16c47..ffcca6c8b 100644 --- a/src/m-r/Macd/MacdApi.cs +++ b/src/m-r/Macd/MacdApi.cs @@ -22,7 +22,8 @@ public static IEnumerable GetMacd( int slowPeriods = 26, int signalPeriods = 9) => results .ToResultTuple() - .CalcMacd(fastPeriods, slowPeriods, signalPeriods); + .CalcMacd(fastPeriods, slowPeriods, signalPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetMacd( diff --git a/src/m-r/Mama/Mama.Api.cs b/src/m-r/Mama/Mama.Api.cs index e826d1229..27262bd0f 100644 --- a/src/m-r/Mama/Mama.Api.cs +++ b/src/m-r/Mama/Mama.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetMama( double fastLimit = 0.5, double slowLimit = 0.05) => results .ToResultTuple() - .CalcMama(fastLimit, slowLimit); + .CalcMama(fastLimit, slowLimit) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetMama( diff --git a/src/m-r/Mama/Mama.Models.cs b/src/m-r/Mama/Mama.Models.cs index 4333ee232..7b18f3b78 100644 --- a/src/m-r/Mama/Mama.Models.cs +++ b/src/m-r/Mama/Mama.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class MamaResult : ResultBase, IReusableResult { + public MamaResult(DateTime date) + { + Date = date; + } + public double? Mama { get; set; } public double? Fama { get; set; } diff --git a/src/m-r/Mama/Mama.Series.cs b/src/m-r/Mama/Mama.Series.cs index ce5f04289..87a8e3e47 100644 --- a/src/m-r/Mama/Mama.Series.cs +++ b/src/m-r/Mama/Mama.Series.cs @@ -42,10 +42,8 @@ internal static List CalcMama( (DateTime date, double value) = tpList[i]; pr[i] = value; - MamaResult r = new() - { - Date = date, - }; + MamaResult r = new(date); + results.Add(r); if (i > 5) { @@ -130,8 +128,6 @@ internal static List CalcMama( ph[i] = 0; } - - results.Add(r); } return results; diff --git a/src/m-r/Mfi/Mfi.Models.cs b/src/m-r/Mfi/Mfi.Models.cs index 86b6eb46f..e4d133454 100644 --- a/src/m-r/Mfi/Mfi.Models.cs +++ b/src/m-r/Mfi/Mfi.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class MfiResult : ResultBase, IReusableResult { + public MfiResult(DateTime date) + { + Date = date; + } + public double? Mfi { get; set; } double? IReusableResult.Value => Mfi; diff --git a/src/m-r/Mfi/Mfi.Series.cs b/src/m-r/Mfi/Mfi.Series.cs index f74460d49..f47115438 100644 --- a/src/m-r/Mfi/Mfi.Series.cs +++ b/src/m-r/Mfi/Mfi.Series.cs @@ -24,10 +24,8 @@ internal static List CalcMfi( { QuoteD q = qdList[i]; - MfiResult result = new() - { - Date = q.Date - }; + MfiResult r = new(q.Date); + results.Add(r); // true price tp[i] = (q.High + q.Low + q.Close) / 3; @@ -49,8 +47,6 @@ internal static List CalcMfi( direction[i] = -1; } - results.Add(result); - prevTP = tp[i]; } diff --git a/src/m-r/Obv/Obv.Models.cs b/src/m-r/Obv/Obv.Models.cs index 84cc7f9ac..2f315ae4a 100644 --- a/src/m-r/Obv/Obv.Models.cs +++ b/src/m-r/Obv/Obv.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ObvResult : ResultBase, IReusableResult { + public ObvResult(DateTime date) + { + Date = date; + } + public double Obv { get; set; } public double? ObvSma { get; set; } diff --git a/src/m-r/Obv/Obv.Series.cs b/src/m-r/Obv/Obv.Series.cs index 69c0f37f5..e2feab466 100644 --- a/src/m-r/Obv/Obv.Series.cs +++ b/src/m-r/Obv/Obv.Series.cs @@ -34,12 +34,11 @@ internal static List CalcObv( obv -= q.Volume; } - ObvResult result = new() + ObvResult r = new(q.Date) { - Date = q.Date, Obv = obv }; - results.Add(result); + results.Add(r); prevClose = q.Close; @@ -52,7 +51,7 @@ internal static List CalcObv( sumSma += results[p].Obv; } - result.ObvSma = sumSma / smaPeriods; + r.ObvSma = sumSma / smaPeriods; } } diff --git a/src/m-r/ParabolicSar/ParabolicSar.Models.cs b/src/m-r/ParabolicSar/ParabolicSar.Models.cs index 71818f6d5..6b70d76b7 100644 --- a/src/m-r/ParabolicSar/ParabolicSar.Models.cs +++ b/src/m-r/ParabolicSar/ParabolicSar.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ParabolicSarResult : ResultBase, IReusableResult { + public ParabolicSarResult(DateTime date) + { + Date = date; + } + public double? Sar { get; set; } public bool? IsReversal { get; set; } diff --git a/src/m-r/ParabolicSar/ParabolicSar.Series.cs b/src/m-r/ParabolicSar/ParabolicSar.Series.cs index 51a7cd9c7..58f2f3a73 100644 --- a/src/m-r/ParabolicSar/ParabolicSar.Series.cs +++ b/src/m-r/ParabolicSar/ParabolicSar.Series.cs @@ -37,10 +37,7 @@ internal static List CalcParabolicSar( { QuoteD? q = qdList[i]; - ParabolicSarResult r = new() - { - Date = q.Date - }; + ParabolicSarResult r = new(q.Date); results.Add(r); // skip first one diff --git a/src/m-r/Pivots/Pivots.Models.cs b/src/m-r/Pivots/Pivots.Models.cs index 899a02bfe..d8231c267 100644 --- a/src/m-r/Pivots/Pivots.Models.cs +++ b/src/m-r/Pivots/Pivots.Models.cs @@ -1,8 +1,13 @@ -namespace Skender.Stock.Indicators; +namespace Skender.Stock.Indicators; [Serializable] public class PivotsResult : ResultBase { + public PivotsResult(DateTime date) + { + Date = date; + } + public decimal? HighPoint { get; set; } public decimal? LowPoint { get; set; } public decimal? HighLine { get; set; } diff --git a/src/m-r/Pivots/Pivots.Series.cs b/src/m-r/Pivots/Pivots.Series.cs index ab679211b..101bb0ddc 100644 --- a/src/m-r/Pivots/Pivots.Series.cs +++ b/src/m-r/Pivots/Pivots.Series.cs @@ -19,9 +19,8 @@ internal static List CalcPivots( List results = quotesList .CalcFractal(leftSpan, rightSpan, endType) - .Select(x => new PivotsResult + .Select(x => new PivotsResult(x.Date) { - Date = x.Date, HighPoint = x.FractalBear, LowPoint = x.FractalBull }) diff --git a/src/m-r/Pmo/Pmo.Api.cs b/src/m-r/Pmo/Pmo.Api.cs index b22bd873c..c8c5d6975 100644 --- a/src/m-r/Pmo/Pmo.Api.cs +++ b/src/m-r/Pmo/Pmo.Api.cs @@ -22,7 +22,8 @@ public static IEnumerable GetPmo( int smoothPeriods = 20, int signalPeriods = 10) => results .ToResultTuple() - .CalcPmo(timePeriods, smoothPeriods, signalPeriods); + .CalcPmo(timePeriods, smoothPeriods, signalPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetPmo( diff --git a/src/m-r/Pmo/Pmo.Models.cs b/src/m-r/Pmo/Pmo.Models.cs index e39d65e70..c46c40236 100644 --- a/src/m-r/Pmo/Pmo.Models.cs +++ b/src/m-r/Pmo/Pmo.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class PmoResult : ResultBase, IReusableResult { + public PmoResult(DateTime date) + { + Date = date; + } + public double? Pmo { get; set; } public double? Signal { get; set; } diff --git a/src/m-r/Pmo/Pmo.Series.cs b/src/m-r/Pmo/Pmo.Series.cs index b1cec36d4..0323e96a1 100644 --- a/src/m-r/Pmo/Pmo.Series.cs +++ b/src/m-r/Pmo/Pmo.Series.cs @@ -64,16 +64,14 @@ private static List CalcPmoRocEma( for (int i = 0; i < roc.Count; i++) { - RocResult r = roc[i]; + RocResult rocResult = roc[i]; - PmoResult result = new() - { - Date = r.Date - }; + PmoResult r = new(rocResult.Date); + results.Add(r); if (i + 1 > startIndex) { - result.RocEma = (r.Roc * smoothingMultiplier) + (lastRocEma * (1 - smoothingMultiplier)); + r.RocEma = (rocResult.Roc * smoothingMultiplier) + (lastRocEma * (1 - smoothingMultiplier)); } else if (i + 1 == startIndex) { @@ -84,12 +82,11 @@ private static List CalcPmoRocEma( sumRoc += d.Roc; } - result.RocEma = sumRoc / timePeriods; + r.RocEma = sumRoc / timePeriods; } - lastRocEma = result.RocEma; - result.RocEma *= 10; - results.Add(result); + lastRocEma = r.RocEma; + r.RocEma *= 10; } return results; diff --git a/src/m-r/Prs/Prs.Models.cs b/src/m-r/Prs/Prs.Models.cs index 38f8ab174..20c884fef 100644 --- a/src/m-r/Prs/Prs.Models.cs +++ b/src/m-r/Prs/Prs.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class PrsResult : ResultBase, IReusableResult { + public PrsResult(DateTime date) + { + Date = date; + } + public double? Prs { get; set; } public double? PrsSma { get; set; } public double? PrsPercent { get; set; } diff --git a/src/m-r/Prs/Prs.Series.cs b/src/m-r/Prs/Prs.Series.cs index f0b83bd59..f61cfc814 100644 --- a/src/m-r/Prs/Prs.Series.cs +++ b/src/m-r/Prs/Prs.Series.cs @@ -27,9 +27,8 @@ internal static List CalcPrs( "Date sequence does not match. Price Relative requires matching dates in provided histories."); } - PrsResult r = new() + PrsResult r = new(eDate) { - Date = eDate, Prs = (bValue == 0) ? null : (eValue / bValue) // relative strength ratio }; results.Add(r); diff --git a/src/m-r/Pvo/Pvo.Models.cs b/src/m-r/Pvo/Pvo.Models.cs index 83f5ed7a8..98e6966a8 100644 --- a/src/m-r/Pvo/Pvo.Models.cs +++ b/src/m-r/Pvo/Pvo.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class PvoResult : ResultBase, IReusableResult { + public PvoResult(DateTime date) + { + Date = date; + } + public double? Pvo { get; set; } public double? Signal { get; set; } public double? Histogram { get; set; } diff --git a/src/m-r/Pvo/Pvo.Series.cs b/src/m-r/Pvo/Pvo.Series.cs index ea9ae38ca..c1a574341 100644 --- a/src/m-r/Pvo/Pvo.Series.cs +++ b/src/m-r/Pvo/Pvo.Series.cs @@ -27,25 +27,21 @@ internal static List CalcPvo( EmaResult df = emaFast[i]; EmaResult ds = emaSlow[i]; - PvoResult result = new() - { - Date = date - }; + PvoResult r = new(date); + results.Add(r); if (i >= slowPeriods - 1) { double? pvo = (ds.Ema != 0) ? 100 * (double?)((df.Ema - ds.Ema) / ds.Ema) : null; - result.Pvo = pvo; + r.Pvo = pvo; // temp data for interim EMA of PVO (DateTime, double) diff = (date, (pvo == null) ? 0 : (double)pvo); emaDiff.Add(diff); } - - results.Add(result); } // add signal and histogram to result diff --git a/src/m-r/Renko/Renko.Models.cs b/src/m-r/Renko/Renko.Models.cs index a2afb1185..a85e45c78 100644 --- a/src/m-r/Renko/Renko.Models.cs +++ b/src/m-r/Renko/Renko.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class RenkoResult : ResultBase, IQuote { + public RenkoResult(DateTime date) + { + Date = date; + } + public decimal Open { get; set; } public decimal High { get; set; } public decimal Low { get; set; } diff --git a/src/m-r/Renko/Renko.Series.cs b/src/m-r/Renko/Renko.Series.cs index eb1db2072..8118d210e 100644 --- a/src/m-r/Renko/Renko.Series.cs +++ b/src/m-r/Renko/Renko.Series.cs @@ -68,9 +68,8 @@ internal static List CalcRenko( decimal brickClose = newBrickQty > 0 ? o + brickSize : o - brickSize; - RenkoResult result = new() + RenkoResult result = new(q.Date) { - Date = q.Date, Open = o, High = h, Low = l, diff --git a/src/m-r/Roc/Roc.Api.cs b/src/m-r/Roc/Roc.Api.cs index 38b5f0ecb..5450dd2dd 100644 --- a/src/m-r/Roc/Roc.Api.cs +++ b/src/m-r/Roc/Roc.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetRoc( int lookbackPeriods, int? smaPeriods = null) => results .ToResultTuple() - .CalcRoc(lookbackPeriods, smaPeriods); + .CalcRoc(lookbackPeriods, smaPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetRoc( diff --git a/src/m-r/Roc/Roc.Models.cs b/src/m-r/Roc/Roc.Models.cs index 3bde09ca5..2c764a9a7 100644 --- a/src/m-r/Roc/Roc.Models.cs +++ b/src/m-r/Roc/Roc.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class RocResult : ResultBase, IReusableResult { + public RocResult(DateTime date) + { + Date = date; + } + public double? Roc { get; set; } public double? RocSma { get; set; } diff --git a/src/m-r/Roc/Roc.Series.cs b/src/m-r/Roc/Roc.Series.cs index eb48489fd..d222bb2b6 100644 --- a/src/m-r/Roc/Roc.Series.cs +++ b/src/m-r/Roc/Roc.Series.cs @@ -19,21 +19,17 @@ internal static List CalcRoc( { (DateTime date, double value) = tpList[i]; - RocResult result = new() - { - Date = date - }; + RocResult r = new(date); + results.Add(r); if (i + 1 > lookbackPeriods) { (DateTime _, double backValue) = tpList[i - lookbackPeriods]; - result.Roc = (backValue == 0) ? null + r.Roc = (backValue == 0) ? null : 100d * (value - backValue) / backValue; } - results.Add(result); - // optional SMA if (smaPeriods != null && i + 1 >= lookbackPeriods + smaPeriods) { @@ -43,7 +39,7 @@ internal static List CalcRoc( sumSma += results[p].Roc; } - result.RocSma = sumSma / smaPeriods; + r.RocSma = sumSma / smaPeriods; } } diff --git a/src/m-r/RocWb/Roc.Models.cs b/src/m-r/RocWb/Roc.Models.cs index b534ee5f0..3b46dd0b5 100644 --- a/src/m-r/RocWb/Roc.Models.cs +++ b/src/m-r/RocWb/Roc.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class RocWbResult : ResultBase, IReusableResult { + public RocWbResult(DateTime date) + { + Date = date; + } + public double? Roc { get; set; } public double? RocEma { get; set; } public double? UpperBand { get; set; } diff --git a/src/m-r/RocWb/RocWb.Api.cs b/src/m-r/RocWb/RocWb.Api.cs index 538ef2cf4..a69aae2bb 100644 --- a/src/m-r/RocWb/RocWb.Api.cs +++ b/src/m-r/RocWb/RocWb.Api.cs @@ -22,7 +22,8 @@ public static IEnumerable GetRocWb( int emaPeriods, int stdDevPeriods) => results .ToResultTuple() - .CalcRocWb(lookbackPeriods, emaPeriods, stdDevPeriods); + .CalcRocWb(lookbackPeriods, emaPeriods, stdDevPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetRocWb( diff --git a/src/m-r/RocWb/RocWb.Series.cs b/src/m-r/RocWb/RocWb.Series.cs index e71f8b268..5d6715ef1 100644 --- a/src/m-r/RocWb/RocWb.Series.cs +++ b/src/m-r/RocWb/RocWb.Series.cs @@ -15,9 +15,8 @@ internal static List CalcRocWb( // initialize List results = tpList .CalcRoc(lookbackPeriods, null) - .Select(x => new RocWbResult + .Select(x => new RocWbResult(x.Date) { - Date = x.Date, Roc = x.Roc }) .ToList(); diff --git a/src/m-r/Rsi/Rsi.Api.cs b/src/m-r/Rsi/Rsi.Api.cs index d56d75c25..c730605a8 100644 --- a/src/m-r/Rsi/Rsi.Api.cs +++ b/src/m-r/Rsi/Rsi.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetRsi( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcRsi(lookbackPeriods); + .CalcRsi(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetRsi( diff --git a/src/m-r/Rsi/Rsi.Models.cs b/src/m-r/Rsi/Rsi.Models.cs index 652ca3e2b..d0d2268e6 100644 --- a/src/m-r/Rsi/Rsi.Models.cs +++ b/src/m-r/Rsi/Rsi.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class RsiResult : ResultBase, IReusableResult { + public RsiResult(DateTime date) + { + Date = date; + } + public double? Rsi { get; set; } double? IReusableResult.Value => Rsi; diff --git a/src/m-r/Rsi/Rsi.Series.cs b/src/m-r/Rsi/Rsi.Series.cs index b138cd5c1..41b1dafb2 100644 --- a/src/m-r/Rsi/Rsi.Series.cs +++ b/src/m-r/Rsi/Rsi.Series.cs @@ -34,10 +34,7 @@ internal static List CalcRsi( { (DateTime date, double value) = tpList[i]; - RsiResult r = new() - { - Date = date - }; + RsiResult r = new(date); results.Add(r); gain[i] = (value > lastValue) ? value - lastValue : 0; diff --git a/src/s-z/Slope/Slope.Api.cs b/src/s-z/Slope/Slope.Api.cs index ed3ba3eb6..a6ed0f3dc 100644 --- a/src/s-z/Slope/Slope.Api.cs +++ b/src/s-z/Slope/Slope.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetSlope( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcSlope(lookbackPeriods); + .CalcSlope(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetSlope( diff --git a/src/s-z/Slope/Slope.Models.cs b/src/s-z/Slope/Slope.Models.cs index e661aa25f..202dd32db 100644 --- a/src/s-z/Slope/Slope.Models.cs +++ b/src/s-z/Slope/Slope.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class SlopeResult : ResultBase, IReusableResult { + public SlopeResult(DateTime date) + { + Date = date; + } + public double? Slope { get; set; } public double? Intercept { get; set; } public double? StdDev { get; set; } diff --git a/src/s-z/Slope/Slope.Series.cs b/src/s-z/Slope/Slope.Series.cs index cb8e1c5e8..ba6af575c 100644 --- a/src/s-z/Slope/Slope.Series.cs +++ b/src/s-z/Slope/Slope.Series.cs @@ -20,11 +20,7 @@ internal static List CalcSlope( { (DateTime date, double _) = tpList[i]; - SlopeResult r = new() - { - Date = date - }; - + SlopeResult r = new(date); results.Add(r); // skip initialization period diff --git a/src/s-z/Sma/Sma.Analysis.cs b/src/s-z/Sma/Sma.Analysis.cs index bd617dd87..296153f98 100644 --- a/src/s-z/Sma/Sma.Analysis.cs +++ b/src/s-z/Sma/Sma.Analysis.cs @@ -10,7 +10,7 @@ internal static IEnumerable CalcSmaAnalysis( // initialize List? results = tpList .CalcSma(lookbackPeriods) - .Select(x => new SmaAnalysis { Date = x.Date, Sma = x.Sma }) + .Select(x => new SmaAnalysis(x.Date) { Sma = x.Sma }) .ToList(); // roll through quotes diff --git a/src/s-z/Sma/Sma.Api.cs b/src/s-z/Sma/Sma.Api.cs index 82e552bed..999bec338 100644 --- a/src/s-z/Sma/Sma.Api.cs +++ b/src/s-z/Sma/Sma.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetSma( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcSma(lookbackPeriods); + .CalcSma(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetSma( @@ -42,7 +43,8 @@ public static IEnumerable GetSmaAnalysis( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcSmaAnalysis(lookbackPeriods); + .CalcSmaAnalysis(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // ANALYSIS, from TUPLE public static IEnumerable GetSmaAnalysis( diff --git a/src/s-z/Sma/Sma.Models.cs b/src/s-z/Sma/Sma.Models.cs index 9fd12b007..04f6371f5 100644 --- a/src/s-z/Sma/Sma.Models.cs +++ b/src/s-z/Sma/Sma.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class SmaResult : ResultBase, IReusableResult { + public SmaResult(DateTime date) + { + Date = date; + } + public double? Sma { get; set; } double? IReusableResult.Value => Sma; @@ -11,6 +16,11 @@ public sealed class SmaResult : ResultBase, IReusableResult [Serializable] public sealed class SmaAnalysis : ResultBase, IReusableResult { + public SmaAnalysis(DateTime date) + { + Date = date; + } + public double? Sma { get; set; } // simple moving average public double? Mad { get; set; } // mean absolute deviation public double? Mse { get; set; } // mean square error diff --git a/src/s-z/Sma/Sma.Series.cs b/src/s-z/Sma/Sma.Series.cs index f9b2b1bfa..ba7ff29c1 100644 --- a/src/s-z/Sma/Sma.Series.cs +++ b/src/s-z/Sma/Sma.Series.cs @@ -18,10 +18,8 @@ internal static List CalcSma( { (DateTime date, double _) = tpList[i]; - SmaResult result = new() - { - Date = date - }; + SmaResult result = new(date); + results.Add(result); if (i + 1 >= lookbackPeriods) { @@ -34,8 +32,6 @@ internal static List CalcSma( result.Sma = sumSma / lookbackPeriods; } - - results.Add(result); } return results; diff --git a/src/s-z/Smi/Smi.Models.cs b/src/s-z/Smi/Smi.Models.cs index 9360b1514..d0fc2018e 100644 --- a/src/s-z/Smi/Smi.Models.cs +++ b/src/s-z/Smi/Smi.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class SmiResult : ResultBase, IReusableResult { + public SmiResult(DateTime date) + { + Date = date; + } + public double? Smi { get; set; } public double? Signal { get; set; } diff --git a/src/s-z/Smi/Smi.Series.cs b/src/s-z/Smi/Smi.Series.cs index 1762d14f2..7eb6f3148 100644 --- a/src/s-z/Smi/Smi.Series.cs +++ b/src/s-z/Smi/Smi.Series.cs @@ -36,10 +36,8 @@ internal static List CalcSmi( { QuoteD q = qdList[i]; - SmiResult r = new() - { - Date = q.Date - }; + SmiResult r = new(q.Date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -102,8 +100,6 @@ internal static List CalcSmi( lastHlEma2 = hlEma2; lastSignal = signal; } - - results.Add(r); } return results; diff --git a/src/s-z/Smma/Smma.Api.cs b/src/s-z/Smma/Smma.Api.cs index ef7ee8e31..61e92572c 100644 --- a/src/s-z/Smma/Smma.Api.cs +++ b/src/s-z/Smma/Smma.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetSmma( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcSmma(lookbackPeriods); + .CalcSmma(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetSmma( diff --git a/src/s-z/Smma/Smma.Models.cs b/src/s-z/Smma/Smma.Models.cs index 0ca5e734d..d685792b4 100644 --- a/src/s-z/Smma/Smma.Models.cs +++ b/src/s-z/Smma/Smma.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class SmmaResult : ResultBase, IReusableResult { + public SmmaResult(DateTime date) + { + Date = date; + } + public double? Smma { get; set; } double? IReusableResult.Value => Smma; diff --git a/src/s-z/Smma/Smma.Series.cs b/src/s-z/Smma/Smma.Series.cs index 5c6895e93..10ed19e32 100644 --- a/src/s-z/Smma/Smma.Series.cs +++ b/src/s-z/Smma/Smma.Series.cs @@ -22,16 +22,14 @@ internal static List CalcSmma( double smma = double.NaN; (DateTime date, double value) = tpList[i]; - SmmaResult result = new() - { - Date = date - }; + SmmaResult r = new(date); + results.Add(r); // calculate SMMA if (i + 1 > lookbackPeriods) { smma = ((prevValue * (lookbackPeriods - 1)) + value) / lookbackPeriods; - result.Smma = smma; + r.Smma = smma; } // first SMMA calculated as simple SMA @@ -45,11 +43,10 @@ internal static List CalcSmma( } smma = sumClose / lookbackPeriods; - result.Smma = smma; + r.Smma = smma; } prevValue = smma; - results.Add(result); } return results; diff --git a/src/s-z/StarcBands/StarcBands.Models.cs b/src/s-z/StarcBands/StarcBands.Models.cs index e4ff4bcf1..09c275abf 100644 --- a/src/s-z/StarcBands/StarcBands.Models.cs +++ b/src/s-z/StarcBands/StarcBands.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class StarcBandsResult : ResultBase { + public StarcBandsResult(DateTime date) + { + Date = date; + } + public double? UpperBand { get; set; } public double? Centerline { get; set; } public double? LowerBand { get; set; } diff --git a/src/s-z/StarcBands/StarcBands.Series.cs b/src/s-z/StarcBands/StarcBands.Series.cs index 5605b2529..6c8a1c248 100644 --- a/src/s-z/StarcBands/StarcBands.Series.cs +++ b/src/s-z/StarcBands/StarcBands.Series.cs @@ -18,9 +18,8 @@ internal static List CalcStarcBands( List results = qdList .ToBasicTuple(CandlePart.Close) .CalcSma(smaPeriods) - .Select(x => new StarcBandsResult + .Select(x => new StarcBandsResult(x.Date) { - Date = x.Date, Centerline = x.Sma }) .ToList(); diff --git a/src/s-z/Stc/Stc.Api.cs b/src/s-z/Stc/Stc.Api.cs index 0dadd4870..80563c2b1 100644 --- a/src/s-z/Stc/Stc.Api.cs +++ b/src/s-z/Stc/Stc.Api.cs @@ -22,7 +22,8 @@ public static IEnumerable GetStc( int fastPeriods = 23, int slowPeriods = 50) => results .ToResultTuple() - .CalcStc(cyclePeriods, fastPeriods, slowPeriods); + .CalcStc(cyclePeriods, fastPeriods, slowPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetStc( diff --git a/src/s-z/Stc/Stc.Models.cs b/src/s-z/Stc/Stc.Models.cs index cb0c13501..51a781e9c 100644 --- a/src/s-z/Stc/Stc.Models.cs +++ b/src/s-z/Stc/Stc.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class StcResult : ResultBase, IReusableResult { + public StcResult(DateTime date) + { + Date = date; + } + public double? Stc { get; set; } double? IReusableResult.Value => Stc; diff --git a/src/s-z/Stc/Stc.Series.cs b/src/s-z/Stc/Stc.Series.cs index 671526e79..e54ad05e3 100644 --- a/src/s-z/Stc/Stc.Series.cs +++ b/src/s-z/Stc/Stc.Series.cs @@ -22,7 +22,7 @@ internal static List CalcStc( for (int i = 0; i < initPeriods; i++) { (DateTime date, double _) = tpList[i]; - results.Add(new StcResult() { Date = date }); + results.Add(new StcResult(date)); } // get stochastic of macd @@ -44,7 +44,7 @@ internal static List CalcStc( for (int i = 0; i < stochMacd.Count; i++) { StochResult r = stochMacd[i]; - results.Add(new StcResult { Date = r.Date, Stc = r.Oscillator }); + results.Add(new StcResult(r.Date) { Stc = r.Oscillator }); } return results; diff --git a/src/s-z/StdDev/StdDev.Api.cs b/src/s-z/StdDev/StdDev.Api.cs index 58f0ad2b3..9ae27e84f 100644 --- a/src/s-z/StdDev/StdDev.Api.cs +++ b/src/s-z/StdDev/StdDev.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetStdDev( int lookbackPeriods, int? smaPeriods = null) => results .ToResultTuple() - .CalcStdDev(lookbackPeriods, smaPeriods); + .CalcStdDev(lookbackPeriods, smaPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetStdDev( diff --git a/src/s-z/StdDev/StdDev.Models.cs b/src/s-z/StdDev/StdDev.Models.cs index 91a9f209c..78768abfd 100644 --- a/src/s-z/StdDev/StdDev.Models.cs +++ b/src/s-z/StdDev/StdDev.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class StdDevResult : ResultBase, IReusableResult { + public StdDevResult(DateTime date) + { + Date = date; + } + public double? StdDev { get; set; } public double? Mean { get; set; } public double? ZScore { get; set; } diff --git a/src/s-z/StdDev/StdDev.Series.cs b/src/s-z/StdDev/StdDev.Series.cs index 9a460962d..66684ef1c 100644 --- a/src/s-z/StdDev/StdDev.Series.cs +++ b/src/s-z/StdDev/StdDev.Series.cs @@ -20,10 +20,8 @@ internal static List CalcStdDev( { (DateTime date, double value) = tpList[i]; - StdDevResult result = new() - { - Date = date, - }; + StdDevResult r = new(date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -41,15 +39,13 @@ internal static List CalcStdDev( double periodAvg = sum / lookbackPeriods; - result.StdDev = periodValues.StdDev(); - result.Mean = periodAvg; + r.StdDev = periodValues.StdDev(); + r.Mean = periodAvg; - result.ZScore = (result.StdDev == 0) ? double.NaN - : (value - periodAvg) / result.StdDev; + r.ZScore = (r.StdDev == 0) ? double.NaN + : (value - periodAvg) / r.StdDev; } - results.Add(result); - // optional SMA if (smaPeriods != null && i >= lookbackPeriods + smaPeriods - 2) { @@ -59,7 +55,7 @@ internal static List CalcStdDev( sumSma += results[p].StdDev; } - result.StdDevSma = sumSma / smaPeriods; + r.StdDevSma = sumSma / smaPeriods; } } diff --git a/src/s-z/StdDevChannels/StdDevChannels.Api.cs b/src/s-z/StdDevChannels/StdDevChannels.Api.cs index bf7a53102..ca51f3308 100644 --- a/src/s-z/StdDevChannels/StdDevChannels.Api.cs +++ b/src/s-z/StdDevChannels/StdDevChannels.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetStdDevChannels( int? lookbackPeriods = 20, double standardDeviations = 2) => results .ToResultTuple() - .CalcStdDevChannels(lookbackPeriods, standardDeviations); + .CalcStdDevChannels(lookbackPeriods, standardDeviations) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetStdDevChannels( diff --git a/src/s-z/StdDevChannels/StdDevChannels.Models.cs b/src/s-z/StdDevChannels/StdDevChannels.Models.cs index 62fa2e122..00da6a900 100644 --- a/src/s-z/StdDevChannels/StdDevChannels.Models.cs +++ b/src/s-z/StdDevChannels/StdDevChannels.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class StdDevChannelsResult : ResultBase { + public StdDevChannelsResult(DateTime date) + { + Date = date; + } + public double? Centerline { get; set; } public double? UpperChannel { get; set; } public double? LowerChannel { get; set; } diff --git a/src/s-z/StdDevChannels/StdDevChannels.Series.cs b/src/s-z/StdDevChannels/StdDevChannels.Series.cs index 031e48c0e..f6727bb87 100644 --- a/src/s-z/StdDevChannels/StdDevChannels.Series.cs +++ b/src/s-z/StdDevChannels/StdDevChannels.Series.cs @@ -23,7 +23,7 @@ internal static List CalcStdDevChannels( int length = slopeResults.Count; List results = slopeResults - .Select(x => new StdDevChannelsResult { Date = x.Date }) + .Select(x => new StdDevChannelsResult(x.Date)) .ToList(); // roll through quotes in reverse diff --git a/src/s-z/Stoch/Stoch.Models.cs b/src/s-z/Stoch/Stoch.Models.cs index 4e2be1417..c1099e1df 100644 --- a/src/s-z/Stoch/Stoch.Models.cs +++ b/src/s-z/Stoch/Stoch.Models.cs @@ -5,6 +5,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class StochResult : ResultBase, IReusableResult { + public StochResult(DateTime date) + { + Date = date; + } + public double? Oscillator { get; set; } public double? Signal { get; set; } public double? PercentJ { get; set; } diff --git a/src/s-z/Stoch/Stoch.Series.cs b/src/s-z/Stoch/Stoch.Series.cs index 4fc657ef1..d3992a8c3 100644 --- a/src/s-z/Stoch/Stoch.Series.cs +++ b/src/s-z/Stoch/Stoch.Series.cs @@ -26,10 +26,8 @@ internal static List CalcStoch( { QuoteD q = qdList[i]; - StochResult result = new() - { - Date = q.Date - }; + StochResult r = new(q.Date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -51,12 +49,10 @@ internal static List CalcStoch( } } - result.Oscillator = lowLow != highHigh + r.Oscillator = lowLow != highHigh ? 100 * (q.Close - lowLow) / (highHigh - lowLow) : 0; } - - results.Add(result); } // smooth the oscillator diff --git a/src/s-z/StochRsi/StochRsi.Models.cs b/src/s-z/StochRsi/StochRsi.Models.cs index 6db2b62d9..96c2b4f04 100644 --- a/src/s-z/StochRsi/StochRsi.Models.cs +++ b/src/s-z/StochRsi/StochRsi.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class StochRsiResult : ResultBase, IReusableResult { + public StochRsiResult(DateTime date) + { + Date = date; + } + public double? StochRsi { get; set; } public double? Signal { get; set; } diff --git a/src/s-z/StochRsi/StochRsi.Series.cs b/src/s-z/StochRsi/StochRsi.Series.cs index 910ac8ca7..ecf554654 100644 --- a/src/s-z/StochRsi/StochRsi.Series.cs +++ b/src/s-z/StochRsi/StochRsi.Series.cs @@ -23,7 +23,7 @@ internal static List CalcStochRsi( for (int i = 0; i < initPeriods; i++) { (DateTime date, double _) = tpList[i]; - results.Add(new StochRsiResult() { Date = date }); + results.Add(new StochRsiResult(date)); } // get Stochastic of RSI @@ -50,9 +50,8 @@ internal static List CalcStochRsi( for (int i = rsiPeriods + stochPeriods - 1; i < length; i++) { StochResult r = stoResults[i - rsiPeriods]; - results.Add(new StochRsiResult + results.Add(new StochRsiResult(r.Date) { - Date = r.Date, StochRsi = r.Oscillator, Signal = r.Signal }); diff --git a/src/s-z/SuperTrend/SuperTrend.Models.cs b/src/s-z/SuperTrend/SuperTrend.Models.cs index 919db0e07..cd8063612 100644 --- a/src/s-z/SuperTrend/SuperTrend.Models.cs +++ b/src/s-z/SuperTrend/SuperTrend.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class SuperTrendResult : ResultBase { + public SuperTrendResult(DateTime date) + { + Date = date; + } + public decimal? SuperTrend { get; set; } public decimal? UpperBand { get; set; } public decimal? LowerBand { get; set; } diff --git a/src/s-z/SuperTrend/SuperTrend.Series.cs b/src/s-z/SuperTrend/SuperTrend.Series.cs index 0e92ef7ca..22de2b8d3 100644 --- a/src/s-z/SuperTrend/SuperTrend.Series.cs +++ b/src/s-z/SuperTrend/SuperTrend.Series.cs @@ -24,10 +24,8 @@ internal static List CalcSuperTrend( { QuoteD q = qdList[i]; - SuperTrendResult r = new() - { - Date = q.Date - }; + SuperTrendResult r = new(q.Date); + results.Add(r); if (i >= lookbackPeriods - 1) { @@ -74,8 +72,6 @@ internal static List CalcSuperTrend( isBullish = true; } } - - results.Add(r); } return results; diff --git a/src/s-z/T3/T3.Api.cs b/src/s-z/T3/T3.Api.cs index b98330022..25be8b7e4 100644 --- a/src/s-z/T3/T3.Api.cs +++ b/src/s-z/T3/T3.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetT3( int lookbackPeriods = 5, double volumeFactor = 0.7) => results .ToResultTuple() - .CalcT3(lookbackPeriods, volumeFactor); + .CalcT3(lookbackPeriods, volumeFactor) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetT3( diff --git a/src/s-z/T3/T3.Models.cs b/src/s-z/T3/T3.Models.cs index e8a142a12..be3814a92 100644 --- a/src/s-z/T3/T3.Models.cs +++ b/src/s-z/T3/T3.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class T3Result : ResultBase, IReusableResult { + public T3Result(DateTime date) + { + Date = date; + } + public double? T3 { get; set; } double? IReusableResult.Value => T3; diff --git a/src/s-z/T3/T3.Series.cs b/src/s-z/T3/T3.Series.cs index 3d35aaa1a..02a19d403 100644 --- a/src/s-z/T3/T3.Series.cs +++ b/src/s-z/T3/T3.Series.cs @@ -29,10 +29,8 @@ internal static List CalcT3( for (int i = 0; i < length; i++) { (DateTime date, double value) = tpList[i]; - T3Result r = new() - { - Date = date - }; + T3Result r = new(date); + results.Add(r); // first smoothing if (i > lookbackPeriods - 1) @@ -141,8 +139,6 @@ internal static List CalcT3( sum2 = e1 = sum1 / lookbackPeriods; } } - - results.Add(r); } return results; diff --git a/src/s-z/Tema/Tema.Api.cs b/src/s-z/Tema/Tema.Api.cs index 959a77ec2..6353e3743 100644 --- a/src/s-z/Tema/Tema.Api.cs +++ b/src/s-z/Tema/Tema.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetTema( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcTema(lookbackPeriods); + .CalcTema(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetTema( diff --git a/src/s-z/Tema/Tema.Models.cs b/src/s-z/Tema/Tema.Models.cs index 2adbf5dca..145a7548a 100644 --- a/src/s-z/Tema/Tema.Models.cs +++ b/src/s-z/Tema/Tema.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class TemaResult : ResultBase, IReusableResult { + public TemaResult(DateTime date) + { + Date = date; + } + public double? Tema { get; set; } double? IReusableResult.Value => Tema; diff --git a/src/s-z/Tema/Tema.Series.cs b/src/s-z/Tema/Tema.Series.cs index 43b97f150..c10101adf 100644 --- a/src/s-z/Tema/Tema.Series.cs +++ b/src/s-z/Tema/Tema.Series.cs @@ -35,10 +35,8 @@ internal static List CalcTema( { (DateTime date, double value) = tpList[i]; - TemaResult result = new() - { - Date = date - }; + TemaResult r = new(date); + results.Add(r); if (i > lookbackPeriods - 1) { @@ -46,7 +44,7 @@ internal static List CalcTema( double? ema2 = lastEma2 + (k * (ema1 - lastEma2)); double? ema3 = lastEma3 + (k * (ema2 - lastEma3)); - result.Tema = (3 * ema1) - (3 * ema2) + ema3; + r.Tema = (3 * ema1) - (3 * ema2) + ema3; lastEma1 = ema1; lastEma2 = ema2; @@ -54,10 +52,8 @@ internal static List CalcTema( } else if (i == lookbackPeriods - 1) { - result.Tema = (3 * lastEma1) - (3 * lastEma2) + lastEma3; + r.Tema = (3 * lastEma1) - (3 * lastEma2) + lastEma3; } - - results.Add(result); } return results; diff --git a/src/s-z/Trix/Trix.Api.cs b/src/s-z/Trix/Trix.Api.cs index 98ace0f79..58b88f0c3 100644 --- a/src/s-z/Trix/Trix.Api.cs +++ b/src/s-z/Trix/Trix.Api.cs @@ -20,7 +20,8 @@ public static IEnumerable GetTrix( int lookbackPeriods, int? signalPeriods = null) => results .ToResultTuple() - .CalcTrix(lookbackPeriods, signalPeriods); + .CalcTrix(lookbackPeriods, signalPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetTrix( diff --git a/src/s-z/Trix/Trix.Models.cs b/src/s-z/Trix/Trix.Models.cs index c4e15c29f..de69555be 100644 --- a/src/s-z/Trix/Trix.Models.cs +++ b/src/s-z/Trix/Trix.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class TrixResult : ResultBase, IReusableResult { + public TrixResult(DateTime date) + { + Date = date; + } + public double? Ema3 { get; set; } public double? Trix { get; set; } public double? Signal { get; set; } diff --git a/src/s-z/Trix/Trix.Series.cs b/src/s-z/Trix/Trix.Series.cs index 427d3a15c..bbeb0ea59 100644 --- a/src/s-z/Trix/Trix.Series.cs +++ b/src/s-z/Trix/Trix.Series.cs @@ -34,10 +34,8 @@ internal static List CalcTrix( { (DateTime date, double value) = tpList[i]; - TrixResult result = new() - { - Date = date - }; + TrixResult r = new(date); + results.Add(r); if (i >= lookbackPeriods) { @@ -45,16 +43,14 @@ internal static List CalcTrix( double? ema2 = lastEma2 + (k * (ema1 - lastEma2)); double? ema3 = lastEma3 + (k * (ema2 - lastEma3)); - result.Ema3 = ema3; - result.Trix = 100 * (ema3 - lastEma3) / lastEma3; + r.Ema3 = ema3; + r.Trix = 100 * (ema3 - lastEma3) / lastEma3; lastEma1 = ema1; lastEma2 = ema2; lastEma3 = ema3; } - results.Add(result); - // optional SMA signal CalcTrixSignal(signalPeriods, i, lookbackPeriods, results); } diff --git a/src/s-z/Tsi/Tsi.Api.cs b/src/s-z/Tsi/Tsi.Api.cs index a39776df6..5507f7859 100644 --- a/src/s-z/Tsi/Tsi.Api.cs +++ b/src/s-z/Tsi/Tsi.Api.cs @@ -22,7 +22,8 @@ public static IEnumerable GetTsi( int smoothPeriods = 13, int signalPeriods = 7) => results .ToResultTuple() - .CalcTsi(lookbackPeriods, smoothPeriods, signalPeriods); + .CalcTsi(lookbackPeriods, smoothPeriods, signalPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetTsi( diff --git a/src/s-z/Tsi/Tsi.Models.cs b/src/s-z/Tsi/Tsi.Models.cs index 74629e38c..c01f12784 100644 --- a/src/s-z/Tsi/Tsi.Models.cs +++ b/src/s-z/Tsi/Tsi.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class TsiResult : ResultBase, IReusableResult { + public TsiResult(DateTime date) + { + Date = date; + } + public double? Tsi { get; set; } public double? Signal { get; set; } diff --git a/src/s-z/Tsi/Tsi.Series.cs b/src/s-z/Tsi/Tsi.Series.cs index bcb0f7f2c..7d255aacf 100644 --- a/src/s-z/Tsi/Tsi.Series.cs +++ b/src/s-z/Tsi/Tsi.Series.cs @@ -38,10 +38,7 @@ internal static List CalcTsi( { (DateTime date, double value) = tpList[i]; - TsiResult r = new() - { - Date = date - }; + TsiResult r = new(date); results.Add(r); // skip first period diff --git a/src/s-z/UlcerIndex/UlcerIndex.Api.cs b/src/s-z/UlcerIndex/UlcerIndex.Api.cs index 35c625948..57208577e 100644 --- a/src/s-z/UlcerIndex/UlcerIndex.Api.cs +++ b/src/s-z/UlcerIndex/UlcerIndex.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetUlcerIndex( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcUlcerIndex(lookbackPeriods); + .CalcUlcerIndex(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetUlcerIndex( diff --git a/src/s-z/UlcerIndex/UlcerIndex.Models.cs b/src/s-z/UlcerIndex/UlcerIndex.Models.cs index eee50091a..81064ae3b 100644 --- a/src/s-z/UlcerIndex/UlcerIndex.Models.cs +++ b/src/s-z/UlcerIndex/UlcerIndex.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class UlcerIndexResult : ResultBase, IReusableResult { + public UlcerIndexResult(DateTime date) + { + Date = date; + } + public double? UI { get; set; } // ulcer index double? IReusableResult.Value => UI; diff --git a/src/s-z/UlcerIndex/UlcerIndex.Series.cs b/src/s-z/UlcerIndex/UlcerIndex.Series.cs index 2ec42b9b6..54cb789ac 100644 --- a/src/s-z/UlcerIndex/UlcerIndex.Series.cs +++ b/src/s-z/UlcerIndex/UlcerIndex.Series.cs @@ -18,10 +18,8 @@ internal static List CalcUlcerIndex( { (DateTime date, double _) = tpList[i]; - UlcerIndexResult result = new() - { - Date = date - }; + UlcerIndexResult r = new(date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -47,10 +45,8 @@ internal static List CalcUlcerIndex( sumSquared += percentDrawdown * percentDrawdown; } - result.UI = Math.Sqrt(sumSquared / lookbackPeriods); + r.UI = Math.Sqrt(sumSquared / lookbackPeriods); } - - results.Add(result); } return results; diff --git a/src/s-z/Ultimate/Ultimate.Models.cs b/src/s-z/Ultimate/Ultimate.Models.cs index e054a11b4..4238d731a 100644 --- a/src/s-z/Ultimate/Ultimate.Models.cs +++ b/src/s-z/Ultimate/Ultimate.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class UltimateResult : ResultBase, IReusableResult { + public UltimateResult(DateTime date) + { + Date = date; + } + public double? Ultimate { get; set; } double? IReusableResult.Value => Ultimate; diff --git a/src/s-z/Ultimate/Ultimate.Series.cs b/src/s-z/Ultimate/Ultimate.Series.cs index 06a4a708e..a4a7828ba 100644 --- a/src/s-z/Ultimate/Ultimate.Series.cs +++ b/src/s-z/Ultimate/Ultimate.Series.cs @@ -25,10 +25,7 @@ internal static List CalcUltimate( { QuoteD q = qdList[i]; - UltimateResult r = new() - { - Date = q.Date - }; + UltimateResult r = new(q.Date); results.Add(r); if (i > 0) diff --git a/src/s-z/VolatilityStop/VolatilityStop.Models.cs b/src/s-z/VolatilityStop/VolatilityStop.Models.cs index 36495b770..1382b24e4 100644 --- a/src/s-z/VolatilityStop/VolatilityStop.Models.cs +++ b/src/s-z/VolatilityStop/VolatilityStop.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class VolatilityStopResult : ResultBase, IReusableResult { + public VolatilityStopResult(DateTime date) + { + Date = date; + } + public double? Sar { get; set; } public bool? IsStop { get; set; } diff --git a/src/s-z/VolatilityStop/VolatilityStop.Series.cs b/src/s-z/VolatilityStop/VolatilityStop.Series.cs index 793d7ace6..f434f5d97 100644 --- a/src/s-z/VolatilityStop/VolatilityStop.Series.cs +++ b/src/s-z/VolatilityStop/VolatilityStop.Series.cs @@ -35,7 +35,7 @@ internal static List CalcVolatilityStop( { (DateTime date, double value) = tpList[i]; sic = isLong ? Math.Max(sic, value) : Math.Min(sic, value); - results.Add(new VolatilityStopResult() { Date = date }); + results.Add(new VolatilityStopResult(date)); } // roll through quotes @@ -46,10 +46,8 @@ internal static List CalcVolatilityStop( // average true range × multiplier constant double? arc = atrList[i - 1].Atr * multiplier; - VolatilityStopResult r = new() + VolatilityStopResult r = new(date) { - Date = date, - // stop and reverse threshold Sar = isLong ? sic - arc : sic + arc }; diff --git a/src/s-z/Vortex/Vortex.Models.cs b/src/s-z/Vortex/Vortex.Models.cs index a041a39e2..1d46cce2b 100644 --- a/src/s-z/Vortex/Vortex.Models.cs +++ b/src/s-z/Vortex/Vortex.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class VortexResult : ResultBase { + public VortexResult(DateTime date) + { + Date = date; + } + public double? Pvi { get; set; } public double? Nvi { get; set; } } diff --git a/src/s-z/Vortex/Vortex.Series.cs b/src/s-z/Vortex/Vortex.Series.cs index 70b2858b8..c2eab9e30 100644 --- a/src/s-z/Vortex/Vortex.Series.cs +++ b/src/s-z/Vortex/Vortex.Series.cs @@ -27,15 +27,12 @@ internal static List CalcVortex( { QuoteD q = qdList[i]; - VortexResult result = new() - { - Date = q.Date - }; + VortexResult r = new(q.Date); + results.Add(r); // skip first period if (i == 0) { - results.Add(result); prevHigh = q.High; prevLow = q.Low; prevClose = q.Close; @@ -70,12 +67,10 @@ internal static List CalcVortex( if (sumTr is not 0) { - result.Pvi = sumPvm / sumTr; - result.Nvi = sumNvm / sumTr; + r.Pvi = sumPvm / sumTr; + r.Nvi = sumNvm / sumTr; } } - - results.Add(result); } return results; diff --git a/src/s-z/Vwap/Vwap.Models.cs b/src/s-z/Vwap/Vwap.Models.cs index 14e392007..b6df0b221 100644 --- a/src/s-z/Vwap/Vwap.Models.cs +++ b/src/s-z/Vwap/Vwap.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class VwapResult : ResultBase, IReusableResult { + public VwapResult(DateTime date) + { + Date = date; + } + public double? Vwap { get; set; } double? IReusableResult.Value => Vwap; diff --git a/src/s-z/Vwap/Vwap.Series.cs b/src/s-z/Vwap/Vwap.Series.cs index 1d693123b..36857f3c2 100644 --- a/src/s-z/Vwap/Vwap.Series.cs +++ b/src/s-z/Vwap/Vwap.Series.cs @@ -33,10 +33,8 @@ internal static List CalcVwap( double? l = q.Low; double? c = q.Close; - VwapResult r = new() - { - Date = q.Date - }; + VwapResult r = new(q.Date); + results.Add(r); if (q.Date >= startDate) { @@ -45,8 +43,6 @@ internal static List CalcVwap( r.Vwap = (cumVolume != 0) ? (cumVolumeTP / cumVolume) : null; } - - results.Add(r); } return results; diff --git a/src/s-z/Vwma/Vwma.Models.cs b/src/s-z/Vwma/Vwma.Models.cs index 3533c0b68..45774b6c4 100644 --- a/src/s-z/Vwma/Vwma.Models.cs +++ b/src/s-z/Vwma/Vwma.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class VwmaResult : ResultBase, IReusableResult { + public VwmaResult(DateTime date) + { + Date = date; + } + public double? Vwma { get; set; } double? IReusableResult.Value => Vwma; diff --git a/src/s-z/Vwma/Vwma.Series.cs b/src/s-z/Vwma/Vwma.Series.cs index 89e4a3643..632c13098 100644 --- a/src/s-z/Vwma/Vwma.Series.cs +++ b/src/s-z/Vwma/Vwma.Series.cs @@ -19,10 +19,8 @@ internal static List CalcVwma( { QuoteD q = qdList[i]; - VwmaResult result = new() - { - Date = q.Date - }; + VwmaResult r = new(q.Date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -38,10 +36,8 @@ internal static List CalcVwma( sumVl += v; } - result.Vwma = sumVl != 0 ? (sumCl / sumVl) : null; + r.Vwma = sumVl != 0 ? (sumCl / sumVl) : null; } - - results.Add(result); } return results; diff --git a/src/s-z/WilliamsR/WilliamsR.Models.cs b/src/s-z/WilliamsR/WilliamsR.Models.cs index 9d3a47b1a..a00b47754 100644 --- a/src/s-z/WilliamsR/WilliamsR.Models.cs +++ b/src/s-z/WilliamsR/WilliamsR.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class WilliamsResult : ResultBase, IReusableResult { + public WilliamsResult(DateTime date) + { + Date = date; + } + public double? WilliamsR { get; set; } double? IReusableResult.Value => WilliamsR; diff --git a/src/s-z/WilliamsR/WilliamsR.Series.cs b/src/s-z/WilliamsR/WilliamsR.Series.cs index 0df46e390..d6e1d13b2 100644 --- a/src/s-z/WilliamsR/WilliamsR.Series.cs +++ b/src/s-z/WilliamsR/WilliamsR.Series.cs @@ -12,9 +12,8 @@ internal static List CalcWilliamsR( // convert Fast Stochastic to William %R return qdList.CalcStoch(lookbackPeriods, 1, 1, 3, 2, MaType.SMA) - .Select(s => new WilliamsResult + .Select(s => new WilliamsResult(s.Date) { - Date = s.Date, WilliamsR = s.Oscillator - 100 }) .ToList(); diff --git a/src/s-z/Wma/Wma.Api.cs b/src/s-z/Wma/Wma.Api.cs index 82e5eca33..063bce5a4 100644 --- a/src/s-z/Wma/Wma.Api.cs +++ b/src/s-z/Wma/Wma.Api.cs @@ -18,7 +18,8 @@ public static IEnumerable GetWma( this IEnumerable results, int lookbackPeriods) => results .ToResultTuple() - .CalcWma(lookbackPeriods); + .CalcWma(lookbackPeriods) + .SyncIndex(results, SyncType.Prepend); // SERIES, from TUPLE public static IEnumerable GetWma( diff --git a/src/s-z/Wma/Wma.Models.cs b/src/s-z/Wma/Wma.Models.cs index a061e6ac5..551798d04 100644 --- a/src/s-z/Wma/Wma.Models.cs +++ b/src/s-z/Wma/Wma.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class WmaResult : ResultBase, IReusableResult { + public WmaResult(DateTime date) + { + Date = date; + } + public double? Wma { get; set; } double? IReusableResult.Value => Wma; diff --git a/src/s-z/Wma/Wma.Series.cs b/src/s-z/Wma/Wma.Series.cs index 226e747ad..cb7e9b621 100644 --- a/src/s-z/Wma/Wma.Series.cs +++ b/src/s-z/Wma/Wma.Series.cs @@ -19,10 +19,8 @@ internal static List CalcWma( { (DateTime date, double _) = tpList[i]; - WmaResult result = new() - { - Date = date - }; + WmaResult r = new(date); + results.Add(r); if (i + 1 >= lookbackPeriods) { @@ -33,10 +31,8 @@ internal static List CalcWma( wma += pValue * (lookbackPeriods - (i + 1 - p - 1)) / divisor; } - result.Wma = wma; + r.Wma = wma; } - - results.Add(result); } return results; diff --git a/src/s-z/ZigZag/ZigZag.Models.cs b/src/s-z/ZigZag/ZigZag.Models.cs index 33690caba..339b67d79 100644 --- a/src/s-z/ZigZag/ZigZag.Models.cs +++ b/src/s-z/ZigZag/ZigZag.Models.cs @@ -3,6 +3,11 @@ namespace Skender.Stock.Indicators; [Serializable] public sealed class ZigZagResult : ResultBase, IReusableResult { + public ZigZagResult(DateTime date) + { + Date = date; + } + public decimal? ZigZag { get; set; } // zig zag line public string? PointType { get; set; } // indicates a specific point and type e.g. H or L public decimal? RetraceHigh { get; set; } // zig zag retrace high line diff --git a/src/s-z/ZigZag/ZigZag.Series.cs b/src/s-z/ZigZag/ZigZag.Series.cs index 8963eacfc..4d84645f2 100644 --- a/src/s-z/ZigZag/ZigZag.Series.cs +++ b/src/s-z/ZigZag/ZigZag.Series.cs @@ -84,10 +84,7 @@ internal static List CalcZigZag( } // add first point to results - ZigZagResult firstResult = new() - { - Date = q0.Date - }; + ZigZagResult firstResult = new(q0.Date); results.Add(firstResult); // find and draw lines @@ -196,9 +193,8 @@ private static void DrawZigZagLine(List results, List(() => + quotes.GetAdx(14).RemoveWarmupPeriods(-1)); } [TestMethod] @@ -42,10 +46,86 @@ public void RemoveTooMany() } [TestMethod] - public void RemoveException() + public void SyncIndex() { - // bad remove period - Assert.ThrowsException(() => - quotes.GetAdx(14).RemoveWarmupPeriods(-1)); + // baseline for comparison + List baseline = new() + { + new SmaResult(DateTime.Parse("1/1/2000", EnglishCulture)) { Sma = null }, + new SmaResult(DateTime.Parse("1/2/2000", EnglishCulture)) { Sma = null }, + new SmaResult(DateTime.Parse("1/3/2000", EnglishCulture)) { Sma = 3 }, + new SmaResult(DateTime.Parse("1/4/2000", EnglishCulture)) { Sma = 4 }, + new SmaResult(DateTime.Parse("1/5/2000", EnglishCulture)) { Sma = 5 }, + new SmaResult(DateTime.Parse("1/6/2000", EnglishCulture)) { Sma = 6 }, + new SmaResult(DateTime.Parse("1/7/2000", EnglishCulture)) { Sma = 7 }, + new SmaResult(DateTime.Parse("1/8/2000", EnglishCulture)) { Sma = double.NaN }, + new SmaResult(DateTime.Parse("1/9/2000", EnglishCulture)) { Sma = null }, + }; + + // to be synced + List eval = new() + { + new EmaResult(DateTime.Parse("1/3/2000", EnglishCulture)) { Ema = 3 }, + new EmaResult(DateTime.Parse("1/4/2000", EnglishCulture)) { Ema = 4 }, + new EmaResult(DateTime.Parse("1/5/2000", EnglishCulture)) { Ema = 5 }, + new EmaResult(DateTime.Parse("1/6/2000", EnglishCulture)) { Ema = 6 }, + new EmaResult(DateTime.Parse("1/7/2000", EnglishCulture)) { Ema = 7 }, + new EmaResult(DateTime.Parse("1/9/2000", EnglishCulture)) { Ema = double.NaN }, + new EmaResult(DateTime.Parse("1/10/2000", EnglishCulture)) { Ema = null }, + }; + + // prepend option + List prepend = eval.SyncIndex(baseline, SyncType.Prepend).ToList(); + + Assert.AreEqual(9, prepend.Count); + Assert.AreEqual(3, prepend.Where(x => x.Ema is null).Count()); + + for (int i = 0; i < 6; i++) + { + SmaResult b = baseline[i]; + EmaResult r = prepend[i]; + + Assert.AreEqual(b.Date, r.Date); + } + + // append option + List append = eval.SyncIndex(baseline, SyncType.AppendOnly).ToList(); + + Assert.AreEqual(10, append.Count); + Assert.AreEqual(4, append.Where(x => x.Ema is null).Count()); + + for (int i = 0; i < 8; i++) + { + SmaResult b = baseline[i]; + EmaResult r = append[i]; + + // Console.WriteLine($"{b.Date:d} {r.Date:d} {r.Ema}"); + + Assert.AreEqual(b.Date, r.Date); + } + + // remove option + List remove = eval.SyncIndex(baseline, SyncType.RemoveOnly).ToList(); + + Assert.AreEqual(6, remove.Count); + Assert.AreEqual(0, remove.Where(x => x.Ema is null).Count()); + Assert.AreEqual(0, remove.Where(x => + x.Date == DateTime.Parse("1/10/2000", EnglishCulture)).Count()); + + // full option + List fullmatch = eval.SyncIndex(baseline, SyncType.FullMatch).ToList(); + + Assert.AreEqual(9, fullmatch.Count); + Assert.AreEqual(3, fullmatch.Where(x => x.Ema is null).Count()); + Assert.AreEqual(0, fullmatch.Where(x => + x.Date == DateTime.Parse("1/10/2000", EnglishCulture)).Count()); + + for (int i = 0; i < baseline.Count; i++) + { + SmaResult b = baseline[i]; + EmaResult r = fullmatch[i]; + + Assert.AreEqual(b.Date, r.Date); + } } } diff --git a/tests/indicators/a-d/Adx/Adx.Tests.cs b/tests/indicators/a-d/Adx/Adx.Tests.cs index cc5674b35..0b914fb2f 100644 --- a/tests/indicators/a-d/Adx/Adx.Tests.cs +++ b/tests/indicators/a-d/Adx/Adx.Tests.cs @@ -56,7 +56,7 @@ public void Chainor() .GetAdx(14) .GetSma(10); - Assert.AreEqual(475, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(466, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Alligator/Alligator.Tests.cs b/tests/indicators/a-d/Alligator/Alligator.Tests.cs index eba6bc564..ad75bf45d 100644 --- a/tests/indicators/a-d/Alligator/Alligator.Tests.cs +++ b/tests/indicators/a-d/Alligator/Alligator.Tests.cs @@ -65,11 +65,22 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetAlligator(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(482, results.Where(x => x.Jaw != null).Count()); + Assert.AreEqual(481, results.Where(x => x.Jaw != null).Count()); + } + + [TestMethod] + public void Sync() + { + IEnumerable results = quotes + .GetSma(3) + .GetAlligator(); + + Assert.AreEqual(502, results.Count()); + Assert.AreEqual(480, results.Where(x => x.Jaw != null).Count()); } [TestMethod] diff --git a/tests/indicators/a-d/Alma/Alma.Tests.cs b/tests/indicators/a-d/Alma/Alma.Tests.cs index 720c034f9..2e68f5767 100644 --- a/tests/indicators/a-d/Alma/Alma.Tests.cs +++ b/tests/indicators/a-d/Alma/Alma.Tests.cs @@ -61,11 +61,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetAlma(10, 0.85, 6); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(493, results.Where(x => x.Alma != null).Count()); + Assert.AreEqual(492, results.Where(x => x.Alma != null).Count()); } [TestMethod] @@ -80,7 +80,7 @@ public void Chainor() .GetSma(10) .ToList(); - Assert.AreEqual(493, results.Count); + Assert.AreEqual(502, results.Count); Assert.AreEqual(484, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Aroon/Aroon.Tests.cs b/tests/indicators/a-d/Aroon/Aroon.Tests.cs index 50e034441..d9031cdee 100644 --- a/tests/indicators/a-d/Aroon/Aroon.Tests.cs +++ b/tests/indicators/a-d/Aroon/Aroon.Tests.cs @@ -54,7 +54,7 @@ public void Chainor() .GetAroon(25) .GetSma(10); - Assert.AreEqual(477, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(468, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Atr/Atr.Tests.cs b/tests/indicators/a-d/Atr/Atr.Tests.cs index 345318857..6e6b8505d 100644 --- a/tests/indicators/a-d/Atr/Atr.Tests.cs +++ b/tests/indicators/a-d/Atr/Atr.Tests.cs @@ -52,7 +52,7 @@ public void Chainor() .GetAtr(10) .GetSma(10); - Assert.AreEqual(502 - 9, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(502 - 18, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Awesome/Awesome.Tests.cs b/tests/indicators/a-d/Awesome/Awesome.Tests.cs index d45f910c3..d47fe81e6 100644 --- a/tests/indicators/a-d/Awesome/Awesome.Tests.cs +++ b/tests/indicators/a-d/Awesome/Awesome.Tests.cs @@ -51,11 +51,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetAwesome(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(469, results.Where(x => x.Oscillator != null).Count()); + Assert.AreEqual(468, results.Where(x => x.Oscillator != null).Count()); } [TestMethod] @@ -65,7 +65,7 @@ public void Chainor() .GetAwesome() .GetSma(10); - Assert.AreEqual(469, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(460, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Beta/Beta.Tests.cs b/tests/indicators/a-d/Beta/Beta.Tests.cs index beafdd19e..8aa694232 100644 --- a/tests/indicators/a-d/Beta/Beta.Tests.cs +++ b/tests/indicators/a-d/Beta/Beta.Tests.cs @@ -129,7 +129,7 @@ public void Chainor() .GetBeta(quotes, 20) .GetSma(10); - Assert.AreEqual(482, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(473, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/BollingerBands/BollingerBands.Tests.cs b/tests/indicators/a-d/BollingerBands/BollingerBands.Tests.cs index 4635e822b..07a2d00ee 100644 --- a/tests/indicators/a-d/BollingerBands/BollingerBands.Tests.cs +++ b/tests/indicators/a-d/BollingerBands/BollingerBands.Tests.cs @@ -58,11 +58,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetBollingerBands(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.UpperBand != null).Count()); + Assert.AreEqual(482, results.Where(x => x.UpperBand != null).Count()); } [TestMethod] @@ -72,7 +72,7 @@ public void Chainor() .GetBollingerBands() .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Bop/Bop.Tests.cs b/tests/indicators/a-d/Bop/Bop.Tests.cs index c801f6838..48229f6e4 100644 --- a/tests/indicators/a-d/Bop/Bop.Tests.cs +++ b/tests/indicators/a-d/Bop/Bop.Tests.cs @@ -42,7 +42,7 @@ public void Chainor() .GetBop(14) .GetSma(10); - Assert.AreEqual(489, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(480, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Cci/Cci.Tests.cs b/tests/indicators/a-d/Cci/Cci.Tests.cs index e4fdf9ca4..3dca460a6 100644 --- a/tests/indicators/a-d/Cci/Cci.Tests.cs +++ b/tests/indicators/a-d/Cci/Cci.Tests.cs @@ -30,7 +30,7 @@ public void Chainor() .GetCci(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/ChaikinOsc/ChaikinOsc.Tests.cs b/tests/indicators/a-d/ChaikinOsc/ChaikinOsc.Tests.cs index 800c09e0e..fb0c7ac2b 100644 --- a/tests/indicators/a-d/ChaikinOsc/ChaikinOsc.Tests.cs +++ b/tests/indicators/a-d/ChaikinOsc/ChaikinOsc.Tests.cs @@ -37,7 +37,7 @@ public void Chainor() .GetChaikinOsc(3, 10) .GetSma(10); - Assert.AreEqual(493, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(484, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Chandelier/Chandelier.Tests.cs b/tests/indicators/a-d/Chandelier/Chandelier.Tests.cs index d27a13871..f82ba7496 100644 --- a/tests/indicators/a-d/Chandelier/Chandelier.Tests.cs +++ b/tests/indicators/a-d/Chandelier/Chandelier.Tests.cs @@ -45,7 +45,7 @@ public void Chainor() .GetChandelier(22) .GetSma(10); - Assert.AreEqual(481, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(472, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Chop/Chop.Tests.cs b/tests/indicators/a-d/Chop/Chop.Tests.cs index b320b1d28..0ba4f4af7 100644 --- a/tests/indicators/a-d/Chop/Chop.Tests.cs +++ b/tests/indicators/a-d/Chop/Chop.Tests.cs @@ -40,7 +40,7 @@ public void Chainor() .GetChop(14) .GetSma(10); - Assert.AreEqual(488, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(479, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Cmf/Cmf.Tests.cs b/tests/indicators/a-d/Cmf/Cmf.Tests.cs index 54317ec0f..b3c65a5fe 100644 --- a/tests/indicators/a-d/Cmf/Cmf.Tests.cs +++ b/tests/indicators/a-d/Cmf/Cmf.Tests.cs @@ -41,7 +41,7 @@ public void Chainor() .GetCmf(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/ConnorsRsi/ConnorsRsi.Tests.cs b/tests/indicators/a-d/ConnorsRsi/ConnorsRsi.Tests.cs index d85bba902..8f297ee7a 100644 --- a/tests/indicators/a-d/ConnorsRsi/ConnorsRsi.Tests.cs +++ b/tests/indicators/a-d/ConnorsRsi/ConnorsRsi.Tests.cs @@ -56,11 +56,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetConnorsRsi(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(401, results.Where(x => x.ConnorsRsi != null).Count()); + Assert.AreEqual(400, results.Where(x => x.ConnorsRsi != null).Count()); } [TestMethod] @@ -70,7 +70,7 @@ public void Chainor() .GetConnorsRsi() .GetSma(10); - Assert.AreEqual(401, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(392, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Correlation/Correlation.Tests.cs b/tests/indicators/a-d/Correlation/Correlation.Tests.cs index e858b68a1..891935088 100644 --- a/tests/indicators/a-d/Correlation/Correlation.Tests.cs +++ b/tests/indicators/a-d/Correlation/Correlation.Tests.cs @@ -54,7 +54,7 @@ public void Chainor() .GetCorrelation(otherQuotes, 20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Dema/Dema.Tests.cs b/tests/indicators/a-d/Dema/Dema.Tests.cs index a85b628c2..2c795ce8f 100644 --- a/tests/indicators/a-d/Dema/Dema.Tests.cs +++ b/tests/indicators/a-d/Dema/Dema.Tests.cs @@ -48,11 +48,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetDema(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Dema != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Dema != null).Count()); } [TestMethod] @@ -62,7 +62,7 @@ public void Chainor() .GetDema(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/a-d/Dpo/Dpo.Calc.xlsx b/tests/indicators/a-d/Dpo/Dpo.Calc.xlsx index b107a40b21fff904c1cad3c8372f4025c02f0052..545007b65f58ec3bba1d2881f431e6db3f0ed0bc 100644 GIT binary patch delta 53637 zcmXV0bzBwi)1|reC8Xn$5>f)vozf}YNTYPa(jh6`(xG$-(hUNVA|P=o0YSR+UB2({ zpZ#y=GtWF{&YU^BU!svmXOU~q&@c_#eb;A^5D;q6k{{4W0H^oaT+jzGyGO)pVN}9= z#BgnM41;3NxW(#wy;idjo$ld`u=2maDw))`7c)d2%ynCBr*0D+S4_H29~~%I?FUB@ z*02ce8e@HWzk37)ipkuN+BGq}m2x$iM)+qNS6yn_rQB@P-s$}C8BszXojJMw1g9vT z#~|@0M7I$|1^6y2$v`=Xr$(bw!G7|FaClZ=$tY19}pTH!dO zk`97tTd<;`Zxc~LoxilRSJJKz;-${>CkVnrQ-4mLu@wZny&h1k#fkP(tYYM4RN

Jb+cbF5Z>Ds4HP84dOhO}szw-kgu$-l^sz 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�z9Z)G%RQ?TZJK7PR2=P*MR0 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 Of|APCmLgBBHU0&640{Ox delta 43948 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%0A*mgcF46)bhj2O0M(635 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 diff --git a/tests/indicators/a-d/Dpo/Dpo.Tests.cs b/tests/indicators/a-d/Dpo/Dpo.Tests.cs index ccea1e067..91836aec6 100644 --- a/tests/indicators/a-d/Dpo/Dpo.Tests.cs +++ b/tests/indicators/a-d/Dpo/Dpo.Tests.cs @@ -28,9 +28,8 @@ public void Standard() Close = csv[5].ToDecimal() }); - exp.Add(new DpoResult + exp.Add(new DpoResult(date) { - Date = date, Sma = csv[6].ToDoubleNull(), Dpo = csv[7].ToDoubleNull() }); @@ -70,11 +69,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetDpo(14); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(489, results.Where(x => x.Dpo != null).Count()); + Assert.AreEqual(488, results.Where(x => x.Dpo != null).Count()); } [TestMethod] @@ -84,12 +83,8 @@ public void Chainor() .GetDpo(14) .GetSma(10); - foreach (SmaResult r in results) - { - Console.WriteLine($"{r.Date} {r.Sma}"); - } - - Assert.AreEqual(489, results.Where(x => x.Sma is not double.NaN).Count()); + Assert.AreEqual(502, results.Count()); + Assert.AreEqual(494, results.Where(x => x.Sma is not double.NaN).Count()); Assert.AreEqual(480, results.Where(x => x.Sma is not null and not double.NaN).Count()); } diff --git a/tests/indicators/e-k/ElderRay/ElderRay.Tests.cs b/tests/indicators/e-k/ElderRay/ElderRay.Tests.cs index 52e0d8e09..5a1829ddf 100644 --- a/tests/indicators/e-k/ElderRay/ElderRay.Tests.cs +++ b/tests/indicators/e-k/ElderRay/ElderRay.Tests.cs @@ -58,7 +58,7 @@ public void Chainor() .GetElderRay(13) .GetSma(10); - Assert.AreEqual(490, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(481, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/e-k/Ema/Ema.Tests.cs b/tests/indicators/e-k/Ema/Ema.Tests.cs index c4c8b005c..f7d72f6c3 100644 --- a/tests/indicators/e-k/Ema/Ema.Tests.cs +++ b/tests/indicators/e-k/Ema/Ema.Tests.cs @@ -45,11 +45,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetEma(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Ema != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Ema != null).Count()); } [TestMethod] @@ -59,7 +59,7 @@ public void Chainor() .GetEma(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } @@ -105,21 +105,21 @@ public void Chaining() .ToList(); // assertions - Assert.AreEqual(488, results.Count); + Assert.AreEqual(502, results.Count); Assert.AreEqual(469, results.Where(x => x.Ema != null).Count()); // sample values - EmaResult r18 = results[18]; - Assert.IsNull(r18.Ema); + EmaResult r32 = results[32]; + Assert.IsNull(r32.Ema); - EmaResult r19 = results[19]; - Assert.AreEqual(67.4565, NullMath.Round(r19.Ema, 4)); + EmaResult r33 = results[33]; + Assert.AreEqual(67.4565, NullMath.Round(r33.Ema, 4)); - EmaResult r235 = results[235]; - Assert.AreEqual(70.4659, NullMath.Round(r235.Ema, 4)); + EmaResult r249 = results[249]; + Assert.AreEqual(70.4659, NullMath.Round(r249.Ema, 4)); - EmaResult r487 = results[487]; - Assert.AreEqual(37.0728, NullMath.Round(r487.Ema, 4)); + EmaResult r501 = results[501]; + Assert.AreEqual(37.0728, NullMath.Round(r501.Ema, 4)); } [TestMethod] diff --git a/tests/indicators/e-k/Epma/Epma.Tests.cs b/tests/indicators/e-k/Epma/Epma.Tests.cs index 852b9f6db..b86bffc57 100644 --- a/tests/indicators/e-k/Epma/Epma.Tests.cs +++ b/tests/indicators/e-k/Epma/Epma.Tests.cs @@ -50,11 +50,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetEpma(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Epma != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Epma != null).Count()); } [TestMethod] @@ -64,7 +64,7 @@ public void Chainor() .GetEpma(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/e-k/FisherTransform/FisherTransform.Tests.cs b/tests/indicators/e-k/FisherTransform/FisherTransform.Tests.cs index e2d2dd64a..3db9465c4 100644 --- a/tests/indicators/e-k/FisherTransform/FisherTransform.Tests.cs +++ b/tests/indicators/e-k/FisherTransform/FisherTransform.Tests.cs @@ -66,7 +66,7 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetFisherTransform(10); Assert.AreEqual(502, results.Count()); diff --git a/tests/indicators/e-k/ForceIndex/ForceIndex.Tests.cs b/tests/indicators/e-k/ForceIndex/ForceIndex.Tests.cs index 6893ec53d..62cc8cac7 100644 --- a/tests/indicators/e-k/ForceIndex/ForceIndex.Tests.cs +++ b/tests/indicators/e-k/ForceIndex/ForceIndex.Tests.cs @@ -35,7 +35,7 @@ public void Chainor() .GetForceIndex(13) .GetSma(10); - Assert.AreEqual(489, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(480, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/e-k/Gator/Gator.Tests.cs b/tests/indicators/e-k/Gator/Gator.Tests.cs index 31075753c..42ba4fdad 100644 --- a/tests/indicators/e-k/Gator/Gator.Tests.cs +++ b/tests/indicators/e-k/Gator/Gator.Tests.cs @@ -166,11 +166,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetGator(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(482, results.Where(x => x.Upper != null).Count()); + Assert.AreEqual(481, results.Where(x => x.Upper != null).Count()); } [TestMethod] diff --git a/tests/indicators/e-k/Hma/Hma.Tests.cs b/tests/indicators/e-k/Hma/Hma.Tests.cs index 9c6770162..e909dad7c 100644 --- a/tests/indicators/e-k/Hma/Hma.Tests.cs +++ b/tests/indicators/e-k/Hma/Hma.Tests.cs @@ -41,11 +41,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetHma(19); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(481, results.Where(x => x.Hma != null).Count()); + Assert.AreEqual(480, results.Where(x => x.Hma != null).Count()); } [TestMethod] @@ -55,7 +55,7 @@ public void Chainor() .GetHma(20) .GetSma(10); - Assert.AreEqual(480, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(471, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/e-k/HtTrendline/HtTrendline.Tests.cs b/tests/indicators/e-k/HtTrendline/HtTrendline.Tests.cs index 9f6494189..c0b609f6c 100644 --- a/tests/indicators/e-k/HtTrendline/HtTrendline.Tests.cs +++ b/tests/indicators/e-k/HtTrendline/HtTrendline.Tests.cs @@ -64,11 +64,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetHtTrendline(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(502, results.Where(x => x.Trendline != null).Count()); + Assert.AreEqual(501, results.Where(x => x.Trendline != null).Count()); } [TestMethod] diff --git a/tests/indicators/e-k/Hurst/Hurst.Tests.cs b/tests/indicators/e-k/Hurst/Hurst.Tests.cs index 788e80181..fc293365c 100644 --- a/tests/indicators/e-k/Hurst/Hurst.Tests.cs +++ b/tests/indicators/e-k/Hurst/Hurst.Tests.cs @@ -42,7 +42,7 @@ public void Chainor() .GetHurst(100) .GetSma(10); - Assert.AreEqual(402, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(393, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/e-k/Kama/Kama.Tests.cs b/tests/indicators/e-k/Kama/Kama.Tests.cs index 55bd2ec59..a9aeb0fbb 100644 --- a/tests/indicators/e-k/Kama/Kama.Tests.cs +++ b/tests/indicators/e-k/Kama/Kama.Tests.cs @@ -69,11 +69,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetKama(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(493, results.Where(x => x.Kama != null).Count()); + Assert.AreEqual(492, results.Where(x => x.Kama != null).Count()); } [TestMethod] @@ -83,7 +83,7 @@ public void Chainor() .GetKama() .GetSma(10); - Assert.AreEqual(493, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(484, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/e-k/Kvo/Kvo.Tests.cs b/tests/indicators/e-k/Kvo/Kvo.Tests.cs index a08f4229b..4544c84a6 100644 --- a/tests/indicators/e-k/Kvo/Kvo.Tests.cs +++ b/tests/indicators/e-k/Kvo/Kvo.Tests.cs @@ -58,7 +58,7 @@ public void Chainor() .GetKvo() .GetSma(10); - Assert.AreEqual(446, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(437, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/MaEnvelopes/MaEnvelopes.Tests.cs b/tests/indicators/m-r/MaEnvelopes/MaEnvelopes.Tests.cs index 0c0516b94..5072747e8 100644 --- a/tests/indicators/m-r/MaEnvelopes/MaEnvelopes.Tests.cs +++ b/tests/indicators/m-r/MaEnvelopes/MaEnvelopes.Tests.cs @@ -290,11 +290,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetMaEnvelopes(10, 2.5, MaType.SMA); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(493, results.Where(x => x.Centerline != null).Count()); + Assert.AreEqual(492, results.Where(x => x.Centerline != null).Count()); } [TestMethod] diff --git a/tests/indicators/m-r/Macd/Macd.Tests.cs b/tests/indicators/m-r/Macd/Macd.Tests.cs index ecab0343e..d994027c1 100644 --- a/tests/indicators/m-r/Macd/Macd.Tests.cs +++ b/tests/indicators/m-r/Macd/Macd.Tests.cs @@ -64,11 +64,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetMacd(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(477, results.Where(x => x.Macd != null).Count()); + Assert.AreEqual(476, results.Where(x => x.Macd != null).Count()); } [TestMethod] @@ -78,7 +78,7 @@ public void Chainor() .GetMacd() .GetSma(10); - Assert.AreEqual(477, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(468, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/Mama/Mama.Tests.cs b/tests/indicators/m-r/Mama/Mama.Tests.cs index 2226c77a4..4263e83a6 100644 --- a/tests/indicators/m-r/Mama/Mama.Tests.cs +++ b/tests/indicators/m-r/Mama/Mama.Tests.cs @@ -67,11 +67,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetMama(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(497, results.Where(x => x.Mama != null).Count()); + Assert.AreEqual(496, results.Where(x => x.Mama != null).Count()); } [TestMethod] @@ -81,7 +81,7 @@ public void Chainor() .GetMama() .GetSma(10); - Assert.AreEqual(497, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(488, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/Mfi/Mfi.Tests.cs b/tests/indicators/m-r/Mfi/Mfi.Tests.cs index 37c6773e7..b2768d592 100644 --- a/tests/indicators/m-r/Mfi/Mfi.Tests.cs +++ b/tests/indicators/m-r/Mfi/Mfi.Tests.cs @@ -34,7 +34,7 @@ public void Chainor() .GetMfi() .GetSma(10); - Assert.AreEqual(488, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(479, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/ParabolicSar/ParabolicSar.Tests.cs b/tests/indicators/m-r/ParabolicSar/ParabolicSar.Tests.cs index c6b1d6d41..017c83358 100644 --- a/tests/indicators/m-r/ParabolicSar/ParabolicSar.Tests.cs +++ b/tests/indicators/m-r/ParabolicSar/ParabolicSar.Tests.cs @@ -89,7 +89,7 @@ public void Chainor() .GetParabolicSar() .GetSma(10); - Assert.AreEqual(488, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(479, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/Pmo/Pmo.Tests.cs b/tests/indicators/m-r/Pmo/Pmo.Tests.cs index 1d9fd82b9..b3ea3c378 100644 --- a/tests/indicators/m-r/Pmo/Pmo.Tests.cs +++ b/tests/indicators/m-r/Pmo/Pmo.Tests.cs @@ -44,11 +44,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetPmo(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(448, results.Where(x => x.Pmo != null).Count()); + Assert.AreEqual(447, results.Where(x => x.Pmo != null).Count()); } [TestMethod] @@ -58,7 +58,7 @@ public void Chainor() .GetPmo() .GetSma(10); - Assert.AreEqual(448, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(439, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/Pvo/Pvo.Tests.cs b/tests/indicators/m-r/Pvo/Pvo.Tests.cs index cff7629c3..8eb50dd46 100644 --- a/tests/indicators/m-r/Pvo/Pvo.Tests.cs +++ b/tests/indicators/m-r/Pvo/Pvo.Tests.cs @@ -60,7 +60,7 @@ public void Chainor() .GetPvo() .GetSma(10); - Assert.AreEqual(477, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(468, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/Roc/Roc.Tests.cs b/tests/indicators/m-r/Roc/Roc.Tests.cs index 4004a74da..e15860ae7 100644 --- a/tests/indicators/m-r/Roc/Roc.Tests.cs +++ b/tests/indicators/m-r/Roc/Roc.Tests.cs @@ -71,11 +71,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetRoc(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(482, results.Where(x => x.Roc != null).Count()); + Assert.AreEqual(481, results.Where(x => x.Roc != null).Count()); } [TestMethod] @@ -85,7 +85,7 @@ public void Chainor() .GetRoc(20) .GetSma(10); - Assert.AreEqual(482, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(473, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/RocWb/RocWb.Tests.cs b/tests/indicators/m-r/RocWb/RocWb.Tests.cs index 0b3745e2b..2a66d150a 100644 --- a/tests/indicators/m-r/RocWb/RocWb.Tests.cs +++ b/tests/indicators/m-r/RocWb/RocWb.Tests.cs @@ -86,11 +86,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetRocWb(20, 3, 20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(482, results.Where(x => x.Roc != null).Count()); + Assert.AreEqual(481, results.Where(x => x.Roc != null).Count()); } [TestMethod] @@ -100,7 +100,7 @@ public void Chainor() .GetRocWb(20, 3, 20) .GetSma(10); - Assert.AreEqual(482, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(473, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/m-r/Rsi/Rsi.Calc.xlsx b/tests/indicators/m-r/Rsi/Rsi.Calc.xlsx index d78bb6d65c2adae90407d8e1da0250710f936348..b663290cd3dd615a8f1cdbad9358a99edb5610bb 100644 GIT binary patch literal 120757 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≪%>5!GblCBDOj6j5zrs{Lx= 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%0DUQ>U%>CNDF>wARLUew zv#ry<@-TZI?M>3%a1x+if`BBLk4XAw+V$|L&v=$AsYgz2(VU5~;xShbfkrcK zxprp$Hit41ol!{cbv=wz$C{)mf07Da-WU6hkv-Fk$jUU;6i`_`q?SvqNXm7LTk)Lm zJkboS?b+)5Y4VyurC)2#w1ndB{T32tB)0wum%!x(kTC0&k_rF|%$QV~thLLboCx=; zOgX=`U9xJ0ig zYajD|F=wxSZRxl|)5@=e(sP{08mniZ^EmdMg~YtH-?gP*u?oI<QxOa>MA(1B|PFa~A4MS^21%C3py-aV*Q)-VWf_%9KZe=vB$hP*=GM;-PY zV|Q~yR_U?dDC*)S=<=02>f1WK2IBb6Z)kVc1%`dz+NLsKS}qwZNkI)hC7 zFotO|a-^_B)4k^3vkyl!Pe)Q|UkRkD#bF4g(Z1xTGnkk8{3e1)bV)lGBCZssOI^UM z^WupU;!plfB^q3G1jevLmUU8;b2G~lW+01$$RG*DDHq(yVR$loFZ|_bk(37(E{B@X z=jVc~zGcups+$w+-m}WqLeCd(Sfs^$KwRqOp<424=!kw#K(`f+CoiyYvtRVddV~^@SpSHmI^RP}tF$u-Lco_|j$J2^yQc7)!+_^4Th9^9>mk(H z9%1~SV7cA?i{p$8A^#{G#VgsbnCH!KN!0 zLe`X`w>T%g4owRD&K1i4oCGEg(MxJFzc|cftyYKvhYvkJ2`yEZo)|1L1d^r)@&Wzt z$IZS9FZ&i=j3fKc1@jl1OML^So25X-#QoFA(iGQ3=r0$Gss?2P)8%GYC6n^Okp3~1%{1oM9m}O)WXa`Lo_Vf!AFQ?X-cXql0 z6@0S|g5+PmLM6XqdM4i9c|)&}QdCg|>cy{_^+u_f3u8d!#e9$61=z5tFc%q+I0y8d z+!;}TeKrMAm|a1nb)x(%11NYhhj?Keiv6YVc<=S8t*x z(Cu!+a*2cMq=_-=rKoeWZH+ZGAXwpzIM9{6 z8kk1b?;R6TrdpI%me{%eTEx<&NVW7f`N3nH5<39N32}O3Hz(jMw_q%M!v11BQ3*%9 ze`Gx!zxDyVa)P0y_6M*ZQ$T^4;$A(M_Z-Ew0={csH?G5jMG1f*GH{f7AIE**y_CwR zLf9FlDpD@lg(O4HLZqi#&SAoajh%78`Juf-*`d>{j2O`QN-+v>LU?h>PE$-DL(P%V z_6`rC+0+lKPs|?kei8n}&fV%lo3(0p<7;H(-YZK_#MWONWiP0-c@{#Wgb??>ILKZW zOq-O%Ic1seUe2m3ITxDD-uYY zvkbxYKA-vHo6fuDFBU|C9|=D-9;Hs5a=fbKdoGjE_0ThBJQ6paQs)6-`_aAN)R^)& zI~jhl^-tNrj_kdg!L!k(TqQGbKupP)d@aU!aTV*iv5LTs+4;=~DLvou4#tTRzbaY2i zK6HbR*^oOqzOBsXKHG;QeB25TpK$2F0M+eeibY+DYi@XrmnXGtZ^%-Mjkr(8JqU*tiES( z*!jLm8Kxk%EgTDzj-C3TJz%)J?;a10LICRTKA?$EpZMc3jI}ikVn!Nbjj^NRpi#U( zik^uBJ3$7#FM9;lt_n+CiHFU#^%sFXm2DBN@a~Gk z&nG+vS#VdOmvI@1As?^58BO|H^vg>Rao77S$AxH4+EV37b{*FWe&(^C#c_{cf3{8( z2aEseOzUf5fGPsF_mghDn%Dfjj5;4ANA-O1K=?DMyei^)pWf;_=SjJ{sA;rS^j zFW#AtQ_uKz+|lB}!nLANfApD)KeYIn?N3>Y7#0d^QWw`eYz@R+flttvI7d63ePM9_ z^0lYG(N)toe(l9GMwa*Tc88u^iCJmj{m^G(^6hpsHS;?!3BGxrvd&mN59d%JR?z}P zL=1vXKlgd~d_z+6xDAVbu#K=_gIUtOX#elYSmXRK@)_XkDaa>Nt2c^@?`&kkQ9U(F zyKnq)p7oIU%fwT%L zN5<^@EE!(3v3>qAd|k`6$5HBF4eNTM&+olG$xHBs-|fx-Q~`67S1W1AXheFBHus=M zi6LzZ_TB!XCOKgA`PI2$s9${Lt>%j^Za9IMTz!B%b3o10)oU9$GmrtnPKl#_)!Iv@ z^3#LBSDs@>Z}Oxx-0qGe&$5rKQc9YtG9~|~J(%87>GmBa^??nGf41v^jVdqIEWkUN zNKKaHSjzXV)l_kq{KafQF!WlM;=DT;@Zo-Ml8jGf+aJK@r{=PW`Pfbg`tq#F{Qx3= z;cGoH3yeftpEYp^1E?d`>&SlLvq@!*6BdIwI)O`l`t~(m(l3X2I$;1MP4NA(Aa53q zLB(rno~* zVd8IqU|TNX)x{eDI-s`a)rnXAlr6NFHKt>lnSzoNo7ttRBlaUN9ltPNTb>17Ieddl z>lj|Ea0pX8trwuI^W2=1smy%Kd4Tb`QiqR$qw@|oc?a>X<#|JHSh@h0QaQK%n{lu1 zGrb$OM9U(L->PR{fUgB92ks|!rj>DZYhCH1y1Wbn#cMv@)QnvQ5vR-UCSHh0=mvJ` zo-1utRRJGMrWY+=Jf6cWPJHdX0dI{bz(kr~7tG5*KZ|GuW0ai89e><4QRhQWG`jW$HpNsXjsZn<{W~%A3HHoKIrP_5 zD7!%l-<3>@qdtjY*h=eQ2PUq7z_a8Y(c6CYlJECN0tb~JT~H6bUhxq{8=up-S`b$9 zl6*DOIVE=4+R`$MCw7^nv+UQHGuoGR4`zHqh%bcaQv5(=!maZS9DquWz}w8G&msz? z-c7~t???ulz3#jNOe%}AQihEBV;}ta!h}Lzsm2(e>jdO0=p8*qvfD?%ZV$zaQN^<{ zh^7U3J^6P5eHRhkncHtpU+C#rc06xd4}y1G*7q5a6m|8sI#29=R%kAf>~%s)4+7Mk zAh_d5S3Y&7r?}a;^6BMy>NnE2iZ6XR@JfrahS3!$U@FD@mRnEFfiZosU1Zkx>en39 zDNB#ei54ESVkCHex9Q(&esn z|L|&ej&$u7;|f{X*2eG*AR7D&mD*otbH?@*mLm> z#fzo@=^ScrzT=7t$KN7L(hOB^fo-F7wix!`dGR9|?qlZW;7Vo)Zgwzp)U;ad!HgIpqm(r;~qzN*v^!@Yw9+aMf(J9;V_Y zRkP|GR^OT-RZAK;XWVvw^b0Y&9RuJsKlnSA5Uy`=O<5htW$9=cRzi}c)YUcLI-JL# z=43!sSF|97O>0Nb%x61j^csZ~zeI28qmuI9v$kzGFP?Z8xX-B=k%1S_L0naY;ETts z{c_JD`Zwv{`^wN!LBDmXm`v^O`#dJPxrK_mz}BBHTHxYKwRY1feQ8L^q^Q#?c68Y~ z#dJ-vjxI&vGYPoX3;lKJVN}kkV)!s5J6J%|wtt8sAFC91Qea}9GPsDZS_>gxgr9>e zGlv@?$1gF(tR!eTdsc9ixlYQNN;`6|l3GdpRFS2yD}`-N3)-&rH=3=49euhofK-hT z%4Ad+(PrcvB_4z&)Q;2EFlWPyf;YZu~6KNEqT zeN#&Tj>2Q*p^)OXNy|82V$s0aq`ofyUqQ}^HI>9xV-SwL*LT&FBDLBCFNUHT;i9Fs z&W11M`KR=j(Y}(a9~Uu9bT>5yOyb3Wqo4YjQK$Hf9JGE zq+}7imIl)JKTEbdo)?A3QIireyHf@zbn*YX@Qt2$RC5e0gKAPXEtRJ%1<_B#o?N5d ziA^Y?PmyxS3d)h z{E_J|Af|W~=B%6M$l>lO0;~AaIwt(?u)xfe#reUAyyH5+F@CTiJqeBE86${JJ&?X? z(7CYTY!!RFOg-kQS7#>G=raQRs&)iGYXuC5oDfvsv+etXU)Dnp4lE}Zcidm50Ho;w ztjWWT^4fj4ssa2QcXM?pr7AF2=jMKx$~i6Pfva43v5^uvEZmPahbtgNdnGa_QuF0O zB}v11rxXC0sfuimb#Fe}Rd-ioz&2jxQ`x!!9AI9Sj+0vk<{jE~KTO?~jSPmg@eU@J zDrANT=ofCUA#&SNzz+#~EnrvkyU!f-z1z!~@ij@N23D8;fg$R8-Y85d!rzIxvK+m% z*;PiNh)$M#NWCGNEONJ2CFA zE#bOb<6e>dNm4AnS^)pwVWeA4I3EhfztAHoI&$-iFbDdVAWX5ISkyH4g(~0Q^GzGv zCJKLxKhuHBQ|HA=D>Vpa@8xU#7+#NI`aN#hH54~8il0?XcF9%yZ`&Z#fUR!ktr>IgaEYnl_`?gO5me|RhrFemI?OZHAN3Z@ z(iLbmRW{EHgxW*VlKK_&m@Nd>qne3{<9_=+xjHg_zWXe({6s4J)OokZL2zi?*qWe# zWS`>q?#Ri^x(h~(adzk$+c$Qg5x2Ppayf7AN+RwY$5HsY6#2VY z5GRpeGxCAaWA2^spUA(*(od;DL4yQP%nN_qq}ON31)c0=_VT@)bTKEu&Iy1Kr=r_3 zG$h{H_97WpGLO!%Ab^^;o*X$QL>$x`7(Krde7tWyjNIP%pm3hMXGM|Hy6*948NNBm zEm{^w)~_AUMW_a(zIC{4IN4nE16(w+k+>{?2Z&JGfiX^oMY)ow`VL8icuwZG(!!1NiDTrXY znF8(Y>E?7?I7#LDuHr+~r%&mD=IuKFCWY-Fvf)8mAbH%Ih7<(*kBcEWfGML70St56 zAHr%XaB7BV#$Gsqp`ovORl z%jh0|JG}KhGL>;PM-(D0@u1&p<@`y77JoL>9&y<{JRN3X0ONCXXOJ+jWge(B6A;$d5@cZuUc62Z$r=G3p9aD?uHn1P*cdg@8DJ3lcGVkby@ z=tU>^uB-~7D(sp~zou>q&h|-bV0Q;-mR?>fL^pL@4F047MNPuHK|tzwT+V5y=17tn z=xrJTEi(%IaNG=f*P-^=z&3cvu34J5;`-SYY$sER;IG{MBaqCHw4zTO zN2w4F7Ui!A&?aDS?X%i;?}Y1n7%{R5Tqb_3YI?T6NsG&BJ1R0~%S4e>q&rSjVkT z{HehxPfH+usv3Z`9ejM?l)R{860V|e`_w({^WlB0eh#3+~{oP$5LQ%BKsP3fxU<@RYzRcz) zQS$La49et?T!`ocIZ#i*Chqug>NB+e-~5N%L}4`4UYMLjDsz+4lTLqnRo)|bc)S>= z2V1E!VlLc0yUXI5tbzEmO4r{sjDaE32LVQv86_iNJ!I7uj1$qu_>1#Nn$aePYeS&E zdCoj`X=Y(b99hgJXKEk)EYg)O{K!8%y_VgIl2oqPYd9R0sCy)jZ~3Y!AZN?%d9l!x zAsgxkL`9bk;Uy7Q@SkVn_6>%&e+0?=efrX^XcJ#w<{?s11rXXAeBqAk?mR=Cbk0B~TIr;7-DxNgQ+w+oi<_I0-E<_Q6@m zR4uhhg#;io%)SUjabUaHa3ZQ`qopPNAL9OfQ1dF$14!+vmxvn!>8R)LR>KUwJsDcD ziZ1_}SE%?AtL%avPv3e@+wS?pUjQ2YJl=aDl5T)xfHFB!s;K}}f*t*!0T~O_gu9Gt zPJe%@M^$qaa8SS8mhXv9eZS}pnTrBI9o<7=^s&bKOJa>^09lCFeF~7|-j(;1oynH* zV=JepX;bayDQT+VYWSsjo(w@5bZL#R}>} zSjrzkzFpGq1W}il{Oy=8>qt#kP!V^CAA2*03a9agctRwq!~V+R90Xl;K2CdRo2D-^ z7KP`wKv1kEyXXoia{jF954XovYnoQm!%5yh-?C?Vpdkck`9X3958vwQt!_apD-S+yo=7u5u+fY z2e#%ajFtUkvEt8z2knO>*$dBH|=>qF7Tu z4`y7cMi0Za%ZiVfO4-GUDwlM+8dUyvKw$kTc$H8~j|bFhh?sC*AxPMZ&0h_Fevb-cp(brTQlqlP znOgD@Kwp%mng%z+pJKDX2ivtfh5xaBsxW~yubfhhb3*N@DjfX#9CnA8w>+h0hT1wTZKqD*6 z0$Ft8$_02PI)~3f2%_{lxC3GuHzKdvm|2j;nlSL*YwmzbdOboMsvJ$IM#QwE0$ zu~Tnf`2a>G`eF_3nL^EJD5$7Mg+F|NYli*$i;89Y6~NoK!o>HL$C|CMC+{vMNd<%k zj2v_LRbSQh-GV=JaFzIxAp#1Uumu?O48&x$x}MYAhq!DRMUR41W(vdV>rG+V34iW~ zQ!QsC%s(2e^&L*f$sP3_27KLj3d1Fa0|DfXhz#s$0Kg?N*|L1Bi6$8#5jj4;NA*=* zo#w5P1)g7=+6O#pyF6LuqFxNHlE`m2Ga*;NKH0Q-V!s;p%C!0c_%@C9%#)>LiJ(ys zyGsm%V?di8tCEHEjxUY!?>-wm5{l6~^axCO1W0yRB1&dT(*6c%OH!_HOuM?u(ai$B@_99lPHP^0)}w6hxZh8)BnC- z6mQtZ$+9AwZX^QQCp2?>!G8=az?O#wI=H|3V*yO}Yko9hSvs2%Y#EG43F1}z^e-*{>fs0vT)13kAj2B0x7VuCi(+2@`?f4^C= zEu6NFd0`QD_E*7^F&&N4qiF1k?3q69`HWF^^eA!O^hCX220%v|^)ctOR2Yv`or|m7 z?cJ4dJmp_0dNIyXd{4FJD=bbNmM^gS{lK@@h&DS@%(^f(@4o82#-Ggcf1!~tVsK|I zz2PL5eCX8j?zdqQCP$h*Y7K%L*xmAzjq>;dxSsN$LckDyQG!OGiN#EFPmk^Jc(W)LRpSe7{Z=?lwDc9afc-l*v4<_wC3vO_A z+kM_6rK}5EB-J4HVQA6SZ+8QdUZ*xn?ZN%gkM=syN)0W9bTqkUOif4-s`uw&j>AGt z@;N3xe9LpM#%Nu9C2V@!!g@`DIq1?mPF!XD4f+wKoDbjV7p<8-W8r#LvfzuXJSw>} zzy)v#?X-3$3~i(nhnLqH!Jlcr;D>x!?|B03}f=Viej zx$>-G{Lc!TkEa}Kl*q8gj^lzC=A-q7QpP@P#q7PJ^pEE?Sxge0maaOb%+{^2qgMoG zUL87PeCw71Vrz+m?`tMaUmjXLVaCTc%h@#uMX3%6LnKqO0`UvJgm)92c!pLX!O!P+ zqN?WZzh-2pa017cN_j?5#E^>i-e(G4^}CvyFz@PqbhWe}cmQbBXgQ=cpl3|lkA7qY zYI-Rm8!N~28z`KbAO28p{zZ4h_WS}GgC#l(Vfnv!r51JJj8$w$ZNx6i>J9Bn36 z-A7(tk-u4;aaP*D{X0K5OzZXnfBy^nSJ3BzmxvEVyJ7b;rOV0_wR~rBp4ZK(xG1y( zMC54@#oS9}l3g6FNS`k)(b5%9zr8a5so6hLZV>5OVXm|zk6bj(<_caXcqQ>zB^lX1 z?ml-68SGCCmZ z4k|NuY%hz8&?yVu42M|~!XFPEdqihVy+pqM1kN(qtIStCb_4w)5O?(gk>8p@> z)ii&}>t7D8Kkjo(^XaFqE8fqWY=kom^^c6BbzdSGu8mflmcGZg`sPhOViV0<_o9uI zU{u)u(sK-q#shd=&e(I}6hvm*4qsCND?Kt0OKsA)ALBZvCjAjYUR)(paek~Tu17l+ z$xrB^gf6Fr^K}uyAN!6(JeG6nfSg`$BKV~7Z=gLVq;Z|$Bw+2caE*CoabQGDg2&B< z{vG4(q`$aRLJ`kpA*1yn-{xT1!N_g^A9LmNwT0+q*hH?6atkg0?_aQwDvYiTENPKn z6SLv2jhxVgJy7BN%ZOm10QX5|c@)xy8%l9ySxkA~>9Y$eCU}+^lacHiXv}}zy%riQ zH59CyM`wlwTZy{UV+MQ?{;aV$6h* z2nDE#!h4tUI8ic*a@5Th9lc4sp|i~P@Na6L>r^oE6R-~?gGqcS?|uF4dI=W40RJX< zvKK`avxJZ0Nouv$k1h~)?>Q`(zn3TbXx+pR&#$7Rbv=kKll?;rMhojhqW&+7a!dnP zrMUnHC>%3CflqW!)Qui%E%W{~@yQvh6b0yfOndSFFC_@I~z-d&K(~e&@6f7 zv{H{6_C>V5Z=m@)i!)j~r(!9syzr6&JFmNX6sf$hdc!YNu>iOSR4QYvBb;20D%K`x zi|6H^5f7?ts+e^u20u!#?(aYMpZS7|r(&XpNNIQ^Ql6C#0{iO;wvNR)JrBNU;?4NQ zGWii&!LM;W7fW&yhuf0Z=KBceKbY1JOfmw(SWXY}V}H5KV#4p>HV)u=g%8?P8XK={ z&w^KlQgiPGglj|+A${yPW&EW zF?{!&Wkxw*kwIt=7l5QLd7EEfx9!EGGkR=eF%Tu@w9k}Kq^?8s>YmR-vyl4?vqAE- z5r?g!PhOE!+y1(pGfL4HTOy&U7&iI&1fKEa1y3($^Q%|B92|>n#}^uowJ;guCheFT z9ur#TA{CCi`%6{h*EK!9TER`%xgY2=lR@^E+lbw5dE4XqTas#V4u|@LE0XZ)!YkH~ zF{#X9-a1kW=c5!MJpQT#peu>-A|p&r-vi+C3NJh2;gShV0psrvs6s{UA1CAG&$+2u z_1b$VSH+FRw|>PUYoh@1SI=*9u9sqg8nbB}Cd0ES%}imYV-U%ob&m{e?nZ?TC9uqg~p?&apM zd?TFuf=gnBMS3iy?D&f07gZ1KI$X^xB07$cxdtOvj_%mIr-ZHjs(MPr1aB<6IOSBm zFG?yop#?(x#z(YcGHD_hv=IKWn_ItJNInYd|1tH|L2)%-u(-QB!QEYhEv}0Mw?J?W z8l2#6VR2uaKyZf;oZuTYI3&2cgm=H+t5@~@xmCLbRXca)%$(Dwr(2-5PtU7j6swR@ zz?nNr#kaCbs~R;|bUTpx5pqnCjMY@o`Yv)_{!0k(zp0*r6#N}Bm+N}{1JHQ@*8)ACUC z!fw_28wHFzm#Ga3X36u#QadSkv_J{)o405%1>P+{MtYKhBWZ~9*t!<$-MUB*4dH35 zgu6vXaoG%(?bsJPS@Y+TUqOV(==<+2Pf+$p6V1|FHNprM5|Cj~W%NQyCgZt9!#0n9*h{di0@`p_ml1$Ra5Dn5q0C zGs%m4Ggr#qmZjOWTRXmH)a!uxC6DJx^n7`%-!De)qd{Hajmrf^xnJ6B|KGn3n-620 zC~Ao)C_jJX6-5aT5h#CznLJ9br@?<3>g*{CC47#aEKR4}yU-<*Fnz7TA_;8NZWJ*d zfgiU{sv067;ZnsQ!89V`g;C4;vl}|N?rWW-PFgvez1aDeJqez7%=V+etLJ!@6e1*N z6x05mKGeE@=-``&T^f=(NvyeMk?ErQ!Ji;%I%YG4Q6l@XZg!qq6IO)V32eoLfB8TJ?f@o}h1E?OVjz%>BmJ)N8>;t=u=sRB2qrlw(=)H|`C7 zKyT*$o#u)@3lU{>3BL}^L6EIN?E4{oK9Mr*7VfB~`DoRDrVSr_CoH=~5A@*sd2Y@| z)0!_AP~-Y!lB?ZB0F_yyFbi;rYxfGAb!{32%|E z2(V%PRtwiBkAF`+vf(Rh+)Wz~3bnZD3RzPW1QlQZD0lNMaL0ec=)<7S^&`5BvAY1C zPO)C$>nw$qrnCV^;F4V+`8LLrBA$^x@eb4rJN=$)M?!M?9uSgtbWGssnPt;-!Xd4R z%ua`FU$bgpUkF{47>GFhT)++8Ub$#da4=842Rp5M_Fu$oIzrdW<=R;%CGa+C^yyJe z%JXmqY41G^azgKomr-6{6dmGX&Svl|t|Zk}5z{^v*@|L|U8F;YxB8X{ro1j9>LotU z_zn1q;i+cxWyGHsjNB&>E5lF4jK9Fd7=Hj zwM)m+h7c%9kgQYP>X=748}fU5LLSuFY3m;w=Ar0f=$5P_LYbt=Ecs+w%^0EW44-9= zwXYcgEv_$nEng>pZfv-}!_(4u1iV+jFv++6B`yhVTo2{-tC?RP%$z$bUfIqmE-e z6Ak9GAsCk^v}jdiQ85xMow~$%;^dLf zJBm!APTJG|Nqz*yxoQkmIhe;&H=L`5Q2d;zCnN=F@wqwW4zq~4WFY8ZPPWaiV!keWwY}1^&ee+f-btlc%U|C8M6*d`@oU~l zAlr7g{15*V0jUE_efz}TKeL{nyT#Z9(uDF}w*Ae0QJ#jby63}|0C3M2EuwgZc!_8J zp{v(E7ULKaGe5`TSeiv-Oc*u4`wp?dK5?qOSJU)4PSO_BE1ivB z^%X^36=4sjCHS#>0c}rPn0bq_@HR|eTgKC2$ry3AYbtVi|+`MOzaoR>BQ^}6-<;D@~Ws{CChmo&a6>iy%Mwygr9`hGg?UiQ6e;Mn06?o%X zckR~x5pd`k!nB-5CC6E-ULxq5O3Lofv!2vrGv|2cT~sI((21z$;`tMhbRuppN1RBN zc@8V#V0LiWxu%IDeLwukk-)_I$5<{`Ju+p5%!Q*rA|Shdfs?o`q+J>t$2Hw2@FZ8m zmr5l-vjYh3WnGW~!CqNw*)5O1Lp=hhr17pl0Mhqt_?|T1V&XiF4F$qFLB2&?(npOT zt8MpM^5uz3&0)Ht-c`*_@p*}3fgUUm5-jx3-1@Pc1NST+{_0f(8hwXdKjiDaQJBr4 zm{;S`?G0(>e`6`<63j&%)rvOX1sISZ%d29uqMvlAP&ACcsyLZXUn7ia|3)X}Wkbwp zoRH4(#p^lFbzN9KP!~gW5&u(t6bI2QJL>*dkornF6R~6b=|$jCFLNHhm1P+L_Ao$@6pyx4F(fcyy2QT9IU(`$gD-^A)2eG z5{kg`rdO{|TNLTlH}I!Z{IZR>hWaTQ1sKjg(@SGhbnFqiulQbe`o#dnMA9hrv!mM> z!gc58jlTjVte~Phf>86WO|;*We@Q_qI#7QF-HfYTX-gs|qRpOu3}|Hpxcy^sg7ud>~t0+~1QBB3IoT8@{eQFiy$GD6v_dW)ZLOEY<5v{aq2;tddg z5!H{BmCEjV@7Fo{B3Nw)KsCb)_fk)t#-Xy^5Q#yxz#%-c?nONe-PcQ=)^J^-OA?uESNf zicS^8^;F)#t_2AyfzVMN0;oQil;IN(E@98{ll5gs)>WlSk-UbBw3}Ao)#B@Ia^Le_ z;cF=qLPD!xa!-Y8y;XfgjR#F-Pizh#%j2SYi?PH3E#FsiFgGP6TZ4~$uqfqL=8uy* zB*eB3kd%rIM|U#7yuU<;ijoe`xP+d4chn(u4IH{o!iUgL2RKO9dzU+`lT_nficaR* zz}F65HAbbAPG5BjjK=@3|pTDf=#+(RNSz(dn9o$qMn3zpePr{ zPs4n1awT{VxsOngCW5D8(9;o?^G#fBHg3J7PfW2V8F|s_FF=@FVxgIgon0>sTLeoNW7_c1U zq1nmDQLu<3J7co!cEl{@3BRbeihUs1Hzw<>Bl#AiK^4q+Bk)fOk1XE(c(`u5Zl`l4r4f=sG1wu?smwLeX1lQR;v!F5jsI6s|PrP_igLX;b#?{r61s5u`h^di7!gUxJY|9Gu*bE ze5RZ^^G3-59CkEr7$AStmH@`TNpU=Wx|287K45Uhxq(9%0ufaC#GInVDY8%rME+Hw zpKVMji6OtrwM?D~bg{&ZDGofpN_@U)3_mfCTRIgD{$@_l3M65*qz~VVS;KOqcG$)i z)TkN_^5~{Kx7{+CKz84gTb?I8O2rETmPbC4doDr*xK5-BYI0pod7w^NraX#&%?m0% z0^-0z>~kHkN4wR5F1a=M(zUc+w0z)biR;Zv(!(7Ia9$bmHD3o^@7=h6Z5e}irSm4t zF1A7JKvS_;m;HM?=v-+${kc^WN8W=na(fb=f!*`Z6<>m9cvL^nB zNv2is%}hP|f*P4;`TdWmlym;Wb50>|$Gb+Y6MmZ?8CAMnKSw4d)lcMj&s>ra;NoCJ zsb=E?+HY?oiZv*eZ4nzxBbL^3g7qETjT62*R73iIF^c>=3Ny=ydhQdzh~tUEQX?Qt zpX)|kKB+hO5J$^Fv%aNZba5PwKKeCIL{(S8hX;GP1#P2DaOOf`^qi*&4PDqeC5ayTQXwU5F=F5vRxIB_1tc65LPx=htjU0r-jA#uX(NkEbM#PNx zUit_0r7QRv{$iWFg2n0lENzl!p5yq`g@3SXySed38s>n%`5X6YrSuV(rAq94~SItMLC8^9sJFEog_px>8Xo z0@hV(29bD(wn$KR;eg?Bcj=FpYtKj!Vw;4{Qfm|7?D%lkIepAOSfw_a z@TZB`?Rj-uD4~~>Wb?Lwr<>B1(!0YT%WU9D!3|!%*0+aAaiWmG8y#e=;er9fWNP3V z3eBwkL)(v^Ev#Vm_^t{wgsB$&jlXb!jmYlceuJZqnP#9I+Ye+0ud*>#UjeiD)ISY!%Twt_vrNA*I55Ym zIRaU@3@WEaRJ{Ch!r7k1zbE zzb!Y_a8o{V5-U-nRXLe_(FP_a?F}mP2S+C_T;1;O7HC7x;~eUAV9=OjbIL|1a%lR2 zX9+D`OD8u`Al-t@u9mNS?bhzlf1z@@ow{})0~DIa=7^e=Yz-FFf3M=Z%a9KI2kChp zL2~8@R%(3#U=b05va5vHPpNdx`@8i4uMn!PtMhU0gU;zQ{=sEFL2ZkF@NP_1YyO5!psTsB)nPhJ7U`}4PN7Y znMfh6UeFd!zULcyk(eWg)l(YOv12QWty8rdd5&wrYE|&d?pqy7F*C~1&de#hoyM9p z9QKD~#$=DD_>?3l`DxYxWBIdf9Bm5RGfmVIL6F}a#gg3QEyw|B{a22~y%~a%TGtaX zG*;dov1>V6d@80wv`sG^lBime+q!+m8CGdHQNNn9{$B%2~?EzNH8}|{ys~vjY+U8NX zDYEH{PQ*OEf*o&E(f0rSaa(Xx@xr^;L;FmU0RN1LCmD44VuXYr^NaQSm^3&yQZ z4)a&MfV;RHGJ4dYM9;7K*u5B(1flcIryFf~W{3#v4t&;SpVjV47^~!Ky?YFFSZ^pJ z7b4DB1S>@su-7AjDy`(du_ZDO9cX+~og#PA5){^Ld1T~RWqGv=$cGu4p@84q^XTbu zYWZlLZTh8BBrvs;)l5vBs(5hwXoctAL2_7vIz~lz(61g|6m}%%h_v%d<}H|z+|0jkNsR4J%?DABGSOYjlhWUc z3Og|VJW@GMw`Qp3wfSAFc~qdZrkRQ796rOR`eec$x6pl@{mCyB143C1dNJnRy%~v& z*VfO{7B8mi?3&39u+a5&RaaW^tMnA=EM4j!*YzvhMpBgVy*o~dhUX?_Cvy^^=9}8j zqsK$%ahqJUf|^my5qD}6#BaEOI%Fl(e14Rft9@g{+=+!CwhKsqBhpF!OMjIoJW)74 zME>m|@n83NwjN?E@Rbg^n_%5aY)1N-xt2!aBWt#eM*(wgu2gg&`aKzWWTPl4MJZ4s z=-mozV7L4>@(zcrJXghnxTW37)hv{V!=ZAab1hJ!i*p(A%H6t7 z_O=>X+sO)%9iwN$M`#3R^T^)jSS+B?!a{LA#+VZ1_@?x*un!nMu;=K{5hG7)jf3Lc zaz91l<EB!d1#kBQZPJ8^Ef*wTSv(50J5MA|dBOXM2GGML3pL`oZ{kSh* zLzXRk_onWur#AGr$T+0d z@>TpJwAC&zncRUHLzF7*;2QVF_eh5%bInP(o9`ko5*I5TwYaop5~Oc)lz;mO>_=DT zlv7TH*UUVO)3{0my-Vd`#1%Q%wOd%^$-s1w@zVe)q)oEkpnpBQkRD}()SOpvDuk*J z$A&9PojYDkYmRXUEBn4n4(yegr`jWdnFChxtA9e{kw48rc-)aU%D7WW1KWKvf>ZJD zopEhS%T!G^7rUAiIJVebvD`yl}^DH~ES6tfjac<-15*e9Q0hXrwV}y`wIs zkC76lKZ$+MYwFggp8wzm7vh$5cyg3<18d9de_$jG6pUv<3yjGuG;{BdHbiDUP4BA} z8VtBI4ifyY>BYMw;-U=FaeaE`mX|)W$gZ!ZfAiDM_<>bNsV;t|OEd8O#!#1{wyRJe z#BAC{9j75}rvIyoHqr)=J-Q$cW=I94*D`gr6lsJ5B1&J1yzb*=Ok&lon5?ubTL}I+ z>dSuPhZ2EAzZ+{u;EHGxWN44BRI~X-5zDe|ceO>Gt)Jd=o1#c1@(w0wDT?k8006P3 zmSit*zO&G50EMDf-2Ew6L!?g+{(tlHDXo$GFMfPWi4Nm6<7OA48T{_M$bvz-2o7O1 zi*-fnuNaZ7u!pr(>Ar~+Y?rF}&YyOw50$OjTgj|bms+#vgN*$}%)*gzU6MX|DaZ3% zS|f3Kc21!4wYr1Fyf%Z8^+UyN@A5R6%dZhNAx0T7;PqPMHaGK~rjj>rhwTg^4_Q0p zN)h9$cFarXO$U5;ILf2M55a@JZrB?_s%%hc;DQVkl+V(-Bu50?e$Fs#&b2pO^WB0^3R}DcOYlaK#a7 z#Waa3UV}eAwsc~7*)dS3aLW{N+u0Tb+lMS3B;Piw!<)Z-&L!iwd8aeSwaiCT1RU|o zxi?I2h(J$D2#U)|=x({4bUHcoy#Y@5UxiNcGlsi!$@msnaO73L$sUtwopmDKf+ol# zhUdHH!+_51dJpoacez*$f^uh$-c%9HMIGd8U#R6=?*nV0PjNiS1m>012>v7od zXyy0Z-L{1QIhXek?*&b&k&1xmDqWSS_29jJ&0M&OD{;QE*BiI&O}EU<^I!)rG6yz- zt~SMEi^2hv0&5 z{VsiCHWO~zxWwAnHXnwD1;gpEOoYCol+PD((X93FvrEQw5|OW&y!X<0%I!=Ua1liM z>gh;cfuxk_F2Ojx4;YBX+j&(W@|ngZoO1C-Jl4sXM$G<7`VkY)-~I**=P`zT97iR( z#)PCeR^Ahyd|ev;^ML>f>3~nw`_8uisw?R*V@C-nQs@du{m^>z^u)?tP#j^lG-H+srTfgf*cl;ONbN_C(rZmjroVopaiIb&t>rS(Rt4Cw|JAk69 znA-qtUe$R%5G%U!*)RpN_@hH_BK#|SAros<(X1oW!Gy$;>2)NYh)`TuHjfAxp5Tzc zf?tReDAaQUoSeTR=aUA>u2ojSS1FX6Bq;_6Ly*^|Mw>cLu_Q`~h3^b(K8{>WOtF6J z0ML0${v!ghWty;Mue0H;e*4D4e!p0G)}OhXrsUxkTzh1I|CmH+km%i?P1E?6dlUVA z!UgEmpT~ zze0Hhy^9wKlKeOdK?j^Sf!p&p_FpCXE4uQ&2VU3%h14H4{K+2V810YTycS54zbsk* zs6{xk(Y2)p#IO-YTliik&K+}nFC9l6u2yLK9I#zo@@}2CYF%PK$N**iZz;il zo9{x-bKl+vNux32{I=0?Lh!HbTc|I8`1c$QavE%lSWp-zxtO8H=8q_Eq%eM}Y|3k+ zTt7OekIDdHLW_tv=we` zw-Ptu3bWsE=iO+0X}}BoWn-SKIn|m3ZA>?8-`sBpzdrXgsC!f9t`#Vdfi+9{%?8t6 z=?vFj8R5Mb+CwrWvamlL!-s$(|$30R)FdtLnEw+TVKK!;GPn{AT%8hT8jX@8nBjW~Op z0kLrsl^+i4{fDKxBeU@!lTnWHIOoK}niv64f{?EDQQ+j6)4FV=T)oufy|>T9{uC7A zl38sIZh28GI*&>+dJ8zntEx6(K3+bzB~VN|2j3kC95^>cUY{{T;jeAyqVxOR6l@_O zyKEn7m_tjIH4?9((dbccg}#34R;irN@(HZ{@Jo;V#`@Q0>n`T^yN!FpX9|b;U7lBO zHZ_I(eSY+MMG!{f*fW`1bwQ(omioDUTHEwsq2NA|g^1s8Mj@d&2+MleAI(SONF@#x z#kWR!UwS({uoEbvA0H9_@AFoDhdech;&7E#GH&$C$bZG&!} z%9h5Cx_??77~GxQ`6o$37bV2M^+`ApF~sAOOW&=i^Z0JP8PeUO-~*ulSX!?5k77{u zoA8pwkwDqZ+i`-ijmd*|rr!f^P!A^)s~i@3#nC5^#w;*p@Wc4=Qf4TK1BPm4?APJ{ z&4JhA68WW)KHPplpNw~-j1)?ngY{b!_~}x-tA=!|UscL7dC-kl6$#=z-=MN4a{M~N z)y~2C2TrQp&%ZFFe^-#9*l#gZqLVYaW9?&ercNctP?I7>wK$j(i^uDLmh-+S{*U;s zpPi(3hm-#E;;eon=D*9IZCKfJY3X!`e<#Y4?Kp=XL;XjHc)^3vffsALYdy-2S+6gg zZ?Bp5hzBbieblj^rSL2eu0pk-h48BBupx_o6PFn0hMP}J8gaeMFz{>!)KB-O8(}vK z8xtH@E?#N);XWAgzUI4ktGduRFdeWxoPRXSaF_VS zE`6o(B!E|Vi>md{b5F%A;#t3q;IJg`t9Z({_ZjoQ%Ak_5IgQ=n{3_jGSeg3cCEQ)& z7nw(6V&8YdqF?ga%?HbPQhH6tnwr&3=MuhP90W8}zLA<3Z6nu_blhVhRksNO{3E@; z;~f7M?XCx{`|6s6~65b1PT%~>Is1rg*L&I zl#=0l(3eO>ZTiSn7hytK({1;-{?VK)4)IcP3V(R-81?Yp3aZLA5ph>PLJJ&)a?-c326~K2%R&Va8YN0@KuxP78Mbycn4e~C=l(0bQbQT zUFSo+IjoX_kBhWLEJ>#~sLmn$Yigjv?c0&2Xj6ZF?eeR;{nV)2+4TPH0yj5tbczyr zSd^^%cFKIN0q$N4AOt|Jq@XHz(!96K^vQq9#H4_~-{~rwUYea=Vg0jNhEyB=zU`r$ zz#QSI;&xO@!{DzW zP`u~dd>OHp2xttx2))Lkcum+}Z8TLvQNvM?2e-RQrPSZS*d3tk$sft=QsZBLBD~MKp5svTqmQBpcXLf#PL>nkP&BVI<-y03N2Yp zioZKpe7Ba^VkHIq#-0?mC*~Hbl0DJ#piV(cOjuA^VFFIK!b%Gb@-&6_)*)=fr8BAI zu=NjROGbuAzxrrO=Y4>rU_dzZo$jw|;LKC^mcLY`Q{?C_`{zGl+DbjRjN`uB`=xT5@Axa4iknpaxz{x(+8{eaSYxs@HyMc zW+9>FwJDuusW9ph5io?~9ipvt9~mn>nT5Pb?HD7i*XVh<3m?!Ab~bnb)<@I+ z!cDGlSs7cG0{684Y(^MY_{gGH*X@72JQv&;?i$Gxh3r?Pd6!&5D9Wyn-Xih{)Dx{3 z45xcjJb0jCttyOhvOb$ZIEbuCw8C1qS@7wz=*che$@kwF)XtWG7Gl-W|<$glac|q3qFEQrEPUD!kIP3Itc`s zbOupC=n5wx+}vWS=vUcbX?7-s`B1~N*UE8%kg<&+CmEAYibTvKp;O`_gL9lR0|x$= zJK#LLx8phYU?m~17Y$2hH+wsHU;*Vi4r=ILTGTP2BrSJ^h9uM&h{(LliBBs|=*MDI zpSybFpoX+gm?-g@^0)rGbmFQIMVpi0X)Mn*u^axYcY|Xo+qcov8Hf0qmZRw+u7Y8p z%r}V>bS1Sn?b=k{0UAXgK~2yne}yC45Tt~}bjz1zNsOI$kdXX3)her9u0@(M*BX=B5? zwEeNrN&POpbL+qWPym%>vESSRwPi7%j$wNdJ!6kFhLS<&G_+gjBm#!l_BX+1b)UfX>=h->z$&z*FI@<&i<%pDo(@^SZ49!(yj}?#S zppnvN+)wnPb&r5zJ5n=ox;&d~ZJH<&7hXCd2wlEm+u%Ry^kwHW6cEM|Sv~pKgtff1 z4`Va>BM`(X`XNXJ2`n?G$fBLK#0qlGEM!!stR;E<5s;O~8b0Z&(Pv$<>D@_lQ8sfo zz+YkeiE-~{iIW*)EyW&BVw0#G+!D;P{I?r1mucob^0lU@eXX+HVQ55&dXoqylU0+| z4Qe2(*^dvCW-XqWn&^($+jyWisZl{i9*=`*GiLYNtcHuQce7sEd;V}$E;=gDC;*p7J<7#a!vbe|wGTK@X2 z@sEOiTKN128!NP_)Spy5@Suyz{|1sNaO^M1EV7B|SCaA7$`eY) zwfdh3A(MuVqqoPwfRZ_G75l;y=iY6}8-$7frlnN-xYa>KZRTc{Wp8hXYRnm(^nh2 z@b1AagVuwqAImsHTNz&`WNCZgCJ{l7hr7;gT2uUkD%g=yzxzIuWN?`OU=)g)^GPmk zc939vHJq;Lgg{BHPQcKQH5_Z7MfjsF zC@Kn1?^7rMLmI@g;g8Lya8*WI_FeQ!K&SXtKDHDL4^py#u&lu5p&Ire@gwNMRVmn2(Z)lXL~};|iY7flGe0 z-a4T704H}(9FWrbzA_co5>Xv^QMIdX>!!!zV$?r)^^lSh+G19R@b!x{1A&)lx{TJi zv9Mu84S*kW4XR%qjI*G|8}}T3?EEpyRJwC>k9@689D`{^=$hNgIYCon z@{$kEH>ugx6*IZVxe$}?Cl>htN z7FyXRv)#RWv46@m=(s|I3#v04ZSq;Uzw?B6#CC#ob^v@IVe0?q<16g!87epfXMZQ- zppSH4WxRrf4n(=D0L-y~D~@z2Ws3kcirTeGrRyl>NCVe@4EW9BM1J{jqU|!KBbzln z*r**i_wKj48A5M-+oaFFA%oLF!Dw(K0edE{f}yC2Dr@P}%b#nfDbrgl8xmtavucd0 zwykKt8=iC`d!IZ5R5hid(fnJ3C%&)7Ux>0quSj+LLOE@(JSwA^dJR_m$yCsjy+S0s zoNZ1nG#3g~+{%(@{WXd3dsFSdFb<`+aJC;u|AtT79$Pt(VT39#&>$K)ky4GV04z#2 zdO#Tu$(-;as$>v9Wr}Sxk9iElY&&XO(R?D=ZQVe1M`se{_gW{C?J1w)vx5tSyoll& z4Q++%uMkStRT$J@CG+dgYl>Y1d$>gX)K+Uyg zF$Z(^I_02;PergihE54GF7B2cV2LYD;qA3G%z0iAXS(w@QEhr&C;*852ZI>Xl`p@j zI%%kP>kDp`<{xZBGWc;vh#iU)bDLkU3f*(-GJa+PHwV+b8%*e31Jtq+y4|ftWty4! z{#~V{6&w?GC@Jj{;H;ibu5dRsv+>j4-AkqdYwEg8ao0He-Gp`Pb|gv!(*!8yH_%c= z8ful#;v|Zv--QWChjTL7Jcs9Y<&i>pCHLDcr&v+(ES?pJ%f!U7zu(KC zwj_{5sWEyUykz=-;4}6>?@XwF0BP2jtJW=oXp{G7v~jVd{WX=O4Zl87D7odYNS*3- zVHx=-w`cgo{a)atf={7@`=+ry)mXwuT#XDNi!+5c)rV|})gaH_w9Sd0@StFsj6c8mX*0#>jSu#9dK4-hHqN@y?i3^|Q?M0w zG}k%|H=VnP_SB7dCnGl#W&`U+gfWSc&L`7QdIeB_HIs|fhQJ+Ge-G;hNnr8+EfH}=97@ETvY1+x{CF_WwWl1B)!_MIV;_y2ZXZGd*L!CZB_of!MfIV1|= z=5-vvL$YT|D&ssesD?XxPo?=GEKoojBHkSEJKBf5v6$Q29=N2!L7NC}+QDs}j_X9K zUVxRu5?e|aY5X||^M(}PRK?450Z@Ncyf>G;`T5y-{-UCRLX`#X$@b@Ot@T6>C3DUC zi7L>&fsz|h0&bg7Qq$cs#Lz{?RVLmpV`n&TbggT6TJ`rnlWH@t$OLUQ519?+kJ>K^ zW|Gao&nLBjU!*SL<{)-Y2H6AM?n<@lP=I#;V?s@%f2%eJDnH!DV|R7)G9IEUO>jFd zN^e#7xMvCz0T`>BQm2UBSj*Zu;`M;ILvHfBoR27*sl9#`$sq)}WFGiYcZTo%tn^WO zWBTnEteuCpIIzwZuAQtuzA=w92N&i%kC~40n*#JAvhDMB?%GXL+{t11gS$Wag8Xr3}|K|AAD{9@>eAHcvZ5-!;C zMy;I0__0b#4v;`fgk!gWJj;;*d?{phjqqclS5a7()(dUv{R;IMC(J?F0iK`Hs&}K= zTa{)b$n|c&-Ap#B7l4CZlCb8bq!SLn&Px*6W1F#k`DfcgSx3;}le9+b2LWx~R>-uN z($&X8`K^cy$KTu_Mm9hs+E=2t(Q)V%ul}Fy$#^>Q;r1mOxw0n8(`*Am@65dUX9!aJ;lcC5-_9hlg#M~ zvXZB-bYG0>cw&JPXAAo;FGW3~wO<**3QRb3Rw^Xh(0F-PD{d1wg`xK;$u0UPcOGU@ zqNcu0BW!8l&IlE7!oo>mh4+s%W;P*X$iRypmZ%P0QZ-uE+@Wpkd?_pNr8?D7w4xRb zgG0uWyiPAso!aKax`-s#%BPEw_I-h7?r)aPMeF0eM&rpL4tN>oU^f5Btit2-V{IsKm(l%DzswEm;B%(lUAt_e%SOT*I*?-86GUZffJ$%5Tz5 zP_%E$B0xuR;lGf5LduV^hsImj;Nl3@*@Nt~Gw4fKMHCk?B!ofato6~zD8*j=xS7^d zwOi^$|8 zvG-`dJ0_<42%sstq#tJ+C+XK#R$|BYO1bMkyE$Z-k z`Uc+Hg~JwW_KM0I*uolIZjfWr>?{k{38b;-?^fO(tKnJCT+hn`OZ?m z;h7-E$|M$U<7w>Jx$iOo6S^} zboFTO|6r%4bOM*U(AA?yGRIS7I-4W4)YaM_A;{rNj5DX0`-6uQj+K=D{-~8sFX*T% zgu0egm+QYN9o`bjn62^9@qo13+=^U7P`yA-rQ?+^6$=WmNu2{dSg!BBk zRY;MKL2m$7^dGfY_=3T~^VNS=&m>qmp5pQRM_=)U(EV6Oh-n}^QrZ%Q)`5hKD(Uhm zDIKD3bD@b3i!j?wN;e^Q6gaGFj(_XC7UsCSp1L-Iq3PcO_G3Igz8?!adRHgmZiVS! z7RoVVy3T>~`#h=YCApU<_IEFSM<#UkC#jF!A2&Py+9^&Rno(OR7U1b^mjWSv)5e1U zOv}(G6`9jO;4Xwd2fTmmz4I$`Im#h{((b=AGENV)HQKbEk_mfRi{mfi;j3p1?O4lr z8RFp+foS79Egly(ZhsU@-VAKs5~DyMXO=H4teOb>TAr=Fm#i@|?Z9Mon)K_Za`0Qa zi&Znl0Rb`)iD5_R^(Gx}V!)Wr;pPozrmuE8ORpcS{QGAG)<1EUWA$IKb&A}7?JDWS z5xH)#n$|4Of#drTYI#LM;V!d@hveI9{}KVuQ>?f~gsoc;8gL%6s)oA*q}vi3cc#mR z5g~U_s?nMq0~_#yb-N?QXP?`!I-FE_9+o*wio|0l5Pq-!VEh_!l0pRU z_JrX#K{D#d4_5ghURq!uP4^ao5j475_mEy@Xiau4wyd1lpqwS<8;1)xF`A@4YM0Gz z3etCKn1KBcQi(!zy-82MIDY(%{jur0E{}8?!HkK}RcZ$Pr&W>bg}5LQhCNGG8vPz^ zqVa$6W18BdrERC7MJY;dYk=ci`1&pA+J~yoURBNw7({v5^Iw03c>bn6bsn9fTvL8el?Nd^r8z#*!H@48;*9W7jm33Y!_)Z0j98zu zt8+Y&c$L2K9-ZT)n{!e63o^mAI_fOSAS$**Ek&pXPnvaf4uc!GU60H09xBU@O$m3~v;WnvG zC@~7N!3B3owdAHFifQ;5C%EO;YWBwS_p>Y6>$!qB=M&Lj{Pe*E0JG*(@t?ek8IoBZ zCs!~+uu~%`39e7cjM@H^=`b2QMPP<~!Sk#^X`Y%nFa2=>FM4G5^YF{OVSn3@6In|X zvbtDdtI3}VFCH=9>R;nha1{gfsb=9gmIH$ok3rp~Z#}#DUgDPJcr&ujWT+;=2vyJ$ zAGP-9cPiMfws23BYowf+1sH7+LN%)L?aQpz;k?eYT?!j7u!1G^3nw%zC>ugs1n~~%vVSbSM65DFk;&&(4G!kJ=lD`^6`ldl zuc8Xi(1;FyUU>3_>M-7Ye6;c}jTqp1k!?T)?xtDbs9l$eiw9Ic6f#SydMJ1us=J0v z?eY)CYuZZ`T_cs~Mtd6dU*Eix5Ry&10Ul?M>L>6r0y3QJKRgSxN(jqE@Yw~kM|vLB zi5*nUq)h^FugDo^ABgl$z3KlCQ(qYrM;mpCOK^900t~@|```{ig9Hnf;O_2Dkii`i zT!Onx2=4CguG@LPZ@2bOS3z~v^sPs(oqJBLpHk3DMm(dm?I=lyxvEo{3ehUF(idEE z#Db>b5NW6G{;6pT$zr6PTeRVN)U<~(NusrQ&IISgRs%mImr)XootkwQO$UOon95v0 z8*CppcUgEn5Hfj11j<6%VWtY&htqU%lO4kgqDMb)O~5ik8VbAYF&Q}!mv+HDR6}%n zaufxkGJ-94o~zFh)YPEDP;DDxSf{5u*yb;?W6IuGPoVX#Hd#9x77>IzUuW5ag$E~+<*kJ`)mXNYolZX#&gbV z#yEkP6JDU0Aq<;9Tp-J^UwbbV7wpA>_t4z?o@!6*{PYk~JczjUVJom8M;yIcIal8> z-6Knu8g5Y|rwKckIyzziDyxDbP3gH;x%11oFEsrjAs%t~UCyyZYl*}WCE7Gl9xp1@ z2Rag;+^op|9=RyvQWjTo;wkNiqgnr`$?3^+F3tT0Q|m&?lkG{^wOxw5qJR^PK*A=|!Q_3VarX>~jNXv-#@2rC5ryC62hu zdB!<(8qUF`6Db}b{gq~}o&12?-zlpunk%V3~rhPew08Q`>0CwOEFm=oOU^ZPEZ z*s4Mx^462V88pNzqz%D|r$cM9Q+b3c_be17DwgBb=?yNjU35(fRLgO$Z>B#~D{y|2 zIwC%5EI|R8P`_yw&3pXrL8m{9Dt6WxCrc76KRV4}6R7)cSm3;Ok={(J>)O`g{#A|t znm-Tk@Hep~(@)%Uy)iZ2dIaZiiPSz%ms)wLuNv9J{qo3}nTgSlj=I2v!4^ESpe2lo zXGovh2d@TS- z5xvI{Gof)qs=hLvp3KC5cGxK`o>GGTpDnHb*)k-*X*7$K-by+%-yerO%{su0t!Kb3 z7MICOx*!`4&9S|6jvI13owoX#abPxhq+t7P2y7O0aDt)$vTPQX6;-rzl1g1|AG}s; zETnMB>z}^R8%!K+-Xi8@eWQ!6;1hE*1Q`R zDwQpP=QggGS!5**An~@Vdqp?w>6X>CAch_e|N46Msje>w8{s|i;Zb9~RJ7<{t0%xS zp@E&#&}*-x=VpWcozw0HyAnpLV^`R1PW;i?Vg_(XQJC%C(dYFMpj`$t=}iTNPr4sW zgU*E@zRE^rw%D^%C}x|C!lkdUaQ%PZssa;ds6xAYzKFHQ{pQ$OzsBk&(8Vn+D50QT z4nAxq%0UjQ%qv7vh(A9e*{~j(R5a>@r-UCQty0Ttl7Y46^?k{X zp#$H>LW`8e9>s}t*N~492^pM?;Ob*y88cio1D|nVHGGitCx8k+xqxTw&2XecMAVO z%u9)1O4QsVV`^ZjEneh|CwPsF`n=C4L>i1?DQSTA+NPA;XYyxY z&?iqf{8_j?_U{|x57sk3cK~_UTCBFi;bybA@p}vrm&Svg_OoVF2Se7=f1I{ z!`tYW6Ot$ElV#pF)xZ$KTTv|52TkAK+&oi&w9V$(^C8Gb4`h7)sB7vAEK4ixEpXh2 zG8k-*_W5>O?&HTH`44wCM2ifn(2=?> zyq^04$ueo@&#{xlwOl0>L(LhRKgPtYg;l;2BxO>HoCM26ZZgiAi6|`FKDvlnM_ixP zPjt*ly{Xac7@J3_%6JLBIuRQhqZM;!y#gMESosa`DBR%3J7P*n&vlu%io1{HvO_aR z00|+8R;%N5;w8YbN?Uj#Np=0MaY0qrS8!h``grTS#? zj)rS>R2l?U`16QZa{Fb=4QgKBXzTuG>nRM$*J9?gdL*d7TW35myPjSlWMt4r;1oV_ zI;eX}>gZG2sJp85Ow={lKzR(m^XabjBR;~>IM|I+lg`o5^Hwt0kWc(JmVW1Oqtihp zajt&nP?K?aipUHl`Ub4V(#C5+4^0*EU2xJerM+u5KDg{J8U~!BZ|oiHF-xTkgE51N z=}D8B-FY)TGv|_0u%)<;swjD3ht1)h$~1)gN?54vJnZvU{magwNwAwiUd44=)1=%^ z1A$$qFe?kEMrUs9ZcUh;#YhN-u%#v7@8e|9fhUdotkg~nY90EQ2YKA~NNBQNPCTDF zB759zEs%9wOf%xiWfh6@NE)iZBEGkHZ8McyPVTKkeu4U{V_m~5QjtC|)wz9Y0F|D-;4wS@ zqi7mnq0}r-?#Q1FZ)z!5Kxaq6*TYV&8Y*)NToXr9z(Q>2A)WW)`twntVjrG5l{s5e zo1LOW5PdX&q-u{1lhCluwF%RoX|r<<>iti3WPdDD?by#qQ30(U{nAF8n7>jEBzT7S z$~b@itft$F)8DfT|C8z8cEpE1imBBUk+d7An{sb`=*5nb>eDV@%fTYMf1nE+P|6lf z^P_nMH^6^ks)6-30;)^;>a4F`On&~ryiL2hSP$lF_j7EGVTt;`d2SOVdmG(0VoMT#vv*7KgR5uqs9`9 zUAv~k>Ns*9KsLpB~+?r&9C?3b>&29qvXYdDzpSxTd^E7IMIfzHhH5X}sQO%&hAN>4JnL_U7Lg(5YTez_D5?`uW{x15Bp)E9J{}}(qaug%QF{p^{cu!)>BE+Oh1fAj9UjxVpF@Tob_mQj)E z0oN4WVzPR|-EWhpSz}BfKQYozGJi&06xMxjxTAjKKCD@9`JMzXlD6TpWpk=7xMw(C z@eN&duZ587*iLR}Lm}|MaEB3mYLdtf_BQHmfnulF6TmMc2$Pn{ObI zQvBV3e1#a*fHrBeE=Kia_bV= zwizNcc?8nApig2-5LD&eNB94%pa;Ry32uTeQGSNPX@+F2gpbJA3KsvwuuNV~G9ptm zz8Gs-`?cjmhmcG-Yr7cgy~W8gKn3exc~<#ABK*6_C6e2>{6ikzm%Q6|Y}(}w7y8dK zyB zwD~+frLwF!Z2d~Rw$FF#`E9wV7_lS$QdZ4`Iqf)mFz!#S{F)6=mLgQ(Ogvq69IwluNF}>ne zUYvpaKXZc=+I;YceC-DIlSatHy{RpN53)`RCjLT01L#d>EPAb9Ipz|T8|gm8XH%qZ z4Bm#;gSC_uN0@%tk?SpsbxOZ9$k^uD;-!##384OyIo?XzOVj2<%QoB{g~AG@*vxa@ zp)v=%s{&)5WJFhAn7)hLOwkB|-?>@fp4%1sl{)o&r8)A$*3E%xLSVP%J-EQFYPtF) zBu5f*JxW0R??oisDj~Z9zqzOMYg%S=vWbGwS$ISN3ZjT85JwVgIF%Pe2STZOIrdPvI#(pS&xb=k)W5BQ+i9A?8L|cQ{1rnkc5PBc;J4(H?=tm7Wt6INA>-CnhyF=!VdG9sIGDuBBf@c>uJJ5 zgPIIzADh}rJ%yG<8W6bA)xxgwqz`QH{hrD$|H>+72aO*xFEDF&x%un0Szs_S)H4MI zVE$PafIC&`gLTJh)LMZI%5U2+ktG|?*@q29w$`>Q)Y9sKwfH!aff1<%fsDj9)QiPU z?#Z8K4Btv?+spiZw|0!#-Y=UsPmiziZN);=D9Kg2Yz9o5krq9HopliKS+#Bq8;O@S zo`+~p`ZIa#ZGvm0{NPUl!}5BlZ04q~&v~DmiL(8?%Jkdn#cSRL4!I!P%IZ=L+ z^Pd$ib##>ZpXV42!Vhvlg=idJ#{6fsO`89jk_out41q~MBegI ziLBX`b%aR^HAoSRWOcU)%B|2onTx5ikL<#57Rb<+BR?rJ3Dp(JJfKHk)<-YY^&d+> zDUt$-&+M*|$P%%Vwcrk51osjdDThGPnMwhWTe%umF(d2NVurbfj>Zk9I`_J$3{Mn_ zo}7|!U>(!te=`4q(@)hP@evK+G64)31WH25x$mZKFF%W(?7aV*J%w7HVX4tXw>Q#&EpX)$=EqOq%zi zHQGs>L}WBvX6JP+Yh{RBKmYVTGf^$aiyH&cn@O!*BH!y9Cy%%PEA$y%Ws+^OpVl<* zb)S0sX@GWOvDXUxV~xZEI(XQXyyHMV&kH!|?X>*nWYv8T1b3nJuy9hg$vC<1!*THu zWd~ISwHC-ml7&iF=zCls33Que{#HQxDaF>MUQm_Z>M7+fAfC70DuK2~R-TRM0$-6r z!n$}f8XAT)_HSEF1PBlepmQ&?5lU@e7Qjvxce?WtZ7}Ai(E4!<#UeMMP#ls;q1;s2 z9igV0%x+K-u|n_7Y?DX=^XKSjd-b@7U=2oV+f#}Xvl`*S&e6P0djtICI00AxiB0QA zHUbAxW`NqT6ODV1B;Ty5BU~X5;h{SE%@QE(Hc6mQ;kkB1WTg;?5P&= z)B_l8<=3;|StgmY-K*2%6#N*_}n}G1=Y~1S50cww|vVk^h)`2s@|9uK5oT-?40D0j|Lh9e` zivSUc#Td+QSgo!l8*Q2c@x%_G^K;Xq?h4v+tX80KB2+HcKPZi``%xMCd#dTE*Sq!< z$&c8%tnw4g8s_+aD|M6=o3*W>n8&Y^?~|U``c8@pQR5)gs{&lDbIZ1Ou-N@kGcfQD zv_f*PRx;6ho-6QbTk_A%CAeGDl+yV9?mf^^*omJcofKk7U-n-D z_eSo#<~R8on%Y=p9hXU1#>jJLy*gU%z2&p@qZfy~tL#9CB(w05V{)7ztZ(RDU0G)yeXRfhDe9eWRm;P#9OHiacf15!bsW29%yu^7ZfKMvUx~124W0Ayf12t@ z_{?;}_loJu@~N7NV?t=lFhH+2W%+&ey-B)vwBAwWc5&k)#owW|-1v^)A0YFDH}X96 zmZ=5$*6-&3{_fvBaVF@v7wC8d9DJmk9dYC~U=&Weu+3+~h@$$6x_V{%6_N4-cGfTY<)%~SPL(gIN zF!k*HtD9|u;r`C?>kg8d8v>VE8CBctN9=hDgWj5Nj6QLI!c_4Z*;q&9_2d_LO~Q{g zH>xvi5o-e?OZi;E5guOnG4e_CG@Q(QCfzBTGq{Jmabv*(A)kXuSRz^jCX#mETSKVn zNg!&H9s?oQi(Pru?D=?I)tA3i6ma|0FhJJ4iWf3KsjJAX0LZZbWv@1qPShLPYa;zw z8mnSjXoM)3#&^DXO#G5t5{8GElNs0s47I4!ii!}mV%Gsjj}$648_6s8J+$0J2M!H6 zjOvo8iI%OWgO!_KO#~-w%aP4G6^LRz_9N6Dhb1e>$)Ae99FSi<7lYQC9_%efEM1IC&T5pC4Ma-gAM| zIo&h@Dg;n%Gbn=jQhh6#QQgAaovRJ_(WM~q-KF~%sGxTep+Y{%q&l7INHqnQYhPxp z+zlMcEFF#OucG`A@a5j&xTGc9h<%B`Je#L95Rj;=L92?Giw`& zN$z{M^OMiN6RGK!0wuiytyN3$=Qq8ORu!aU#y-`MC6xUe72G9G;ZFJCu}udO}Iv=np*F|659T?U8-TKrbF09ea{}Q*y&d9 z0&NU%`3!_yK)zaHk)TiR%JvL_K@7_l3y=#!5DI@az`EKJIDc%^YJ#J+_Lqqy{yu>$^;Xmi%NXI3?=SWV zCDTm?n(TkPI!ciG1ZEixtn(gG#gyIpAg`tbm7=ZEQ)gLmEGI@V5*sNcz0`j--Mfr32aui&C6Uc>!i8K?(` zE@)h>zL6*BsD|Rfj33FlFElObf0JWnptojH8Q=ZyTFBQiMIE5%VD>^WVL&{qsza{2 z?k8JM(S=h_(BIVtUc`W-fPjlhq1z1zxMmVO#wuujPqqp)MmjVNd@?eXdK4NqsfOK( zB8_w)EbX0O+aKX;79h`UIa2@O)f{pfV+-ni3i?Abo}w|vCK!|%X?4t2jJOT|5j95K zF}b%qtP`mjsLW?|#>s$1fAFi@5l>GfiI5EB4dl1D^cU6r0Na*gLnLwBAE26-wl)jp z$lar7U!%lXE~CG6veY(+%U^~AIYzSpkJH?9Ze;6v3gzopvx*9#IAtkUKp7(v^ydiZ z^t5xGIbi9xs$;DH8|yM*eC6hq9>mmOPX=iIaBN2s5IJyXKmBq#OW`LyiM#uwmsB?}xN`Bb4YU-Kieyg3^Tp;a|4cq1R)TBH z0F7E9ItVHml-itrEB&%CJ74#oGS2@L2|rA1cU@3zvGaDeIVXqK0@UOO z^_f3$2z)Xu+a``t5uym*^Gzx`7p|4V#8vKu$d~>Q>Bab@EL4M!JSFNhJo)h^>DeT` zZ2=U%9PL|kW#d;G-?9t+ZGeWkW1Tadeaz!1FAs}$)(-Lyd55S7AnzQgAOP~NSoHMg z2)-hg!(DPl^AVC(I@PD@M5?4b?5F>OWCB+jIF3cK4kiFSGXDKDH|2CDF{KxHycN6}CF3I%C7+)*M}1%4gVH z;{;qF$D$3^lpzS4jR|8FyEvXgqxh+t2JLG#XTs6bW=BiSpE;UTRX$A;kfsLbT8wb2 z%UjSFZfCY}Le&<&?j(mcpm4EX(bB1~a7xKUz6_*_Y7y(FxSfE|79|tR>7g|dC!Nu6 z+{nqi?o=jwB%%%`r6hCJ>u|+ll!tei5WK)4HAL59M>`aK{x)p_+vADQ-TG? zgz@b9wYg=(F})M_=u`~?ea3KhQwocq5-SjZ&8Uu(p)17nh?>Bpn1+jeI)D2>y1nPC zEyUzSwa%8IS@t=ZyuC_C80r+gDtFo*LZUwTE&Mlao%%vuRP6D&g;lQ4Hv95~{%|{R zQfY9BJ2^h6PoN4up#zg#P*$*)9>O|Rc#LL`K+P@pYs@`O?FP+q>2hJ+6p ziE*xPvL$&#zE-uyCU?X>yhQrrn5~0)t>JEgz%z89nH)?T?b8mxjB1vwpiRflDAaOJ zhi8J6U7AG^y#kYHn{`Ob^2O283-t@rWwZL0Gpm#5z(JWG6Qa;6VzN?NP~TNE%YKkq zi>S6>B>;k`!gXI^$_XL{2;73^W?+%JvBz~xC4xx4gwxo$4V{J8s%+cZDj)6|KOL|% z$#(J=IN|e4J28ar8&r)fj}=8YTrPOrUTTcvJAW{D_3*4-X{6nx3Om)1aDrA~Rf%+k z*A6hazPytVgqr{gLw`HE|7Hz&Iw0G+B;fwKdE$NRu{v_OrmR+y7QNI+kRShiuX4lT zJWFcTX{KDr8YZ$1D=3y z|Jow4uLKqce0wa0rItJ`7->cCok%5(=G(9Z{6hvT^^yF#C6SL)ftdBCoy93`gc3%a zz;dO8oUWtNzEbY^_x;oUHNGD%r9!>bJR$o^XVOkR2`=nEshZ_67nc*9@_gG%M`?JV z8MrS>$)Xsgqt+-SAJrO1aI+y(Pc{J>J2bTlBzwveS9vu!>?Z@+OeQ9f3_sokP5 zkbjHnYe?K+)7`L^g{&c;iy(mTw)!Hd;-7EFY*vpS|IfE0 z0avgPVflB9;}oc|Jo0xaUpn{WwiZ=6NEa`2y2;X2zs}`@iVOIg1v2x2pqH0!Mhsx@ zox**0E>|XJ_$4edr$rrYC6m!R`h8NJM5K5tBaUAqQVWp1zuzG$agt0yhT%IN^-}N< zY#BLoRQg`T5@g2Ho!M6&Hh&L3`ff0ZnuTVO{~7W0=y(@xzk;3y_>%SxDU1_;^MU%Y%xbq7~UrB0O^ znUF$8j}dkh*cQ-ewoieyU0=3D8$LMXeL_BwloW?Kx$>#8(A0+@2Q^LARNCU@AGFV! zKOZMWR5>%SKWkr0mbeTyHxATELO=fRE!F$;$Jd-Mna*o;UGX0s5dbF$E)r@yI$e*t zSO@Ofu~cf{X#Z4^u*t|s21+P{X&5H->~&$Gx>o!0qzSbcd{hT4vqzWpx@k6|X&+wY zuu}Nz1u}sd4P;SsdQ*_yg_*VKez=}LwrT=TRK5XPVXdvS|h|9ZELb>6@N$nEgPi{_3s01uBYCYCi zZo{iyaep>%rL}QwTkD0V6%u~SQ{MRP4`~>Vt(Y#^Vd-7VeLb&WP2H(LN|H@jCsr1?Y zI`A4Pc>t~eMl6y+3ZB$ETmosJz(b7#&RZ7#XcCj(@!K1=aRYkg{>TaG5`aTlO<7E+ zt?%|K$_T!d9zd+IT}lB+7uUu=VKRZ0824S)kkQxjX^Qt{nY zPectiF|Cm4t+YZ!H-;jk6-#PKgDcq$1qmN`;C5Y<0FHNx*aTp5#tDni#KrdPt4q&b zuR+sHs(y@UFU4R`z8W$a>oie722w3>zEABf8t1WFS7f>OxmC`+Gv4fPBh1XUc6zm8 z2u5!s-c-)2w2a>K1$8pn1!-uF#h%cV1ERKYk}46Sr{y175E|J6U@Q<)qRP9EpnSAH z;@(Dlbytv?i-Scr%7&`U{}Rps;*iS(M1_)I zDXM&DzQRe@XPNz&oL1m~?4x6GV$*@96Z0#nZM@|~-d%~H?!a#so^kaNg&l6j%kCA# z=CtN8eT=BElgy=H@DyJ7@a5liYI1nu<;tCI$vB+U5knQ8w%QHg3l z3bPYf6$r1&i{q2nFGujz%=Ww6E0O-*rnvUW_;-9Cb?9K#BS&)ud?pSjB9sm_e_@;D zcayoP&Sq9UOuve{M!=nyV|9j%ur-@hD5`7z^i#($*;gwG=gx@ULN;hzt2m|74WRA!Flvybl5J|Gr<@poHFfLd)uA@));R zoS)JA-FgEe6z!zE)vQ_X<4C(vhlS7uF$tjU#bR`mB0K22F#Ii zh4Jjt7ZI^zbDt(W{FB^r+8uG}5*vc;7zuW>i0C|Hh3X)7*vfqz+K&>O=S9> zB&s+v;}0zlIh45=1MqZltuo_)8l^`ld7|)rU0Qp)4m~vleSXfac)K!uz3F&a1HC@p zbv)nLz8xw1cJh7Ced&1ad3&Cscs=6qsWroe`hNFOPYM~rV>~i4OE68qA4J*UVRp$P z{iCO2m{ToxZ$_@uuwkRnaf%Ps%aOgRX=NFQc5Urr-&bu^lKep1vx+5v+^eSu3HERK zQTUjOeo6?LZqAlKTDGGG76LtHWLPyTueB(X#WvH}8@pyKhY}54U1@@-6MYxA{RDrx zG%?o!z0P#gYfsG32$W9|pAbu~Zemab>MQY5~HNCyU0PX9f%l3LDo0W-O)=yN64D*zXn- zedo@Ua=wG|Qv4!vYWRAx_Vzlr=KJ<_sxgkyeLexpok=KgD3aCa?W`?4!G1`@XGDX$ z81(6I)KLu51@)ykgzXYrb-m}|ZeA#docNEfJk4d~J{#*^5s=5ojoNvU%H(c7OQIBN z;0voIl_ZQPS5dqjp z80IxbIjE%i+91w6Nb0I`Y1_KppWk;ph4_Bt9z-&@o%ejs zFbA|mW`mFTT0vl33vkaxyhlg}+aOI>7 zXYG|_3q@LAjJ>rfV(Y(BA<)pP@1LdQzDHb%C|Dc4mLVc@H(J2|h!E-pAHk99JC-|+ zh{8&l>W+Dl#=$&T;}JhoL06Z?cX;h6+MI5Ky0F?+1_iFiCMUV{CTH!?2}55W1;U~w zeCJTG(up7CvAr-!-0LZM0$#0D#iG(=R%1esN&BPFwQfWKNFJQjtEr7FnZtZW4jSm* z}r=R(7 z<)sttUR#RRr*$A?zbfc!=UkDc&z~eV<$i}u5lcTk3Rpzvd(WW&LSZNJd2Zvx3)2?S z^Uy#p&# zpN%ZjsfT3K7fL=**_GsWp2gtsUbcr`opEr?R>I=Jo)4%dMrii|HA<#Hfv{H?QX7Pf zzi}P1hQi%Xmrn(h7z>4@=}?g~&D+bkZicK;eyr+S-Vej+?aS_KF+rxAvW?ArhXw+F zh9wP2&yGOj1OrcxDA#mX?Y;03k2RektW^cAXB=zUuT=+;=3g7I^wxFXye#Aj94C@U zwId|%{QXFYk}4BUt#Vy}rJvi+hcsTbrPXthDIZv=<-RU`J@jG-aLcP82( zZ0C))oLoZ{gFnO;wUreHe{99TR@%UdsAGlRP@D8Zm6Oml5kAUGf=OqOKq|mLA5k<+ z+i4i`h-a5XJj+rTlrt&(wfcCSJ- z!I!XHfiwe;X*q~#$_JR&Ori#hqTQ`IFt}4b^gGN%Occ=WEeug?BUO1NuwCb5?iYGd z+W}5UKmCDUQ#2qQ9D&C8y)O5O{Za+5Od9z62oy(vc=?C|;PJLkA}G%U+b5g_n}$a` zd^y#yUut6J_fs^6Qs5dEe%1bno3L0(;op8tI%uvNk6+q7;xUmmRNByQcQoYL#U_)Z_(xib^}uXA^CuR6{S`S0+{D* zF#*OuloIXZR6!}*HaFgrPxU_ga7-V$`ej?>A zZy?`k=aT6qR?_(VV4&BwBBmi&4b)ppaKl&FFk5arIoZLGx6w7RaWxe5e%9~^-`7wxBCKE4i7?W+;jpRC%)Vj1 z#a7!y%BA&Vg%3CZHiQn(GGTI}F5K1cRGFw-^d($QBl zXGGDzn{j@ez{r~+E}Q`3PlB)COZTy^IWIYkN1(rzg_TGmxblxiOBrpRlW_NMy86%L zX;hliRRh$J&V7{Z&ZZ3l(k?`sa3Oh97252$-p`Ck3I|m9zxv`?;@x@g$J<_*@P-(A1Duqvl%+9eq_gb{>)mNgQr z9SKkZoPGf8!hlJZ0V z=|BfhwHg>}sjm|%6iX^!hjgTm;u1*L# z++^aBG1Dqv`;c{32<$wF?|^a4mRQ~Tqv&Sr53?MnLLFHvzg(tln6W~2HdVcdnMHXY z4M|+sU0A!*@vW^kRk;vio(wqIJf+jrs>-@hW{6slV++EbZe+4&3-qvmg8mTS+~wpp z(Ks%~UNZ_;Ur*C%z|vdh_Vv3Da=1U{-D1U2#z~1=xy&QeWF}XQ;o&cSl+XPv@TgylFRvlNk#S^P>Hji=G zvefL5h=o#FTz;By;I{I7kk%T0gJ6XHeB%W_h*on2 zZSLAAgoc|#iPAPO74=K11+8v@q=8u)Y+5{c>=M0DpCbMXIwo~&AtQMjOs(cH>1Gb} zQxf|*TTanyYI}}dz~=w1T_t0exhL0!19jsYeq%Fz`sSp)aWyChhSX}4h47x1EozAA zkB51DjGP}R_LI{(tEU+|W?@%IQ!AsN>J(o5fzg4*k$3dJ&M^3p7nktf-!5YL^$Tjc zClfS04v!Oyc>-H&ikR3*wK`>#z6PCp39isxa9*AO1;9i^bJ~|x|CT$LzJ{(MC`}tg zGShvm!<3lfBq}a4yQSx*2Foa79iI@-TPMF!bJsZ|2zAnPH&i_=Bu=|k0k#0oxfL-h zm(JA+q+4L>tW?$rm^w=&#xhn?^shE6{(DgHZEh$?Tfm-|Ro0=RsZG2_l;3xH=z~E7lk*r zZOutoDa5n#p-JRc!Pk`h!f79{T)XZr9w;<%5LRc=y=SKYBveknJkY#@usi)Wg|=3o zo-kn!mtQtIHi<7N3wq+CUfx*6(&C}Ps*0{XVmn+wk$aeV=;Mf#XN6=Ae z=bUIx9Ok)G$wa=rfALMk@7Uie?3-#U<$|76EARwGpVo`pMb=#>rNcl%5XI{*zA+G> zTJu_7I04|BI=5y3U}woR*_I-DXSLJ(_a0snvyvbZ#S(d(buSOca$-Y{pN7GH@M@}h z@1uyQ7w4D0>D;vuzUz@VShG@^_R+8W54Tq8lcS=!pX!I3W+oP=`?E}-3Jy~^==MU0;C*&|Thk|&|Yp{;dH>h5osM_%zC0r8K(!ll<$8i8) zo2NG50RU{TT*^{hd?sdSeCZ_VRPyOL>XWQcQ7{czzRhd@n#`1>8;vcQ7F{DCHg>%1 zz7fZx6|H7r_IVAhb`9xJllNc#x-9q3^bND4&VwEr{e|R8mmKa5!%7E*}Bt>#SkkCki9|OCYg_&hOlqlBd9@?Glke>b<>P<@iJSKr~XYkGr zRMPnVEyW{`ni1yCz{(C3uQVBem5dc>Je)~x<^#8D^y_E};ul`csj=s*pet@B|JL85gox>`p zgx#)44MtKBwV%itT`JVk7@7~k+HVtzfAJl+`$lG9e`+x1ZxBKXbW!)sgoSmW_xsLQ zU*px2BD#bAeq&1|9v?~bC#8;iN1UI4QkqN^KrQ+YN)H43#!-Vf>Qk*Tk|YEm9+Nt? zXJjyag>i-EvbeFs;jf@`Qj})!6O9e{1p{vOV@dpx(-mN&wAle6w@E((^IJb#Q`)%mHwmjT!+qdz$qBZLOF9e+p*-5izpf+k9^G$Fr9y>u` zTGycV@#~W}H75q=X7sUw6kf}Rs?0>hy*QTL5nlT&H=6kNkrzF5^EeQxF^=fc75Bpb zq3J85;#!(^ad#)ULxMwacb9<#cL*BX-CYNQ1rHE3XmEFTcXxN^?wt3#Kj<}U7BWrm z?y9bOWD;|fKB`oU3x;+KY(h!O2kT#>xW}H4(@Ct>LTA_dY%2Vr-mj4WQ?=NnrL5!G zORx{nU{q!BJO_!w`$#n?t5pfPEQw0MY_I#GDmXqm-0y`h4lk9{hET z7Z&@QXxd%mZ;v-;)$bpbCP30|%KZn-;~h@@m#XGFm(j%G#o%0+jiYc5^mau6kZr4%)y*H=-OmAySz3%*k(SBwS{ zd3b=i74rW^oNqyEg1CpPmMy96-bFAttps)RLBXJ2QeU8%2?%2O6Xw5b%~+) z5~EL(DGG{qQx^nbjqwxRQyyjOT>qx9(s`mT2)2?gpvr5HfS_IBTTpo>b_{2SVAxU= zh;kudes;}piLnN}l+_UBJs{x2KAvIM2#_um=!Q(=aJk*pHJN`^wp`_gXr?-gNg^U| z^CmR(oY{hrO*6M+lZSHM&OV8)wS{(N+G_qD{D;RUk%ew#XP+FNiFCoN6L-M{ABO3e zgxU;x;WV=2jMMi=63hv(AhNO>!|ZvoNba@2chu%+Q0GgQ?psl+hISu99zbCe+E)FJ zd!<}0)Svrb&IT`=p;1fbPchg3mP35=FrgV6OI@2j&h!9aVcegCQzQ=Dq2#OZ@YUFA zhZHl&8jC4fa7gS|0$uRm5B73TmD{5H8l@#!Z5}ma_9XHp%L3JQX}WZ$8N&DWdz!-7 zQ`i0lz}L<^=EM+;r4GM&6vB^vgYUzkboyjxEQF^+BN(0dNi;^Ai0eU!e%iOs8Qjl&oQ zD+n8&&(fup4@zy!ZK0MGJy0#J^Ub%R^@_<_i^Vc-A=@TC zklK!GbKj})v~{z4V^X9zH5RU(n@N11a+2oU zRkLsAc?-IzRNcs>x=xFP1i164n6DowEEzYtZzHJA)lo3W7;lxu)gxDI=Nt6osXwc3 zdS~v<6Zb7T)Y6tOVtClj>s3-*!L^@E%$aK8<8M zF@S9u<$|ro%?{0oln(2N-=2S>p7&G=t1z29>T++9<659#jTQx0TjbqTzS(mn)`g9jnJ=iPOIJ1(M}oQm0GGPQP3!j(E&> zGP2*hwgi032L3@tV6V1{_1pql6x^u4F@T!&Ado&Mi|7Y0eNh7pASfHVvCV#>>BiY5 zJraV8wAKasaoF1WrJj6IvAeU;cFgU{$rA^u>a}nZJouqSDly+T=?IL7 zZv#49*5ArR@Z*zie4rQkjY*MrxG)Hpw%Z|>d*M}&zlA$Qn%d0|=<|ncyZ|P={ru^2adjctD;O5! zKk)Nsfi@$a@T!aC?#+~)z@a5cg9#j3U(`Xkx9nXEQfoYtcXi6eT9m0gFy_pU;qE9d z;aH!;o2&!WGtf4lC_5V+fdtJoNKl0`bvs6Y=sx#K#i9 ztzckMxZm%s?;Pjc(@w=)L6^jXOpaLJyGx4r>2WOx4tyR=^>9=#?Ml`l>sgUkaAAJDJa-(usD2xiq!$(teBVMm-wA^d@`Z@a-K;>{k2ld z;YCsG8GE+u{wt=!Oa5Z?@0sY17Cqd(U7}%S!DX+mUpKmxTu|4*^W@Nz}_r2Ur(XTwQJ1Y z-wT8j|YQK@a!jbu@`xwTqS> z<1)Dv*_CPp2sNGj%7af!l)2#0Tumjy?zCDaB!P;oTk?;aRIOB-%kKKmyRBbTyBXBT z3>VNNGqKyU_RU1;KCbx#*D`f3cR&>BT4`HDRaW5K(GT}WPd6jgoVb-@KueG~l0V5| zD#^}$E1IyN-ecnWTfr%KWbAVDjCY#71!t7FrZv;Vi+}tML?&QU)%rJuO+K!wb@g}= zFr=1Mjya{-6wh{RLF2*MRh{Czsy{t32=Pd^He?KFtE_)~v2Zq7OV-iS8fD zg^}AIc2a9#zi8Gn3#toZO{ic?{IYpDRrlQ5{!I%fJS6QIcEedWuXL1tvv3!atdY}d z+FT2@L#Jc1YqHV{@3(L6cRB2cIiCJRxeV-%0=lYJV0UreEU8)NudgUTn+-WEku1{3{r)6xALAf-(v{pkHAf$+-T}2Otgp(Fgp`y#e|F zjQ2Cd!;vyVI;DTbhpHTggyw=Pbysc}R)+!ii7>@b^QJgD_Av`cg_k@)S7M=FIMfFa zlf;|CKNi+3Qx{S3!mQaMI9YBdy#wNT+l=A5uN67^lH}>H*D*RD%sDr^CnmH$Ul8Ih zqAtqeBmFAw0! zdA!U$H$RkT+er9vP-~U(C8wAM$24e1%fPJ@Zm(G>)H9Iu(AS%oUU}bL^{ew%{bhP)3{3O5tJ4C%QW&cRdp^V6rmK$|Uq@$wzOd$T%#2s* zMf!2~^oh6ryC?&yY9cmVIcseQx4@xQC987o_?~<^+m70)5bWvkn->y0tc4gyr=M^< zCHVMK<|vN{U}k$in{)sZ`S&VqeCO)+ait?Py)DTK=E1}7tmtqXF?X+UnkPwDJ~jLJ z!x-|Ybq;HJ3eQ09uw|D=_e-{vvVN`GC(kRmEbc>Dr8bx>jZu_|M9T4H?yPw$W;#Ja zW>fegcnU{$LolvckYX!0DfOtpEN-fDF-sOnq1q-Ik@W@Zh@Bh_$gY2_+l1eJZvpP9Le%nu* z?g72*C1y}oN|{+ozn9nRcEo~_%~t+b+#u4%Zhb-j(`D8zY+Vp1Mr@}!Sc&>z_j3+Q z7Qn_nh%yI~!KdoZyF1A`AOks)H}(QDkTz31TJn1HxAf)^nBm~^#wi9wL`;R$grjP8 zX>zKIh7d8$1iraZx-X zC)ziUQ?J@9Fk*%8X$Vu(vg}_!N`KXR=^_0~bHw|n>pgof6-PS;16FP(g!{`(5_Tqp zLo!u`L?i5H%tkL+?>{$!?*!}DWam7BRu6v~*Ok+!5|ae9%DT=W{aQ=ka9&KU%Wk5Y zA2!ZkPFQ@kn2n*n(Qh?RKYUTcY6G6O&or5&OjLM^o!C@v@iF3zC9+ED?8xoVSVXxD zkc%YaMBj^3C~y@CW7+gVy#~niNm;JccYypQJ(+co8T?9j$FZ!#;hB z;Xfu_(%HXInC~1Wa%d&LFn;)#kU{VB*i#+=LlaAm(BMkFEb!cR?p_7f8Y-Ec7Uy-xM3K+DN4<*yJlo)}`N^eb<&MFdd`I zB49fIeUm?CNhVDfWzpH^StS;#bSo9JR24nKDY|xgE|Gv%nykqgNOWD|E-}P$z0jna z9fENZ;w&!>FYwZEDoroM>gKIK(1E8efIHBZR~0ZjbTUfd6qMtvz}n}IVXz!Re$-B% zjM4DbkqHy423n>h6L8u5IFBnpT!+tB6bJ6< zPCpoFwGmBE)7C7D{Z&IdMree%(b()dH@tG-CD@6DXJ)Lv6N0c(O@!PQwwJp%ywAwb)bg~Ga@d@if zQ$G8l?Asb)@1`@J>>i7QRBhi!I@|XvDTa{&eXDm?&$QNj{{FJF%Kjrj^xCCgb2Znn z1KI9Kh$B}KV@n;a@ZYRxjrn(U)CNcHXZF$i?51=zI{i-nB`I0*Pm~>zA5yS~5i0m+-1V9W z<2XeHjW{H=-KdfCnL1>w-)$TIpal9S zT^sLrSqp59#}vwPei&C32gW)%vEw50yY1;_jwywzA=Pl7Fv8%$q#k38zd4=eF>{Q4H>wU)_qTny7BuQ-z>>t5de$ zuNrGBn}EJo!B=7zL87 znLUFMq-x^5G?NNZzyNL%r*eroPyf;9UnP6Q_d&#HG+qUN&R(uYAEU(`G_QxzViVsa zo-hNfN2ffcOUkqL1tojn6pX(sv6}BrCK@kQv#eDYiYrs3kaF~IGJwW#e=_2 z!{C-`C(#smgpB=r#y|s_noQWd$fQ@n9uy4O!DF9M@;Soj@ak+EWI=0U`&&@P<;i82 zyFc!e(Bt+7Q`9VPDMdh$0EA*g*SdvO9toCbJNy)%?rbJ!`bMZt^s0q)%mrU2GR$ce z7F-Rvk0!|j#C|!sKqnyf=bKK^C51>PVvBFT`Nz)u2>}k*wuUdxAt+?Plil-a9 z*)oUYf3_^#577uSH>qwKHpL!SLwH_$q62r`Ov>2<-KX1)gBbJtMWZE?#2v|l6(FeW zm89rhj=Ts34~H#@%$Y_B*A?^@>a0i1BZ-UmUSA!pU@=v@k^`9xeN zu9YV=5&Nr!K{Je3eT*qeycJ7*Gs?H^uYsR}{slEIjVELxB?^r!~`*qk}w8;=w z?TSXoWa#FVpqYw*X15aub|qSWs$VL96hDqlPMzrcTG#t3c# z0>1%PaWkMGJ7sNr66H%cS;UtS3%ZgF^)Dabvykhshc9ZBI2wxQ5W{PyGx)3ZF`b<> zu?gkzA=$#?3$CJ38_VPNYPMOx=^6vi18v)PKo}>X$-T@!u0{_sFUQ17=^*s}q5oe& zJ6x+$jrV%nRxpt*M#f(S{h?iItJ1i7q@sE^rJC+z>!kL4JGGK zDPuAh0-#oIV-%^C;p#rZ(sxq=ZmS4R%Y(sGGD z5X7SNKU;gzStf5gUpS0iAl2pn;C{eGukbFj5+az=IJx;Nn8*}KZO#8csR7xxiJsv#FgZrgSzq-JMEV!EZ=)t9n4bk``I}zGRi&FYfT2_u~ z#xC&H7&D9kqhi?!y|PzVvYL8~-)Sl`v<>e z*h60OD=bUBz_y2>gcOluQ0oh$LAo2?P6iHwY($NwX*@Lz8eyUa3PsdD={Y~ahd4w) zyFm;OjZo0|s?4V=)BG{{E?5XubbSR5Q82LA(@rlAOlA zU;W-mYq7abesic*T=_2@#9(sN!0=j?w{jqfz^ORyZ1*#MdgRrt|-CcB9j8E zAZXA|fko?9#@Z+oiHoj=sA%Z3_rk8qv`M0cRBxOc6%a+JsA>Q+*NYgby@}oGjYNx2 zSA>=t;%kA|dm#+YZwVNr@q|3<=Wwdc+ev^clLbK~mWD#h$R!Mt5GC@jrRtV}D^GWP zvgq0JLfO)oDnk=-{>?xp(%f+$d9WTQZH0}s@h*@ij3`aFmiK#jQrs6F9N7r*N^B*S zKPVJ5iE-&Jc!C{Na>d>C+ic#$7<3HMg(`pNS;Ls5wqx&g_WOh(RUz3L6wR} z%Ea)S4OVlD4xZE!3(KvC+-!c=%AzVFb3C_-49Us?YueZnb)pcCsb%q2ih);fS9sjC zBfATdR|!=eMTpw$jGMVr`M7}~3A_H#wIv6~?VYk-Dp}I2nK@f>G9-_iWY|^Lf5tFq zY(sFK{CJbgmMW`bDYYq?_^MLP-judf+{PcNVL?efD;I{|aL&DG)o3l5+BxSS=!ZVm0Xa z3?IlQG?Ngy@vk*3V++xY6A+-9E?th#m^j}FWHr0s+kg5u9t^^{@#8fDQz)T}Xa+We zC#3C&iVF>U=PK-@f+?(yc6kodk?6PThsI zpOZH0MXa!L)i<>3zSmu6FA+nPR^rQIMpXXwnzoZg=)VvcAZT$oOKe69Q9fa_#KsB! zHj?j84gl50bJZec)%iz_KApmofwf^qHzjPa<|ce>QpK#m_sUG3V~{xSUJds~Njw^JogZ4t?7vw$gj zn-5EOmBhyTcBIh_ql`X8e_o!W!Cyl8AxDM9Sg)khs}ebh4Ar{r)g&f;o;RmX9_@Oe z&Cd&$jv>{b+qGk@4&04k7JrZlg0Yf9ga08&XHkG9W#VW6u|Dfi35FT5;1{- zL<~bFBC1GIK#ZF6V$eRk;pkKurz}dNRoj{_Y@8(D7OUb%~y0SxmmTqW+ z@P+Xu==e6!7=|9%(I=A_#I_^)o|OW}`VW}Ig<{u$JBt{>-uCKB%$j5L`SRFwFb|?4 z1aG_1SzuZ_3E#FpVA9C6BBRzTaUE7Kv*c>`6cZkb+7l9F5F12aPI#*T2-{10E#z{X z{cvqD^M|(#KS>~3Q@^DSM?&5pR!ZBjJ;W|99wb}x(w@)}#E`U%JUDI4t>6DC{f7`G z-hel;1{N-OO#!q$se`9m!}yO0eQ@dxFrg*v#vw6l@rkGFfcAqGDBzksZ}P?6{`4#I zpuKzmjYmZE>COFel;zfiQP7nEUU?7az6mu@o&>4U*{6*MU%&O4Th`;O(TR>Uc5N&% zT)(J|1a$l$m14rF5F_H__kkmmw|Ka&| ziOcuSr`{HFnKhwlXc}0y%}dYuo8TJw^U#~_p>Cw663cyg4XXxVR>fj*!)__7REmVWU62&|KR)I-0 z;Di-gpB;BkBc<{O>uWbm?^w3X0|CCg!Lha6X6TpFz$+*yNG2#k6B?OTUk${sU20~& z@NdOps*w|?jiU8m8yD*&=NK`wQZKNMxb78AQGe5uHo3T|;GnOL;pfpy9^45``^o1N z78GVXiQyjybB>6qQX)5}`O7w(#17MV_{Dz;^CFVYWOuzk;5z@If*xn_$V#(>}6 z+s<7o0V*rLUcQ39M9H-l1)=MXe8EguamZr~buKat_?>pZ5@6tev>O+I$#@1eJB^(! zZ_Wza&;?7AQeb&tI;|Ie6|HGDnk{LFCKgs@?MV1gu#sG^v?=G_!5J0OfOEO*)NS{j z%44`uGX;Yx)`G>~Nq-5^;{`Zwl?Jwf<5o5W_2o{t#|}UcB|wJL*ADg8FU7`%{_3=Sa|LiK_-Q-;xaQ4SLEL z;MTIv-MSSQaW`$oCCBQ1*-m=uUpy-jDhFjY z`ipZnlBEo?h?=xR5iX`{0kSourl5#45z3K!=NCOlW&I0Oa>t_87KtK*W8Hq=;)m#I z&XDep0`K&~)QKq7iJZMob&Lm`yZL z(nJyuOf4lY=@7oV``1rfD&Fo>@0gW!%nLfPV`swru2~d??!SlHNEl> z_qdM6NfVdBJHg-m#S)S}m@g;FX*T?R9BEtX`{dFA-G8{-tyodh!^#Q#-Pl$+|)+PJF8@1fwaeWp{q z8y%3(Y!oEps7F~$NSOjV`5T9yKHByqyJED_X5>&xGIp(GS%=ookrJ$tjF{~>n9?QH zi9)Rc-RfN>OOo(~cZhP#=7Vu=is9cmwyJns`bjWp{U}wEOR%j0O}$(J6%;qo#mF8E ziW?YJK#p4u9iKw!;$=HiE=bAU2dkNG1$%?7qD>R~%UpT22{|@P(B+spT$8J4*(sq3 zxXWY8=h*^x`5y35dJ1N#*NSgSJdd|`U3XLKuYLb{O8q9;-A#cHfip9Rz@7*g#;E6K ze{*;ZBeZ(Ks^KqzZu}1u7!Pa>mBPK?sBU=aRO0nY**yM)k3v;Z7>z(p!lPD&#q^od zq`giXE98*uui(}WOdY{FVd=+?542wd!oHM#b>y@t;3f7@e^DLyVoe;d07I>D{{&FZ z2L-vQ=fyg;Y?PE=Mn~SqJAnm;ms{xyH%SDY{hfteU5#;@$YedKz) z;Ek__Rvl2fWOGm?Rtky>-XFp^3Zqupgq)H5(Jy8w0Ovus>=?bDb${_Mm@}HVpFP?N zq|_kV@rO{kMw$iB3C@?W8yKbJ3KZDXJgYa@Kg+GoPRpV2*r=hAqd-)!$Z`Kh)>v>8_qeIG|Z{=7#mYoqxU z{HI|Gk&$HCmq_^QSj-&|{Gzgm_Xf`)sscub?>CxxUb}ZfW)N106$Ae4;Uwq;2MeoZ zW^lwAb9!vOd-Q!CB+6zhaGgw{{NZJ(ezq&M>o_3l@hM<~W01poKYw4UY!hI$HlB?E z7=|U*8?z=1KFaY&UhtY(UXk=5{mJ_c_c(8l28oI1EKwP?3_};qBY4UH}CF;TpY& z@*6tow=0b#JJjKsV!MmPXj{}d7Qp5MdkEwsyQ8Q`@AXb$8`h@7JPP@$mHd#J z>x-YW?D@u-DVaa*00IhlmHX^l9)PXWmn7WGJesMY=5RpF;q4SCpZhbFopAb5*DBGC3bwqGM1z z4}Yip=!f|`bag4mwE+EMDvGM8_n(4g&Ix>j*Z$TpkcqQwzcUjIYCqDe{9t)M%x)(` z0G>H(!mRbyc}b6)E^7k7Jt{>8pV2@BYl{NnL%GYcXlT3<0!*VAZev05$vhd!7gr8c zOo#`g0rJFM2@guB*z9U_&Mf`G%;GKlGqxHz6;TyNb0pg?EEW4M-OF4*iZ7cod^b>f z@!*v4>tqL`D3szxP88aAd;K?wi!n?LACz}(CJ5i9y^_XS{HLaJ;bjYHvB&5RqYY|H zIGm@txweJCQHz3%fM5jMca*7?7XpxCwlWVW&-eq88d>}y+tb7~J!wwU+b5>6x zT#Tk=2{n_Unf2l=bSK=>jxeOzs+U3BDsK(dvOw8tZ6VzP%0Uw|nAEC!IKMPH> zXeCx5$dfBI{t<1NJBX$ae z+&(0bR+nRU`9<7IUVbxXP9=|1GW33mK;K%6^%E+5xh95MvLPybxa2NL9w%U;jZYtA z4j{YaYC13U0ncqt-!JJs7tHtby3r@6D(NEYSx);DGc;&bU#~7%6bP^h^;drLIBTjA zG2s8|t_hoAH<8tg^;jDw9S4MF@UXW%Slq5#Y?ys^YK?kH^n;4!WA=B6@xQZWbs@#y zXb^t>hl_eD=QzUd<=qSO3B;3X2fh7+MZGj&r|Xr6MeyDov9Ti(v|F{F49JO$Qoy(L zJrxwH+iiHv219r-T(zY1UF+Kluv`Ti>&Qd9D#F||OdmVw&p8p%#$7k@7Y#d0b16t> z++%5qd$ocOaWm@2&1Vv-1&`*M7#nCq9ky0CPq*wLh*ssVZKO0C_$?qRQCNz{*!H{@ zyS;(dP>D(EIk0i`Wb!8LFOzuI0r-up)mqaxwH`u_Uhx5)r8RQ?z(?Q!*nNhw9slLg z`?@PPpAg&^d`PBo8a~_u`wo*~zNnX;Uh{qFZkCKo=>G!{YL{(__b!x!wFeU zB8sA>2S%w{J7p-0C}Q^Gz!b^qI|DSR}zf$sS3L(gP^j=j^mpi2c=0>7T5<}h<>vRsMxR@?cNpk+^jx42ZkrSjCRU*c+QqVlrtE&{v(^2%+>aBDb#*5MjjmxafR4bes;VyoI2YlvOat)y1pBfzTWsf$ttJf zmLe+>o(GK*PR2noBP&KN<|ag$qQ#Ko+cVw-52_6i_>paxlPH5K44EQBs9pblSP1@7 z`baqB6%aon3c2s=gg-w(E96ijCEUj{NK$lOklS{rGjUY@sMfi^fh-OVUumMXa7VQ^ z-DVbAIQn#S%_gFbfWsQr{`> zp1_+hGDUVSLHmf^=fGNt<{gTXj>Gisq`~cy66t0M4R_1PRVjE+_ zp5JOOkO6$1a%;ozU;wwxi#!1dz~efQU9uFzI1)|<5`O5RnF0)5Ubq1(VB3gOT*C%tPQ_0YqPgwgv%@uvi#& zh{__=cGz8VdPg_}1*>Go{St(M$-DLod!-PIe>(xF1aUgs1{J^Ey#omRh5{Qv;P1eJ zT(^es#{K$|Vetv7ZOQ591C4z>F=X*>7e9#@Da~W=03!*T`3u?wL0?FbSW*RI9thsM zqTe5Yw@3i3I>wK15BleD-j-g+kOr|voRHXSb-j$ZZ7KfPe^Or1`z&mtN05bOBmLs= zYG)7(+)+7f0@gMRBRNuP={yCthO*ta`nQ|Gju3Yd>BIbZr!*B2ZS`E8i zs2jO(Y8H_yZAjNS43G^Z^poN1gw!;#9lHYZas*S^hgJWI^Nrxc2=VwNz7a3MP!Gat zDux0Yb6GZ5U}2h(f-PO1tZ@3A-GT7yKG*4sqwPn<)9!l^Dc%Ao!4V~Z` z&x*WAoMR+OU28k$%&KiKUJ9s`TJ3F7gF)cl=@!NVSJA9J7dM$|n~9cr%2EE9b{Z|t zp8+`tqosZyU}!Gtf?oG%BqPK-F2IlS8L*O*CaPJTtjJ8>w*t_Tmz+C3Uu5P@tbjUE zBuLxwD^8Ge#l3h_ZJ$fzm6-evP5}%Oj%=}Evka0n!^2~Z@cu?BT(HMB)ylsv(7r^5 z^Rg_aGIyBjQ`A`B{^bgDde@&YurMR_AtqEyVr+hQ$t;y+x)ublQ~tN_22S$0u0q#d zR{Ug-G7 zLl@)5RABt*n7Ar4*d3Qn#R}aK2_2EkfU)IWveLeo?lh-$%Q zg|uLDpyVxWS)vgwet|o~gr{tj8iJB`2C?v%RJkxXx$CL0#cnFCc0|p5eQA3}>o8b= zu#(LsB(|k*UDrfKDj)w!=hRZWjrk}mtp?NkuWzr$Gqbx9f`byqf`d3^k|Bt9bmvKN2f{kkXS@!T&Crk0FfwjPzmpMVt1^`0mrs$pRS zQ;wXjy%2%LYy$BwLIg7CI6F)-kVz$1+hEHYiFvh zzrQ@UzrUr7>%Z;x^uGHXzP}x}zns6{pVhDXy#f+(mnq{}#l4Rw6@G8G=SuL8I0k;cXT&ZUGyfAY>xD$_L%vsRvWFV1-i@JlFHC@puAg3P;B>>R=N zdsJkHB<4b>WuH4rWswSwZrDCZ-Tla*u;%KWYY1R?+X`xbSTuO4)(sZl*=&TH8{5{9 zRjsUBHK38y=LKW2YF?2KdMJg)+pDG!Q`3xz39~+OP%s!F)EsO=f*PAXU zmL%fFZw3WfRS5A5i%wSj%{*OcU@A}jv*e(IC_iY!NEf-urfr~Xe*2*(_c)b^o4%SL zV@s;{K{V@Qh_P={+>MIr!+`lY@0+w5PU+Mx#Lpdk)ZEIq@yIPrZJi6e{0C&5-m2Q+ z5PG?o0+K92dH&Xoj;Xrm(!3&TTcXLUnv<7Z`D>-H2?vSNbQc7r#-V}(j0b$l)uni` z_^vSbGJ5_O8;3zHkqvXLds|44YG_S!onLTtGBWw*X)V+Ycg_l5ZHR?Upz*WOsj0ha znrrL|%tu$VFT5i|D!(OSX9EjG4V!2Mrk^1~4SEzgOi6v^3x%P{?jX^Z;EMWr_>kVWN`8=L;>!KiHL4c>9KXah&H2+sGNw2?3FFhL}nMT?4=czOUv377f8mD z9tZoZ-Ip`Ag=(2}Sb9)Ypo5?yEs@mJaDuoGpdy*LW-HTOL_m}R&HS%>6zt!f{4WjQ zz@LjZ=*HeE1Ic__7p)hmq`lCG2&faWG|IOhoQ-L#fAvxlkxkXeszULX8kpe}^o?Cb za7$XA*hnki)MRpB(kkQdS#a&s>2xzhIt|0`v?;+uK=hGA zKwty!xZAKeTbO+}``^gM?Ec;6L~AsPh#RLJ|4A6d$?fIyb{x&x#<)%5Dz#~567k=< z6V z-@os(d_Aw7FQ-~lJ*88TyTHi?Z7NrS8PN-=)YHj+);#o_-pVpb(U@k4wvWh+FY?RT zzK)pR2NC)gpdTe{a+Aqqd6z%p^&*5OG<1C930S9%?w9GJ%Es#_CJ9!yA~T5tybD6CuHJN{uCZ-lDyG@IM3asFi(Z*9UrucnctBraq=N8PV7lnkY5 zLlU_{ltD6OfvMCMEZ-cJvv$5QIMzh+1}Quop#n0-?Ggik^3)XPIUi0n08Fi`K9~ zodH$u%R_}wz*`|zWF0Ge{trFF2u&i;ox5?*phDftr<_@Ca+WMXueXcC>#%k~zng={ zZiDK^zaQmo;c3*=&Sv8b-d|tw*9_X_Sg0jDBN?urOc;aZ_xQqYKZv#?p=_f)lj`+wf#n?!rW&INI1&V17h+Td zoR$>813kX9XcUqOZb7p6-f@fk5`yByD%ET&^@w#{uiq#eV0Wz2ljy>q%*IHnTB6fh z$?%;6E2GSo1nL(4jz)0s^IaGJSZXFvbB^vK@TwPb(ws2j7~XH3)Sxu{L2@Ej_Gw`3 z%WZ}sq#3xxdXB*{1>uv~{bkbkN^?7hKzBU)2+Z~T#}5*#a(Xa0|ksi z5s*;uR|CUw-*hE1OSNszl724yTypOg50 z(wpr|1k@njlQCL*T4b$s*n`WQ<~+VQ>CZmAKbL%)))%TU8?#Qk*6zE#yA`!cYw->k zqCLMl$Wm^p+U1}~Iva-VZ5DI$foYkHhG#8WR&Andw1OO?d`SPC%D9q5#kB1}D@@0} z6gPpQEpE2jkrAnItM1N0n`4q6=JE+Qd!qbV>DoOmW?IR-v8*Y*7#SA)=+2-UBc38x zc%UtKzE(bS?0cZ@rj-Imzc@``r0|VM)rCOS08I=>-#l1#QS#wh5C?!{0%3&9Y z^*b)E`|jO_Wb1C2=#psYH{zsy6WrgmX)V!zkjB#fUwdC2Rn_)2ieMp)bf<)LrzoA$ z(jeW325AKZq(M9&-QAs{fYbqz&O;*&N{7JP8@#`JufO|!-}uIRZ@f3gd;GEYT64{w zbIrBSVXt*0J>GKWzrUem#L7t#>8v`@;NWiMVp-5Ek;P0M=3E)hHpu3OKhGrC2R+m3 zXm}5NL#bGAR8Q>4xgL&zWi3HPSNH0{1J$qXf{>GHtGl&~)Lhml_g4wp#$Md6rykb9 z&rq#%C6q~l9J?7p3Gpj}#A5|?-#+cR%^n@^8Qacm!0h`Djcb4;!}g)ZOUy^wiwTb( zk|#P~ItzBa;P^ys83-p(PI*fHYF@R({-WUXENKzV1W9W%d3a%%({ zZ(fG_JFfS!ze+5_jb1)+TX^1MG1e3^$R8U)EfA{Ynh|f3(#rj&q<28^AvuBKM8c=^ z4HlvJ0;I!cMK~|{NRQKP%Wvj6pBdMOo!_nn2`-@(?urdpFlIx}pE5g^ShLilV~@DY zHq8%vha!DqV@~bmP|#|6+7?n-sXSH1$#fT0ahT`W)m9JI)+S zWY~hK=C6{DRa5xdmEaldyi9l9g%M-!d9<=F`q0Md4PC>p60Vk|ontK9i_6S?udzZy z-_7N)=1{513H=BU7H{bHRRG!J;$0Ey7| zW@w-pLB))e@hlol`tCe!k4$ZSn!($f~jC^2R?c zzjF+xRYE8T2rAYH2x!;KuamR8jj7Ys!mGDoH^qm2>GSa%!_UKQocYU0TMW5n5@bQV z@sqjwX=2>8~9 zi7tnxnmxgeR9g%$Vf5Lg9isR^oPXKiB7mgc?Z}(bV2FK2?XqmX-WV!!xh4eDNWWa0 zIdZxs-991R+`o77KF4&XnY?}?(PX>xJB&$&nl}ix{}lEuf9EMD6VB^|{0(7dM}N(1 zoG(<00n$r37@_W+avAlBcivKal`h@lWTJnHnrSWQPs+!z3=Ge zuZZ))GKRMDC)(GMmVl>;(SgvBTlRX$1QH}i*I%mq%s|ng?fBPgm?_ zAwLiIc$Z5>cz?<=IIng#x&?f6OKnlFR^fOSw%tHron-LPx>x_<*;if<>w_>VTY-^h zg|)NXJ;wW+owpccKZRs%h$HE|9=s>S^2J<6x6O#?xu`{wIflb7x9fLa3r_^RN3ISj z=Q&;uVs*x8S^C%y@?*p@5zD%g$HTo&+sD!TWr*gCIeG83;x^kZpbesju4Eu+-XX&o22#lsuHZnZkH;+EZ%9n zy_MtkHhP_Jt_n@hE}&R~lPMmpQ{cNG5oe=sRf0=$$&g*OSrRkHp>iHJp=&aadcA+T z(?rXo1c52@L(Q#wQeH)PFVRZ$m~R*PPFKDC;P2a6_Lkbs^3Id6eGA*8&P4c9d4qQ$ z>2xA87M1=?9FTsl`dnr$rD35)0?+yk$Du45!2u?p$a; z@UUDo*ciE!r#)mjKP)Xas9ly5k`i-=FMDWqKd5c~<0{&1|MU@Vrcio!6-{SM#q(^8 zN}>3^=Yj&kH+iJlHqirx@829KzG3L1hTK5$c(&$F4LcX}vDDASd0GpdT(-s7Fh=TE zG-`y%H0iRE^UO7|Db81&9%%~X5g*t^DJ!YEB%(|n2e!26JJfI;n?g)Dbn_L6e}yu7 zJN2`LCH)^rLd5DEjeaN7G%~qSjEqAlf#^=a$wmu8`{w*%e5zs7t>!7c^OrI)D^ZH| ze5tp$^{^W$BV=IMh_sXkH??x26K3zsAh9iG6gr0~Xpw}7Et4{lxafGx?da4@WZqAN zYD!&jX^JOS7rx+KxML*_-!9?H6qCnN#>L~D6&TN?^tt8bM|*eprsXHZ=l8Q^?m{gx zBV6WGt0Lr)%LO=Y-Q4JkwdfAX=|-$b*+3Bd@_4L!)56Zv@-N`)qcK9~a zP#|3Q{jro}w4bd%1Em?S{Ea7#hO$C^5F%nS{HpO{yX_ygMmQy89_alTZHlX~OU}Z| zq4*U2FY!riOpiYH(wOD{co=Xew6v-)4gc$F``1h{(mB}_<)_jNpOgFBaC5YgZ9Q(G zt`|NWtRESRGqlH-dZaU#%hm18N+(Av&G#NZfF{Y{B}EufAL+f5y5I*s>rvc9cT`cS zF^ooTK17hBz=}4vdrok1SNXp0*CFNOMI!$P7iswUKc7gn{!E1{5eQK{Ra!@)c%FE| z<31US@U1HQCW0R-^79LIS%hy4Vu|N%BR?6iuZ&u*RUe?F1M&0raRpP z{(k}Jogj6UcwLSQm-!BlV{)L;bC#PdT9%ub@_W+c^|m{{SNbe4SoMNXC~IJuBeuJj z(7_sGb2xq8WciVd|Lk**H#%O@DKD1@pq15iuH~;RHTaqeM2DtrS+#_MUCx~2z6P?% zcR_LmfOA2k5Np`81xIe;en-WeEO_CBS>HZ~JUYNb<>lPWy+~j41sQRKWZhtF&;x2N zLRL&&UY#5h?q58bQnPH%OYzk5_WfnsLt~?^DjMQN<@on2lB}Y_Oy7=)L{)>z=N5yh zt(5uB3$SrEyo;h-Q{c?eCHMk555i$|4uvIJpNiS2M}{v8oMYuM&hafOS7{x>D(;GE z+68&DL?kpx+?LZUS?x1&+ThVvI`_kSdV>IXr*cOQg{dIzHMMjg9;($*_N`3@=JCbW zLBHw~&mq4A+$#H*1~Ai4vBn1VY0`$2P209l;5y-a8CV>rh=Wv)0N4n2l{)lUIQ0&l{o{H&Qfm@-5kurt<$cszG%5F)xKis*e&7ZBZ_<5?9)?zkRHXLV1o#{!bX#Oz4kICwr)t<{w}hlU9}M>|zKEU*d7a{b=41rZ?8~P{&%B@@EJ>;Cn+=oAIg9CaJ09 zXkt+!p_PH7upo3<__=Cy;r5RdXyB;zN$DbKV9i@bRr_p6USN$PK6}=XBlU#z zXI+<;#O@aiCo(Ev-@T*ekq$ahJ=E;3$A_t#e#+{4qtj4|aNkDDu&vkDP1es&rNh_1 zlF75@z&u{lk5ktxlZA1ncTQpQA%63O=6(`$7)JZd_{zJ?p<@Oyb)i!=N2#K#jlzt) zdmC=K`_A3uNlRSg;Cy^hQg8R#)|4{9sABZ&$Z|3ltaZx8l4M#Rr5|H<}Urx)6I>N zbx{|MBF6YEx#Uai1PEV>?|5;%Tv$zvm((zESqpjQ>Wbo&6xICY$B5WcTBg-&rX}gzi(b8e6WfDD>Ef14 zf0E1F^_L6zseY_7Po=|#PX*nn?=cCya%QA46ER_vdZlO@eH++D$g6Qae-Li$di!)F z&Dh1ek+Z6_M6ibYL&FExz=r%t-ymQcXYLy6jL=@#7D@?iaWNL;p>8~HAEQ}I zF#L+olK%Zri%guxy+70!HghX#&QXrG3LClDhj8@s^_OzLf6G-xVr9PxJYKH>58*h! z9rR9SiOxI!99h|DejCTF)N2b2ri9ewW#( ze9ih)B2}=7XOi8A6XW4;)^|4%-UxL-OQA8G!KB*cXV8}B83TPM$q8|5L`jPiUd-9m zJx+;Ot^Dv|$GE*0)HhwwZ;Q#1P(phJb3QF$=jeZp|ETGR;C?qF+L8J8BDFc`Q}(!e z>n}O0A`j}$k+h@77_F^2=%cH#JCEZ?rG|S?W=5Fi%)=XAa%~(bLGwSG(-ce`eoa+D zd1ShC=yDFZtkcxf8y+8<+cs^qSnBmGXqK$NijfkW+Mj)s(IorN-svZx*Ixj zZj5@r+@ODBNkuHjyfNFK8J8Wq#o>w_^LIaXt9G7!68w$z#fs@moYpO?C#` zWKYWZ)~9ihnUkUn;WINu`VNjNWIqV73q>hw*g~@CjK?GS1V`B^-#sPY+sw*xXX`#` zCjQE$e(-$P?RFJP&ZINmZcgK!YT;~-6F1k*v$-Gqr)^<08j=JKjmRipmv4Ob8(q1V zDwY|_6u&{%cj-PX;y&!V7VSv!>1QC-@?6t+uSCD@QuWNOQ*Ef$&wxYVThM?1nzVmT zs;U)89wuA_1iEV%*#nv5Z0e|L>g)`r5bJM!b`~Q`$fjDK?6eYrFlYJJY7RQiw6k*7 zLx)w=xA}1O_gSv8g8?+0bq?&#DtE)Wqr}Ct{f>zqNyoA19o}egrTl!yK6539a~zr; zHYa(!z1%q4FU-$-6y*i1#7{zQ5^g&q|2-1|EAWW;#nr4 z=3)`nkO|yG&Af!u?rZIP?g7RMJCl9+*)k^QMS3(&-1>9n_|t(WcVVcAL;i0i4U>-c z=-=+D_YBfc<%qPm3=iJ50*+@9=ali4!Cyok8?0Jp+jT?-VhKU-@BzJ#T0u^`%N zSW?>$6+T;9pXki49Q}bYTJ(dA(M|VW;qJR~jT3?5++B(97szM5EUx27YUXPdvw4uY zjDGqyvLjX0yBGLt_N*ybQx7^HNiH3o1PCa)R3vc|X1t`QxEGB054YZokIX=j|2++e z`Q;P?Zz3Rk1wOL>sw2*ZM!?5))~nmq{78DHXE()z<4s<6`P|}Tl#%IYJLQx`zpO6G z$74ZRo{T@!CLNjNp{O!4_i@g48e{HH^x!8n5#UL{opyv*$Q%!UnCZxuR5o-M?s8F( z+p~4|m{#||U_*1MtYrDm2dgaWWkU;kpZZS~AwT-!du}?KGaF)qXb{(DS!Ou}=R!?f zelV5O7i1Op?z@@Z$W+zq&QlH>R~KkWf&#R9iYki$W}o=Yv@DVh&f@!^i>LUqc{1I! z8lG)?!OXgQSQCjWUjtj4Fx48-dzSl2LAXAD!uxyTsq%N*4@HGJ+O^~qnwrI9Cmf!! z)bobPdMkR?=;`Cc#@&>7OYch4#xN^W^j&;?>33oy-ak<`y5ElWOd88BI*uiTCcB(- zv*o!;jt+fEUxMqq8cQ~<<-QVWI}s7hlF9?iwC?@Nk1t1_*=lpGj2wk39FX$e4&;3- z@vKe7vGUP|%8i)D;G@Wa0lY-q&k~+fE+hIQ+`)^kEhqW-ds?a^TM~&i6IuPOU-Ne= zS6_29Gpyr!8zW_weThqCQ6SoMuu(7B#T&2hyw`fdM8Xlj!);Z#V5P(J*3?D4M(JTt zsppSvgMHn0QvA(`uyGjQs4f*5%4@z65=%p4lbbHL1?ghhkO)ueoOVxU9z!q;*Vv0f z*i41yyXbEbNry=U61?IX3S+dZ{&olLF>wWZ#cGJ}-LK&vmE!hdFdxtl>RYrU({-_7 zYGq_)XiCNK3lEQkex(QW& zSu2A$ZVm;NM8g|AdLvDKyXR@;q%Y$nMugJtPtW6iH3_gKJsM@p<4wP*wuw7beE{g7Wsm9$G>}ek`#!G3?BJ5T+mpM&a?vTYqh2xL^0@L26=?Row?xxc)%>UNf z226@(hVWD|0+sM2H5fM?I9kK_)*$X6#u}Y9*3UUPBVZpR{+{x^;TI#** z4hC}M_F#l9KX%GKcFAFXDFO_a!WRf4Ed&mSekYGur*m=L$A&&rc^!Id92)&FYqj*f zz%WOzPLhrvkaoa)SgllJh{ujg`?Mp_+KXUfFSPQ0>uk8yoiWd5ePph~n?9}gcRPn% zQVf{zc4i($XTCCl!p2>Th;FY$W|QOxYtp=S(tK#FS9IH|)AiVoR@ebCOu(A9R#xc^ zHrXe7%iL(ABq~0%*N(bcvOiz0UyRb>L<*km*1K&=_a)OFjAd6k>cREKKRCw?`uw<` zWXp`IgQUTpI;PObJ8+>gTI?-L&g_C;Tl2+@P`5I@3^I0+X^49?mNG-Q0{nyTAL`az zep$%^uzZCAqyJF1IKXcklT`KW5`iB!Nv*nk`LoKBs^c+5I3g~!M94D*^{I0NeEG6( z7$$ey}376Q$e_%v=K)z)nFVm`F{Jo-`i)zGQdwthT7T@*xGc) zzeNms67^iBUi5yO%IKviRsKmm@c%VfiogYM0)J36ihG4Vq((OJiF)8+$5i6#J1;wy zF4|Jy_g!2#DcTxr-TPR$VhD&2dxI=4R3t9D-zC*O#<%0ZLCn?K4(vCul*y=Lx-X&$ zoU~aYy@ao>cH%$+?G{LWON@OknUaCsD~wLI(q&z@bxYVw1PRTW(^(4Y_B~`M;+|)z z0hz!#;?U~}SGJpG2--VSXicbkXfFGjud>n^-(zBIv)$CPVqoaWwT#o=%&O2YcI)|6 zk+hh}z!4u3QBpE0p{@J*9r**xwNBpU=}Q3voD07I8C)F8B=M!C^{MyRbM8_y3KGrt zhs(`kR6oT$Ne((zCGet5)i`dBz$J5YZGfh#AFkRvH!BzW5Fgx~*|lA{OJhL^3nAWk zkitH4qcI!*Yg7|wllk|cm+9%&4bGxS0S2#^eE)GRYumdJR-i{f*rC6HfO-8$V{B++ zEM{S72?6uLD|xEqo1~-J4qC6^T^GB;`1g(I{?E=@KYraj_m2;Ke}_H~21OtxieV#Y zId3PJ2|G4+I8eAD!9l&CXtv3U5&GWubmj7FPjU8VYH7>)#UgM}!4c#v_h{$C$tmop z<>H{z;NrZ|?efg`Jks~){&wQ**jCLW+y~n*szcs{r@3Skm3t{d3t-;#fgt;f$i^Bf*28xl-lU~-~lUwX9Z0DGJ ze|CKz_mX4o-D&@MgB@%h^CDf{uRvJrzT&;)SbI|KKd+l7LFm6gbnQQp*?mQOQ!)4c z)jS>}yaHkEnYaH0nv%V#e`zu>@Fs{VyDO@@D{8qb>bWZ#x+|KxD_XiM+PW(`xc9H_ z&_oZ|g>y;UJWtSz3r|F@@BaWH6kYQN3U%fIruk1I;zG?adVs)oX8^~~9cx$~fKddTJ%H9P^IY@Z^(X(to;;_@Y~FrH%gWQb!mx zgDSownL!dV6DDDIJCiqaAaQ=R@5R2^W7&UZ^G~e*?|>!m@V}8NP9C0=`EOoG#-3Vj zWsUxM`I0y>o47Wccrx3F{QL{Tto)7H-W#*>h_k(jv+_u))^ydbD*yLg@T*;wt^e0v z9CRD=szbH^xNMm99heOqn2j8mO&mbr?@&s4AC~gUmGWAb@`jcUPf8T){hzzwTWz6K zAHLQ;bL1?seg1Xk^5&K|p~Vi2-qRp({EX{jCij!u>K1xEJiSJ+-8E=*J8F_two%N& zZFLj@b`^j@RbbGOwEba!}qiD0`+P|bGKC}~fFn5Nt6I=U7-y+9B+ zDK2L_YM3;nK}^YQbq$>#&h7}O%n__|4vO7Y8YC5M5R-E2T1Cf&Q)UQqIR^!7D}5zJ zY!DN1>smoSn5Ik-ta1u+-d6fT+FCEh>(=!RePo(4L6FNS$Yfiom(;IbjMc4c8NGU% z5-M2b7^JqX)I%y-FGlCqwS@j|nleU^%P~lNTd9i_v0jYat!ok8WtuWVu*xBbYg?&< zw6#tQ->u8YLN;|fT#oc+h@7`OE6agQW8F>CX||i;xoNM71Ji!s?Ay0ta_vVB%vvmj z)6e8Bgfq>oE`+nq&@YB_sSv+mf9+Md%@ElhpFy#aa!)3V;a&!vXc$9^kzD`>(DNX- z;a8J2l2^v`rZi5i)|e82vY|*RGUB*$D}dW0_gkM91SY~NKr0|Ycw4=%>tvs zBUi(4)yHqxC7zfubH@TNkMK@xGh~92ri9-CeH;^5dOSew!={6N@T;G7#f@KWB)md4 zjNx=METspy-{bHIdB~na-?f@wdQDFYB~T3$9pBEcxbD9O`k*$W9UAQ3b9{N#?eRvK zuN&w(a1<#$K*cA8*>hgpb5RUq2z2byzBXkP6lTHS9>2ga3=9((S8M|{(t>}{jLCzO zpqVgy235+gBa;_N#fljirmEb|2l!@CTo?g_xtd4A03YQj<{)jkFb2uvB2N&DzROjy zn6?Aw)`a7g66>#AuKQZQ(6!{iVJ9lUWmn|a{a@%A6gueDfGNGZWy?y|pzCT#uDL?n z*qPXK;(d%@^K4hP!sexa-JgR5q2$Kimgq7Ko-!{)e=`p&9YtV-6xv75Zy_Xrup; zAJ8uZ!e9(=#2dl%NeBIxt8@e;lmf<93P=VO11HG-b^NZwyAc`oOW|K}8@=XX0;|_@ zZq{;X)^csuaWjR_7B$TdGG8jCZB?I}0t6aJ0n+E|*N0rO=Aa5`i{(9%TSwnJ-`TM?a@scF zYSqn^s)^MW-G==pxgmp+TVL#qSo5Zv*I4634>s%!Yd7Ma0e6u!17GV);GtG=ZESW@ zrR4&O4s<+$PQo*wLwerub4Ct6xfj=du(9jOTE5W_+i4DrKX*TAjzc(HSw7NN8Bb~1 zFEfZc@?V`2gaSK5+s? z(ynctSfj#A0d$-XS7J}E#0J1q0g-FIAkN5ri+%(6D<3_e$-WA54qOB|YnZ2l6ze=y zEB6mu(cIgRebNJ(76U#iiOx788q!nl@XxcwM)4-6X|g(?9XN>TAG$J|X9hHFZ?$$Q ziRvHc2(xTC>b=l9GE6QJ?^9~^IpG$L#6EVJL}HIl7E?n7U0hU0apk7bXg8A$hVbYOcYY?cK1TLj8FQ9o zHPowUUsP(HsXyq!j`wE(fK*7b>V*s92XkMB*zA1 zQmr;9r#Z&#@EAacG}qp|Y1jjB9`FY_-@=Ri${$<1R``rcS#-M0GS*u5F0BpKvUbQ5 zs_C=h#0F@*eH)`m}dYQY|d-yUDqzG-0D*gut0bXfB|J` zZ~zulNjjn#@ZsvLK;lCfYwRr`Y5>8L3`{#<=GYL90}L=k<12(}AL(w(jw|S;VS(OA zqmC_Wu?IYvjAGaW{RpV!N$9EyFrgrz-He+OwWMlgGu;8CV-p2l`z5R{u>pZ@8p!%r zpRdh*L(~=vBv>1**R+Bb;2jfSNT{2QV>@LSS#@6+SzAH zt+Al&prY*Yfd0tNzVbtPSSGw0_KTqsyW0sf#`;f}&;hXKAv_!K|PyLJlEN{R& zdTfS07p;WL&@&@|hiz^3@H9hZVny|Edmk8iKqTTSo2lIdAbBc8qZ@V z1OelK-2~p8@7RPPT_Hw(2lNh?UogBjTxg~afPY>+O!4X(T!Dor>F_u*3xzL&*=f;SQ!kU#GT>bKLnAoUHZ@_^!u`(z}GR`J<%Cugbc_!d(U$&CTzyY?t zK7+02zlz)tK-!74q@I;N!VrS6O_eim)Yfg`+p8jUnyMyU0`cmh-{#ul1R!9nl{0K*9T zI2;uuhjMjA9GT8-2nExHOk|b;WmxjKU`kYk{i%-U(gitMk{#U{U-HLj7r%R-Jmm3m zzq{e|4X4e?bq?u3i|;)H=+N0ayfA{~ZpRZq zjgwa^x*gk;rQ=3Rlm^V?CoYbmc!YFAO}YB`dTlHZO2?mVQqIZ)IWe8_x}WhMi6iOn-iP|b4!-syDDf5VaZxIMdjEXHZ+F`eRkYOw`N#71=14sS= z0eM;j1_b940RQZ0)(RX%F7yP9(72mmx|Hl??h6`JX$MVru8;+d)0#IUoS>UM1!CDH z5n)E?LD#ekkY>G0Wj0Pt4`QlH0tQT>W`z9o?fW3lZ^c@Y=sha^Ks&$%;F;#-<_7W) z0ow>-fM(by5NNc2g|-U-cFzPU$4>xk-AyY1+$xj|FoaWs*i3amoBm9ZYe-sjqIDs5 z!|?Qj-Ej|61X&GQhb3?8>3J|y5jCzHjp9QI!*d^H_M+K-j{ujfOxrH3(VemRw$t-t z0D)GHM%Yznrk7PT)qnxRKg6TOpe1D7)UeP7ZLpY{doM44C3~WbB~;&iQ%y%?2}>R8 z?7TrkGwxP-g^WyOGOTL%osDLT!Dd9Q$82I)Z4d4A2DX(Xo*T@SLD-dLr{|~vtC8s^ zq<%%VGQzf>yv6}$$s55eLa;XazOdpa+G zwsFKjILfT?uKnX1C&Tkcv~3N`1V`&Ct}yjX(-%di?SLK>3Mn3M zJj}_*H4}ss_D&R?nnup}hc(D*2tnRTm4wP|PJ$qV>EQ8V4Ef+3@j*$Rz_BId^gOr2 zSK(z0l#h)4P3dYzsgNgPrL{NxCP>^NmXXPt;akXVli_8MMfK-Gk=QbkfIWBLYos(0 zjVfp?OSb#8v|^1;+~Jvdkh(Py+bic=*sD%ymocND5#BvNP@&8TEeu><>aMilBq=3& zUrCtoHfX$6z-44L3EK$vVA1J?D`Yrqt$ACZ~45n0hR7aoxn!eUID{qJC9T8(-v@e9KYf zL%{Y>t|fEMZ$T>>ot?xy`tOKA8``~OfoU+LPW|#lfonUYfsq&VzNm=1nVVg7Aky*) z{M?S_i+Jd`ZIhL>64@>E4b2>e=zWjcdfG+57l`id5bx*pSO>s0<8fly<6L;K;yWgd zS7Z{KIfb|Hy*t;^DZ$2NjIQ#)*Q7V9Or~ug#S7=`VGav*QB@NQ z?m=VHM+9G%sfo3@*#A`8JJgS zB9mbvvbCQZ7z)y5%!Kvbc2YlltNfhacTV(5ym3HVUJgx^@l3xK`V`fY6TKVKzS5eL z&BwoGC}^MRyVB8oU_Ujo%}vcPi?0(orb#myp2sYLCN&u*)#KeJ7Yt1eWPE>+cfWu> z!Yw@2n9)icdn*tNChs4^lNrO4Mk2dl_G1)AijT2xMzd)onvb(nO}W8dMLb0%?Q@Y#EZU2qB!iJpd7Bes9TZlzF$i*I7qD-oy;Ke57tbdX1+THfnB;T&{z^Ou}a@z>{Cr z%SB{K5YA<<>!MkE-HwIG^=X!{Tf?8&$4@kFJWI5{;$z9e2jL#OBGFWB-^I^z@ zYmkkIAu^V}JTzqT$Ngvp4j`Aaf4&YReA*V%c}lBhg6 zYw3?O0=Ess zi1Nh;C&R#zn)+#I0=on^k>%xi5R@)pgasH_6XqO7xUZx*NeRei=2dIr|{plNI8O`cJV z(#RL(HVJVaB5>Ekba)WyW9P~6yI=O-4i7}Zy;>VE{o3*}ofBDmUH2I%dCs}k>4E4& z-%66AWk%f2&ukhdemy6xyd%1oGlkuF;1VuCBuNVDv_F)WY1nuJYz}_S%XI8eJ1cYq zEfBF)O*0$@=YfJqxBz3WUiG*P={xBJpUH2J+g$I+))F>uVVK-;Bn9Q_6eao)xu~J< ztaJO13}DNYzCWXh7=LXdT}$gaq?j2Is4TTs1C%-L^}HmBQR_fPt6^p2^7C*|O(?j; zfa-+9fazBcjPPq0kD)FDieVcS5@rIkvV+Bbz%sYx^I=L(;k1xnJffja)S4N>AUoZ4kAfA!khyk6ts7bs%)0%=@Z5c|V_8{|jwk z`7g&F=8>>WPWCPXUVc<|B?$-$uwr_0g$aZ6ZMneKm&@i743$pFB%bv0#}WOVUUljy z*UR%`bf|%d7_Nro(Om=_4 zYTSSIYh<$=WiJX~JfJRUEMSCx;e##KBWD{p4GC~DBpbASqvtsCv@t?VEa0j>E?EIp ztMP{nP_>9t!3x2w(M>l&2nW`(gmPWlRIYHv3S!_9?Z8n7e6Bgp0*dYRJXU0sil}Y* zcvT)oT;&pKbp9Af=%52;ke+jOz_?DFj7@B;#q5E*xS&o^*K0G-jizP48O z5m0iBYT+?CpaRCckGdlgBmF~}H0pI!-eh&MILQsU%3XVI@hymR<+(?eM5)(B@IM9e z>WwTmT`vO51!M===H76UL(@iD1>xKB{WlgNGDF8SjaX6vS|u@xfbubL@L42os>p4M zIX__h;={&-(RJyIBpq_wx(et`V-2(7~**4ULUE?UH<%!?)h= z_)aPYn8D4&wOk-lwi(kk5?G8JN9wXIr$PTJ{05|Z4~{$kecUxet3hD{2ncfda)E=~ zmD{TQ`*IxQ-Zs)MXQvbbqNkV{fMQdOVFP$%5qh1s(}SR{U^f3kxJqoDze4{+t%Ao~ zQ87MNB^hLF{FXaa1)2VvL?Et!#Ay}%^?Ivo)>qXHwESO2<>p>Dfdu*s^vYDABXTYyro zefx~l^@Gk;d9jtsHflgt`g%R*`=%7vmBiKfzZZLIhIpE0y ze>@n(UWkx&M?UaLZSMrFg97!ddJhiW%KHPq&<)I#>$p^qzQcQy-88%b2T4_cRVG}M z5!Cn|6_7tUg{~i_H~_n(vYP@D>J=A^L8;flWxis<;yni{KnYe|NCOasKd?Po6c_T` zhSaz7fc4V%bC{+!=us8m(}pC|6{$9_5l~-d3a-+SR}WMXOD?n>m?d^2u4-4<*o|ui zTX|Jszaoz%cV#}ffR+Cn5cm}N2XL(*d8g*@M2VxISv7#)u5;^3hbzOKfb<0oX9hn> z{=s1x(CR;t^`B!}06DfvoPg4E0TX% zAjr(T2sE|vh1QrrC;lpqh+GnVsEzpCmLzyAW5ZFcEY9X9Qdq_-oU6AwV*M z%gglxQf(Dr!_rlaS%gBtr30)n|6L2N1vC=?s)C{=L%XVDMZ*PM%nWfQ^X+<-O6lfrE98Ue^RlSR!|GeQO%B(j<0eBtN64-Epg>d(V ziJh^Mqn*7ItFfJ8WbG(vCqdB4#N&kP z+f4|ti?0xm^6J0oRIWy==>>S&YSo(oB-1ile?B4}+LSdJw~Uyqz5#_yoI z7Ng@ftfT8xzM}Jy3w6f<87c?ihrIF;#vCAI`24a+#AV<{)<>ns$UQ{zh<+{2c+Qp= zB&)H}mAzZ}uE}2V;cT9mnfVSq4B3{rgsq zm!_Xru6R6!fSePolY`2jZ{< z*WBfbfp_*9?0Nm*rL44{A_j5zZ#Hikvk3~y6@=<7R-jW)%%QNSE>nrwiCUi5V7eu4 z3}H}F-!||=Awwyb!p1*cO4k1T)yO0?miC_F>%8|<*|8>8HZRTcw^VcQmEU-3Io+eA zK02q)7K!Eo4HXiJt25rGh30NWD}{x@B4%Z^Zx3x`p7niD@T)!@ulYhWSCxHXrhtmW z_~p?SssL@S!n@((0U=44XS0%HLP7P7ptv`h8gqBwc`@b@2h3FAj!SF1G;Myh4x<^v~ zLCoLO6~!m?(onqAVVb+oXS=ndLhMwzm||B%UQ1qqFe@AiYzi4m%{?PeKHhD8_i2^u zXQ_ihv2R+V>;00KKkUm_B&tg&jowFiHLaGXK?ch+He^^fW(s#-x=*amj-4OB+5hPU zZRy{e*CMr&edLXQ4xH6>oy<27nSpot|2W4BBRh*d5=iHO+t=rK{TV>8r6Xns>{Wv} z8>qS4n>y)%`K=`PcLvq!Y}ESzsytAWf!$4i`Rf8^$n_?`tF3>(6ArbepcnusPWqMF0jwee<|^6L*t)Y8GkqB_ruWsWJLJx#y=g6_B(^$k8}BxL448`gFg>< z`JMFlEvkQ#UglntTKu+Q^>+@xZ{z%v18M#hhyQ9*=f5%hZPVkQ3?CO5|DphpF^xrnr{m$X{%`AU%xGeiO4p&=Se&_J})`vei+^@Xi@VAW+zf=GH z>E%ya1cZpG8wmgQEb}}0-xr?0l4H;Oh5Xktq$GC>m_^{s!a!IBCdup^_)zpe0Lspg At^fc4 diff --git a/tests/indicators/m-r/Rsi/Rsi.Tests.cs b/tests/indicators/m-r/Rsi/Rsi.Tests.cs index ea7a5d400..7e416c0c7 100644 --- a/tests/indicators/m-r/Rsi/Rsi.Tests.cs +++ b/tests/indicators/m-r/Rsi/Rsi.Tests.cs @@ -77,11 +77,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetRsi(14); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(488, results.Where(x => x.Rsi != null).Count()); + Assert.AreEqual(487, results.Where(x => x.Rsi != null).Count()); } [TestMethod] @@ -91,7 +91,7 @@ public void Chainor() .GetRsi(14) .GetSma(10); - Assert.AreEqual(488, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(479, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Slope/Slope.Tests.cs b/tests/indicators/s-z/Slope/Slope.Tests.cs index 98070dd0a..feddf7b7d 100644 --- a/tests/indicators/s-z/Slope/Slope.Tests.cs +++ b/tests/indicators/s-z/Slope/Slope.Tests.cs @@ -58,11 +58,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetSlope(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Slope != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Slope != null).Count()); } [TestMethod] @@ -72,7 +72,7 @@ public void Chainor() .GetSlope(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Sma/Sma.Analysis.Tests.cs b/tests/indicators/s-z/Sma/Sma.Analysis.Tests.cs index abc03d908..06ce04785 100644 --- a/tests/indicators/s-z/Sma/Sma.Analysis.Tests.cs +++ b/tests/indicators/s-z/Sma/Sma.Analysis.Tests.cs @@ -41,11 +41,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetSmaAnalysis(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Sma != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Sma != null).Count()); } [TestMethod] @@ -55,7 +55,7 @@ public void Chainor() .GetSmaAnalysis(10) .GetEma(10); - Assert.AreEqual(493, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(484, results.Where(x => x.Ema != null).Count()); } diff --git a/tests/indicators/s-z/Sma/Sma.Tests.cs b/tests/indicators/s-z/Sma/Sma.Tests.cs index 273fd9f83..3219288a8 100644 --- a/tests/indicators/s-z/Sma/Sma.Tests.cs +++ b/tests/indicators/s-z/Sma/Sma.Tests.cs @@ -78,7 +78,7 @@ public void Chainor() .GetSma(10) .GetEma(10); - Assert.AreEqual(493, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(484, results.Where(x => x.Ema != null).Count()); } @@ -111,11 +111,9 @@ public void Removed() Assert.AreEqual(251.8600, Math.Round(results.LastOrDefault().Sma.Value, 4)); } + // bad lookback period [TestMethod] public void Exceptions() - { - // bad lookback period - Assert.ThrowsException(() => - Indicator.GetSma(quotes, 0)); - } + => Assert.ThrowsException(() + => Indicator.GetSma(quotes, 0)); } diff --git a/tests/indicators/s-z/Smi/Smi.Tests.cs b/tests/indicators/s-z/Smi/Smi.Tests.cs index 34e681977..da100317e 100644 --- a/tests/indicators/s-z/Smi/Smi.Tests.cs +++ b/tests/indicators/s-z/Smi/Smi.Tests.cs @@ -57,7 +57,7 @@ public void Chainor() .GetSmi(14, 20, 5, 3) .GetSma(10); - Assert.AreEqual(489, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(480, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Smma/Smma.Tests.cs b/tests/indicators/s-z/Smma/Smma.Tests.cs index 44a6e0ffe..0fcd08cf1 100644 --- a/tests/indicators/s-z/Smma/Smma.Tests.cs +++ b/tests/indicators/s-z/Smma/Smma.Tests.cs @@ -45,11 +45,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetSmma(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Smma != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Smma != null).Count()); } [TestMethod] @@ -59,7 +59,7 @@ public void Chainor() .GetSmma(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Stc/Stc.Tests.cs b/tests/indicators/s-z/Stc/Stc.Tests.cs index 764c24c2c..88caa0b13 100644 --- a/tests/indicators/s-z/Stc/Stc.Tests.cs +++ b/tests/indicators/s-z/Stc/Stc.Tests.cs @@ -61,11 +61,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetStc(9, 12, 26); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(467, results.Where(x => x.Stc != null).Count()); + Assert.AreEqual(466, results.Where(x => x.Stc != null).Count()); } [TestMethod] @@ -75,7 +75,7 @@ public void Chainor() .GetStc(9, 12, 26) .GetSma(10); - Assert.AreEqual(467, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(458, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/StdDev/StdDev.Tests.cs b/tests/indicators/s-z/StdDev/StdDev.Tests.cs index 62e14fb5f..4f3656ca6 100644 --- a/tests/indicators/s-z/StdDev/StdDev.Tests.cs +++ b/tests/indicators/s-z/StdDev/StdDev.Tests.cs @@ -61,11 +61,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetStdDev(10); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(493, results.Where(x => x.StdDev != null).Count()); + Assert.AreEqual(492, results.Where(x => x.StdDev != null).Count()); } [TestMethod] @@ -75,7 +75,7 @@ public void Chainor() .GetStdDev(10) .GetSma(10); - Assert.AreEqual(493, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(484, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/StdDevChannels/StdDevChannels.Tests.cs b/tests/indicators/s-z/StdDevChannels/StdDevChannels.Tests.cs index ef32906be..6b9de0a80 100644 --- a/tests/indicators/s-z/StdDevChannels/StdDevChannels.Tests.cs +++ b/tests/indicators/s-z/StdDevChannels/StdDevChannels.Tests.cs @@ -121,7 +121,7 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetStdDevChannels(20, 2); Assert.AreEqual(502, results.Count()); diff --git a/tests/indicators/s-z/Stoch/Stoch.Tests.cs b/tests/indicators/s-z/Stoch/Stoch.Tests.cs index b95e4da71..74e23f02e 100644 --- a/tests/indicators/s-z/Stoch/Stoch.Tests.cs +++ b/tests/indicators/s-z/Stoch/Stoch.Tests.cs @@ -106,7 +106,7 @@ public void Chainor() .GetStoch() .GetSma(10); - Assert.AreEqual(487, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(478, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/StochRsi/StochRsi.Tests.cs b/tests/indicators/s-z/StochRsi/StochRsi.Tests.cs index cf804806e..4217d704d 100644 --- a/tests/indicators/s-z/StochRsi/StochRsi.Tests.cs +++ b/tests/indicators/s-z/StochRsi/StochRsi.Tests.cs @@ -87,7 +87,7 @@ public void Chainor() .GetStochRsi(14, 14, 3, 3) .GetSma(10); - Assert.AreEqual(473, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(464, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/T3/T3.Tests.cs b/tests/indicators/s-z/T3/T3.Tests.cs index 7369b387f..3ac3ae88b 100644 --- a/tests/indicators/s-z/T3/T3.Tests.cs +++ b/tests/indicators/s-z/T3/T3.Tests.cs @@ -53,11 +53,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetT3(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(478, results.Where(x => x.T3 != null).Count()); + Assert.AreEqual(477, results.Where(x => x.T3 != null).Count()); } [TestMethod] @@ -67,7 +67,7 @@ public void Chainor() .GetT3() .GetSma(10); - Assert.AreEqual(478, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(469, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Tema/Tema.Tests.cs b/tests/indicators/s-z/Tema/Tema.Tests.cs index ad027456f..455662135 100644 --- a/tests/indicators/s-z/Tema/Tema.Tests.cs +++ b/tests/indicators/s-z/Tema/Tema.Tests.cs @@ -47,11 +47,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetTema(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Tema != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Tema != null).Count()); } [TestMethod] @@ -61,7 +61,7 @@ public void Chainor() .GetTema(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Trix/Trix.Tests.cs b/tests/indicators/s-z/Trix/Trix.Tests.cs index 939984142..20d4bbc72 100644 --- a/tests/indicators/s-z/Trix/Trix.Tests.cs +++ b/tests/indicators/s-z/Trix/Trix.Tests.cs @@ -57,11 +57,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetTrix(20, 5); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(482, results.Where(x => x.Trix != null).Count()); + Assert.AreEqual(481, results.Where(x => x.Trix != null).Count()); } [TestMethod] @@ -71,7 +71,7 @@ public void Chainor() .GetTrix(20, 5) .GetSma(10); - Assert.AreEqual(482, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(473, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Tsi/Tsi.Tests.cs b/tests/indicators/s-z/Tsi/Tsi.Tests.cs index f096eca53..f2074c78a 100644 --- a/tests/indicators/s-z/Tsi/Tsi.Tests.cs +++ b/tests/indicators/s-z/Tsi/Tsi.Tests.cs @@ -60,11 +60,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetTsi(); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(465, results.Where(x => x.Tsi != null).Count()); + Assert.AreEqual(464, results.Where(x => x.Tsi != null).Count()); } [TestMethod] @@ -74,7 +74,7 @@ public void Chainor() .GetTsi() .GetSma(10); - Assert.AreEqual(465, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(456, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/UlcerIndex/UlcerIndex.Tests.cs b/tests/indicators/s-z/UlcerIndex/UlcerIndex.Tests.cs index 009f3abf6..7fc7f055b 100644 --- a/tests/indicators/s-z/UlcerIndex/UlcerIndex.Tests.cs +++ b/tests/indicators/s-z/UlcerIndex/UlcerIndex.Tests.cs @@ -39,11 +39,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetUlcerIndex(14); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(489, results.Where(x => x.UI != null).Count()); + Assert.AreEqual(488, results.Where(x => x.UI != null).Count()); } [TestMethod] @@ -53,7 +53,7 @@ public void Chainor() .GetUlcerIndex(14) .GetSma(10); - Assert.AreEqual(489, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(480, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Ultimate/Ultimate.Tests.cs b/tests/indicators/s-z/Ultimate/Ultimate.Tests.cs index 5c4fad60e..32592456f 100644 --- a/tests/indicators/s-z/Ultimate/Ultimate.Tests.cs +++ b/tests/indicators/s-z/Ultimate/Ultimate.Tests.cs @@ -37,7 +37,7 @@ public void Chainor() .GetUltimate() .GetSma(10); - Assert.AreEqual(474, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(465, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/VolatilityStop/VolatilityStop.Tests.cs b/tests/indicators/s-z/VolatilityStop/VolatilityStop.Tests.cs index f75a13549..08f1ca6d9 100644 --- a/tests/indicators/s-z/VolatilityStop/VolatilityStop.Tests.cs +++ b/tests/indicators/s-z/VolatilityStop/VolatilityStop.Tests.cs @@ -74,7 +74,7 @@ public void Chainor() .GetVolatilityStop() .GetSma(10); - Assert.AreEqual(448, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(439, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Vortex/Vortex.Tests.cs b/tests/indicators/s-z/Vortex/Vortex.Tests.cs index 190f21991..aa9b255f2 100644 --- a/tests/indicators/s-z/Vortex/Vortex.Tests.cs +++ b/tests/indicators/s-z/Vortex/Vortex.Tests.cs @@ -72,11 +72,9 @@ public void Removed() Assert.AreEqual(1.1163, NullMath.Round(last.Nvi, 4)); } + // bad lookback period [TestMethod] public void Exceptions() - { - // bad lookback period - Assert.ThrowsException(() => - Indicator.GetVortex(quotes, 1)); - } + => Assert.ThrowsException(() + => Indicator.GetVortex(quotes, 1)); } diff --git a/tests/indicators/s-z/Vwma/Vwma.Tests.cs b/tests/indicators/s-z/Vwma/Vwma.Tests.cs index ad9b4e7dd..3a18e9ab0 100644 --- a/tests/indicators/s-z/Vwma/Vwma.Tests.cs +++ b/tests/indicators/s-z/Vwma/Vwma.Tests.cs @@ -37,7 +37,7 @@ public void Chainor() .GetVwma(10) .GetSma(10); - Assert.AreEqual(493, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(484, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/WilliamsR/WilliamsR.Tests.cs b/tests/indicators/s-z/WilliamsR/WilliamsR.Tests.cs index f66c5a324..3eb09993c 100644 --- a/tests/indicators/s-z/WilliamsR/WilliamsR.Tests.cs +++ b/tests/indicators/s-z/WilliamsR/WilliamsR.Tests.cs @@ -34,7 +34,7 @@ public void Chainor() .GetWilliamsR() .GetSma(10); - Assert.AreEqual(489, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(480, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/Wma/Wma.Tests.cs b/tests/indicators/s-z/Wma/Wma.Tests.cs index 76fb4a853..67407a0ba 100644 --- a/tests/indicators/s-z/Wma/Wma.Tests.cs +++ b/tests/indicators/s-z/Wma/Wma.Tests.cs @@ -41,11 +41,11 @@ public void UseTuple() public void Chainee() { IEnumerable results = quotes - .GetSma(1) + .GetSma(2) .GetWma(20); Assert.AreEqual(502, results.Count()); - Assert.AreEqual(483, results.Where(x => x.Wma != null).Count()); + Assert.AreEqual(482, results.Where(x => x.Wma != null).Count()); } [TestMethod] @@ -55,7 +55,7 @@ public void Chainor() .GetWma(20) .GetSma(10); - Assert.AreEqual(483, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(474, results.Where(x => x.Sma != null).Count()); } diff --git a/tests/indicators/s-z/ZigZag/ZigZag.Tests.cs b/tests/indicators/s-z/ZigZag/ZigZag.Tests.cs index a220007c4..a6867ef44 100644 --- a/tests/indicators/s-z/ZigZag/ZigZag.Tests.cs +++ b/tests/indicators/s-z/ZigZag/ZigZag.Tests.cs @@ -124,7 +124,7 @@ public void Chainor() .GetZigZag(EndType.Close, 3) .GetSma(10); - Assert.AreEqual(234, results.Count()); + Assert.AreEqual(502, results.Count()); Assert.AreEqual(225, results.Where(x => x.Sma != null).Count()); }