From 2b4e8e3fc3bf730fd9312d8fa7e48f06c97035ac Mon Sep 17 00:00:00 2001 From: Miha Kralj Date: Sat, 29 Nov 2025 16:43:52 -0800 Subject: [PATCH] Add UCFG2 type definitions and lock file for QuanTAlib - Introduced type definitions for various classes in the QuanTAlib library, including Ema, EmaVector, EmaState, TSeries, CsvFeed, GBM, TBarSeries, TBar, and TValue. - Added methods and properties for each class to enhance functionality and maintainability. - Created a lock file to manage dependencies and ensure consistent builds. --- .sonarqube/conf/0/FilesToAnalyze.txt | 10 + .sonarqube/conf/0/ProjectOutFolderPath.txt | 1 + .sonarqube/conf/0/SonarProjectConfig.xml | 9 + .sonarqube/conf/1/FilesToAnalyze.txt | 33 + .sonarqube/conf/1/ProjectOutFolderPath.txt | 1 + .sonarqube/conf/1/SonarProjectConfig.xml | 9 + .sonarqube/conf/2/FilesToAnalyze.txt | 88 + .sonarqube/conf/2/ProjectOutFolderPath.txt | 1 + .sonarqube/conf/2/SonarProjectConfig.xml | 9 + .sonarqube/conf/Sonar-cs-none.ruleset | 502 + .sonarqube/conf/Sonar-cs.ruleset | 502 + .sonarqube/conf/Sonar-vbnet-none.ruleset | 243 + .sonarqube/conf/Sonar-vbnet.ruleset | 243 + .sonarqube/conf/SonarQubeAnalysisConfig.xml | 279 + .sonarqube/conf/cs/SonarLint.xml | 1144 ++ .sonarqube/conf/vbnet/SonarLint.xml | 601 + .sonarqube/out/.sonar/.sonar_lock | 0 .sonarqube/out/.sonar/report-task.txt | 7 + .sonarqube/out/0/Issues.json | 897 + .sonarqube/out/0/ProjectInfo.xml | 20 + .sonarqube/out/0/Telemetry.json | 1 + .sonarqube/out/0/output-cs/file-metadata.pb | 13 + .sonarqube/out/0/output-cs/log.pb | 1 + .sonarqube/out/0/output-cs/metrics.pb | 19 + .sonarqube/out/0/output-cs/symrefs.pb | 1445 ++ .sonarqube/out/0/output-cs/telemetry.pb | 1 + .../0/output-cs/test-method-declarations.pb | 0 .sonarqube/out/0/output-cs/token-cpd.pb | 13637 ++++++++++++++++ .sonarqube/out/0/output-cs/token-type.pb | 1136 ++ .sonarqube/out/1/Issues.json | 605 + .sonarqube/out/1/ProjectInfo.xml | 20 + .sonarqube/out/1/Telemetry.json | 1 + .sonarqube/out/1/output-cs/file-metadata.pb | 16 + .sonarqube/out/1/output-cs/log.pb | 1 + .sonarqube/out/1/output-cs/metrics.pb | 22 + .sonarqube/out/1/output-cs/symrefs.pb | 1474 ++ .sonarqube/out/1/output-cs/telemetry.pb | 1 + .../1/output-cs/test-method-declarations.pb | 0 .sonarqube/out/1/output-cs/token-cpd.pb | 13142 +++++++++++++++ .sonarqube/out/1/output-cs/token-type.pb | 1156 ++ .sonarqube/out/2/Issues.json | 207 + .sonarqube/out/2/ProjectInfo.xml | 20 + .sonarqube/out/2/Telemetry.json | 1 + .sonarqube/out/2/output-cs/file-metadata.pb | 15 + .sonarqube/out/2/output-cs/log.pb | 1 + .sonarqube/out/2/output-cs/metrics.pb | 0 .sonarqube/out/2/output-cs/symrefs.pb | 2850 ++++ .sonarqube/out/2/output-cs/telemetry.pb | 1 + .../2/output-cs/test-method-declarations.pb | 276 + .sonarqube/out/2/output-cs/token-cpd.pb | 0 .sonarqube/out/2/output-cs/token-type.pb | 3800 +++++ .sonarqube/out/Processed.Telemetry.S4NET.json | 10 + .../Processed.Telemetry.Targets.S4NET.json | 2 + .sonarqube/out/ScannerEngineInput.json | 188 + .sonarqube/out/architecture/cs/0.1.udg | Bin 0 -> 72797 bytes .sonarqube/out/architecture/cs/1.1.udg | Bin 0 -> 71929 bytes .sonarqube/out/architecture/cs/2.1.udg | Bin 0 -> 151313 bytes .sonarqube/out/sonar-project.properties | 202 + ...121C19E1E65ED05BD8F211C4C660FD8471406.lock | 0 .sonarqube/out/ucfg2/cs/0_1.ucfgs | Bin 0 -> 277433 bytes .sonarqube/out/ucfg2/cs/0_2.typedefs | 190 + .sonarqube/out/ucfg2/cs/1_4.ucfgs | Bin 0 -> 235835 bytes .sonarqube/out/ucfg2/cs/1_5.typedefs | 177 + ...CF55793FBB6B7D5721F48358D1F50F8934252.lock | 0 lib/averages/ema/Ema.cs | 4 +- lib/averages/ema/EmaVector.cs | 28 +- lib/core/simd/SimdExtensions.cs | 21 +- lib/core/tbarseries/tbarseries.cs | 26 +- lib/feeds/csv/CsvFeed.cs | 47 +- lib/feeds/gbm/gbm.cs | 28 +- 70 files changed, 45335 insertions(+), 49 deletions(-) create mode 100644 .sonarqube/conf/0/FilesToAnalyze.txt create mode 100644 .sonarqube/conf/0/ProjectOutFolderPath.txt create mode 100644 .sonarqube/conf/0/SonarProjectConfig.xml create mode 100644 .sonarqube/conf/1/FilesToAnalyze.txt create mode 100644 .sonarqube/conf/1/ProjectOutFolderPath.txt create mode 100644 .sonarqube/conf/1/SonarProjectConfig.xml create mode 100644 .sonarqube/conf/2/FilesToAnalyze.txt create mode 100644 .sonarqube/conf/2/ProjectOutFolderPath.txt create mode 100644 .sonarqube/conf/2/SonarProjectConfig.xml create mode 100644 .sonarqube/conf/Sonar-cs-none.ruleset create mode 100644 .sonarqube/conf/Sonar-cs.ruleset create mode 100644 .sonarqube/conf/Sonar-vbnet-none.ruleset create mode 100644 .sonarqube/conf/Sonar-vbnet.ruleset create mode 100644 .sonarqube/conf/SonarQubeAnalysisConfig.xml create mode 100644 .sonarqube/conf/cs/SonarLint.xml create mode 100644 .sonarqube/conf/vbnet/SonarLint.xml create mode 100644 .sonarqube/out/.sonar/.sonar_lock create mode 100644 .sonarqube/out/.sonar/report-task.txt create mode 100644 .sonarqube/out/0/Issues.json create mode 100644 .sonarqube/out/0/ProjectInfo.xml create mode 100644 .sonarqube/out/0/Telemetry.json create mode 100644 .sonarqube/out/0/output-cs/file-metadata.pb create mode 100644 .sonarqube/out/0/output-cs/log.pb create mode 100644 .sonarqube/out/0/output-cs/metrics.pb create mode 100644 .sonarqube/out/0/output-cs/symrefs.pb create mode 100644 .sonarqube/out/0/output-cs/telemetry.pb create mode 100644 .sonarqube/out/0/output-cs/test-method-declarations.pb create mode 100644 .sonarqube/out/0/output-cs/token-cpd.pb create mode 100644 .sonarqube/out/0/output-cs/token-type.pb create mode 100644 .sonarqube/out/1/Issues.json create mode 100644 .sonarqube/out/1/ProjectInfo.xml create mode 100644 .sonarqube/out/1/Telemetry.json create mode 100644 .sonarqube/out/1/output-cs/file-metadata.pb create mode 100644 .sonarqube/out/1/output-cs/log.pb create mode 100644 .sonarqube/out/1/output-cs/metrics.pb create mode 100644 .sonarqube/out/1/output-cs/symrefs.pb create mode 100644 .sonarqube/out/1/output-cs/telemetry.pb create mode 100644 .sonarqube/out/1/output-cs/test-method-declarations.pb create mode 100644 .sonarqube/out/1/output-cs/token-cpd.pb create mode 100644 .sonarqube/out/1/output-cs/token-type.pb create mode 100644 .sonarqube/out/2/Issues.json create mode 100644 .sonarqube/out/2/ProjectInfo.xml create mode 100644 .sonarqube/out/2/Telemetry.json create mode 100644 .sonarqube/out/2/output-cs/file-metadata.pb create mode 100644 .sonarqube/out/2/output-cs/log.pb create mode 100644 .sonarqube/out/2/output-cs/metrics.pb create mode 100644 .sonarqube/out/2/output-cs/symrefs.pb create mode 100644 .sonarqube/out/2/output-cs/telemetry.pb create mode 100644 .sonarqube/out/2/output-cs/test-method-declarations.pb create mode 100644 .sonarqube/out/2/output-cs/token-cpd.pb create mode 100644 .sonarqube/out/2/output-cs/token-type.pb create mode 100644 .sonarqube/out/Processed.Telemetry.S4NET.json create mode 100644 .sonarqube/out/Processed.Telemetry.Targets.S4NET.json create mode 100644 .sonarqube/out/ScannerEngineInput.json create mode 100644 .sonarqube/out/architecture/cs/0.1.udg create mode 100644 .sonarqube/out/architecture/cs/1.1.udg create mode 100644 .sonarqube/out/architecture/cs/2.1.udg create mode 100644 .sonarqube/out/sonar-project.properties create mode 100644 .sonarqube/out/ucfg2/cs/00DA18E40ED34089D03AC605EFA121C19E1E65ED05BD8F211C4C660FD8471406.lock create mode 100644 .sonarqube/out/ucfg2/cs/0_1.ucfgs create mode 100644 .sonarqube/out/ucfg2/cs/0_2.typedefs create mode 100644 .sonarqube/out/ucfg2/cs/1_4.ucfgs create mode 100644 .sonarqube/out/ucfg2/cs/1_5.typedefs create mode 100644 .sonarqube/out/ucfg2/cs/A4F62BF9625D36CB6BAE782CF9ACF55793FBB6B7D5721F48358D1F50F8934252.lock diff --git a/.sonarqube/conf/0/FilesToAnalyze.txt b/.sonarqube/conf/0/FilesToAnalyze.txt new file mode 100644 index 00000000..d0f3f725 --- /dev/null +++ b/.sonarqube/conf/0/FilesToAnalyze.txt @@ -0,0 +1,10 @@ +/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Quantower.cs +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.cs +/Users/mihakralj/Github/QuanTAlib/.github/TradingPlatform.BusinessLayer.xml diff --git a/.sonarqube/conf/0/ProjectOutFolderPath.txt b/.sonarqube/conf/0/ProjectOutFolderPath.txt new file mode 100644 index 00000000..6e3d3b3b --- /dev/null +++ b/.sonarqube/conf/0/ProjectOutFolderPath.txt @@ -0,0 +1 @@ +/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0 diff --git a/.sonarqube/conf/0/SonarProjectConfig.xml b/.sonarqube/conf/0/SonarProjectConfig.xml new file mode 100644 index 00000000..009e9ea5 --- /dev/null +++ b/.sonarqube/conf/0/SonarProjectConfig.xml @@ -0,0 +1,9 @@ + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/SonarQubeAnalysisConfig.xml + /Users/mihakralj/Github/QuanTAlib/quantower/Averages.csproj + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/0/FilesToAnalyze.txt + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0 + Product + net8.0 + \ No newline at end of file diff --git a/.sonarqube/conf/1/FilesToAnalyze.txt b/.sonarqube/conf/1/FilesToAnalyze.txt new file mode 100644 index 00000000..14a1d44c --- /dev/null +++ b/.sonarqube/conf/1/FilesToAnalyze.txt @@ -0,0 +1,33 @@ +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.cs +/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs +/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.cs +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.md +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.md +/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/Directory.Build.props +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.md +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/daily_IBM.csv +/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.md +/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.md +/Users/mihakralj/Github/QuanTAlib/lib/TestResults/09aa8f8b-17ca-430d-be58-992d5ce2aacd/coverage.opencover.xml +/Users/mihakralj/Github/QuanTAlib/lib/TestResults/b06e7fe4-4f16-46e2-8b46-bf971ee7d63d/coverage.cobertura.xml +/Users/mihakralj/Github/QuanTAlib/lib/TestResults/d5449c1c-f3e9-43cc-b9d9-304cd71e763e/coverage.opencover.xml +/Users/mihakralj/Github/QuanTAlib/.github/QuanTAlib2.png diff --git a/.sonarqube/conf/1/ProjectOutFolderPath.txt b/.sonarqube/conf/1/ProjectOutFolderPath.txt new file mode 100644 index 00000000..d1272ef7 --- /dev/null +++ b/.sonarqube/conf/1/ProjectOutFolderPath.txt @@ -0,0 +1 @@ +/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1 diff --git a/.sonarqube/conf/1/SonarProjectConfig.xml b/.sonarqube/conf/1/SonarProjectConfig.xml new file mode 100644 index 00000000..1789bee7 --- /dev/null +++ b/.sonarqube/conf/1/SonarProjectConfig.xml @@ -0,0 +1,9 @@ + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/SonarQubeAnalysisConfig.xml + /Users/mihakralj/Github/QuanTAlib/lib/quantalib.csproj + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/1/FilesToAnalyze.txt + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1 + Product + net10.0 + \ No newline at end of file diff --git a/.sonarqube/conf/2/FilesToAnalyze.txt b/.sonarqube/conf/2/FilesToAnalyze.txt new file mode 100644 index 00000000..44f2c2da --- /dev/null +++ b/.sonarqube/conf/2/FilesToAnalyze.txt @@ -0,0 +1,88 @@ +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Tests.cs +/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/Gbm.Tests.cs +/Users/mihakralj/.nuget/packages/microsoft.net.test.sdk/17.14.1/build/net8.0/Microsoft.NET.Test.Sdk.Program.cs +/Users/mihakralj/.nuget/packages/xunit.runner.visualstudio/2.8.2/build/net6.0/xunit.runner.visualstudio.testadapter.dll +/Users/mihakralj/.nuget/packages/xunit.runner.visualstudio/2.8.2/build/net6.0/xunit.runner.reporters.netcoreapp10.dll +/Users/mihakralj/.nuget/packages/xunit.runner.visualstudio/2.8.2/build/net6.0/xunit.runner.utility.netcoreapp10.dll +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.md +/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net10.0/QuanTAlib.deps.json +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net10.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net10.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net8.0/QuanTAlib.deps.json +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net8.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net8.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net9.0/QuanTAlib.deps.json +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net9.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net9.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/QuanTAlib.0.7.14-simd-dev.1.nupkg +/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/QuanTAlib.0.7.14-simd-dev.1.snupkg +/Users/mihakralj/Github/QuanTAlib/lib/bin/net10.0/QuanTAlib.deps.json +/Users/mihakralj/Github/QuanTAlib/lib/bin/net10.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/bin/net10.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/bin/net9.0/QuanTAlib.deps.json +/Users/mihakralj/Github/QuanTAlib/lib/bin/net9.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/bin/net9.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.md +/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.md +/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/Directory.Build.props +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.md +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/daily_IBM.csv +/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.md +/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.Notebook.dib +/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.md +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.AssemblyInfoInputs.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.assets.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.AssemblyReference.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.CoreCompileInputs.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.FileListAbsolute.txt +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.sourcelink.json +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.AssemblyInfoInputs.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.assets.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.csproj.CoreCompileInputs.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.csproj.FileListAbsolute.txt +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.sourcelink.json +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.AssemblyInfoInputs.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.assets.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.csproj.CoreCompileInputs.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.csproj.FileListAbsolute.txt +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/QuanTAlib.dll +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/QuanTAlib.pdb +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.sourcelink.json +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/QuanTAlib.0.7.14-simd-dev.1.nuspec +/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/QuanTAlib.0.7.14-simd-dev.1.symbols.nuspec +/Users/mihakralj/Github/QuanTAlib/lib/obj/gitversion.json +/Users/mihakralj/Github/QuanTAlib/lib/obj/project.assets.json +/Users/mihakralj/Github/QuanTAlib/lib/obj/project.nuget.cache +/Users/mihakralj/Github/QuanTAlib/lib/obj/project.packagespec.json +/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.dgspec.json +/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.g.props +/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.g.targets +/Users/mihakralj/Github/QuanTAlib/lib/obj/rider.project.restore.info +/Users/mihakralj/Github/QuanTAlib/lib/TestResults/09aa8f8b-17ca-430d-be58-992d5ce2aacd/coverage.opencover.xml +/Users/mihakralj/Github/QuanTAlib/lib/TestResults/b06e7fe4-4f16-46e2-8b46-bf971ee7d63d/coverage.cobertura.xml +/Users/mihakralj/Github/QuanTAlib/lib/TestResults/d5449c1c-f3e9-43cc-b9d9-304cd71e763e/coverage.opencover.xml diff --git a/.sonarqube/conf/2/ProjectOutFolderPath.txt b/.sonarqube/conf/2/ProjectOutFolderPath.txt new file mode 100644 index 00000000..75503911 --- /dev/null +++ b/.sonarqube/conf/2/ProjectOutFolderPath.txt @@ -0,0 +1 @@ +/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2 diff --git a/.sonarqube/conf/2/SonarProjectConfig.xml b/.sonarqube/conf/2/SonarProjectConfig.xml new file mode 100644 index 00000000..ebb52a11 --- /dev/null +++ b/.sonarqube/conf/2/SonarProjectConfig.xml @@ -0,0 +1,9 @@ + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/SonarQubeAnalysisConfig.xml + /Users/mihakralj/Github/QuanTAlib/lib/QuanTAlib.Tests.csproj + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/2/FilesToAnalyze.txt + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2 + Test + net10.0 + \ No newline at end of file diff --git a/.sonarqube/conf/Sonar-cs-none.ruleset b/.sonarqube/conf/Sonar-cs-none.ruleset new file mode 100644 index 00000000..85ec2b3c --- /dev/null +++ b/.sonarqube/conf/Sonar-cs-none.ruleset @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.sonarqube/conf/Sonar-cs.ruleset b/.sonarqube/conf/Sonar-cs.ruleset new file mode 100644 index 00000000..d1fa708f --- /dev/null +++ b/.sonarqube/conf/Sonar-cs.ruleset @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.sonarqube/conf/Sonar-vbnet-none.ruleset b/.sonarqube/conf/Sonar-vbnet-none.ruleset new file mode 100644 index 00000000..c48b3784 --- /dev/null +++ b/.sonarqube/conf/Sonar-vbnet-none.ruleset @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.sonarqube/conf/Sonar-vbnet.ruleset b/.sonarqube/conf/Sonar-vbnet.ruleset new file mode 100644 index 00000000..c069c13b --- /dev/null +++ b/.sonarqube/conf/Sonar-vbnet.ruleset @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.sonarqube/conf/SonarQubeAnalysisConfig.xml b/.sonarqube/conf/SonarQubeAnalysisConfig.xml new file mode 100644 index 00000000..163558cb --- /dev/null +++ b/.sonarqube/conf/SonarQubeAnalysisConfig.xml @@ -0,0 +1,279 @@ + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out + /Users/mihakralj/Github/QuanTAlib/.sonarqube/bin + /Users/mihakralj/Github/QuanTAlib + /Users/mihakralj/.sonar/cache/003d3e0a65a2f0633b8bfed42be133724b490acb323c174c708d3a446d5fc660/OpenJDK17U-jre_aarch64_mac_hotspot_17.0.11_9.tar.gz_extracted/jdk-17.0.11+9-jre/Contents/Home/bin/java + /Users/mihakralj/.sonar/cache/57e3db253d03d633e07e01f1474cce196081b805c9a4292f0efe099f65db6161/sonarcloud-scanner-engine-12.9.0.1243-all.jar + false + true + true + false + https://sonarcloud.io + 8.0.0.76937 + mihakralj_QuanTAlib + + + + + + + + + + false + 11.12.0.40973 + true + .c,.h + .ts,.tsx,.cts,.mts + true + ibm-enterprise-cobol + 11.12.0.40973 + true + SonarCloud + DISABLED + false + ipynb + oracle.jdbc.OracleDriver + true + **/vendor/** + .tf + false + 60 + .cc,.cpp,.cxx,.c++,.hh,.hpp,.hxx,.h++,.ipp,.ixx,.mxx,.cppm,.ccm,.cxxm,.c++m + .jcl + .rs + SonarAnalyzer.Enterprise.CSharp + #@$ + false + https://schema.management.azure.com/schemas/,http://schema.management.azure.com/schemas/ + **/src/main/resources/**/*app*.properties,**/src/main/resources/**/*app*.yaml,**/src/main/resources/**/*app*.yml + false + .css,.less,.scss,.sass + securityvbnetfrontend + true + 100 + Dockerfile,*.dockerfile + .html,.xhtml,.cshtml,.vbhtml,.aspx,.ascx,.rhtml,.erb,.shtm,.shtml,.cmp,.twig + .bas,.frm,.ctl + true + 12 + false + vbnetenterprise + .scala + false + true + 72 + true + SonarAnalyzer.Architecture-2.11.0.7399.zip + .cls,.trigger + SonarAnalyzer.Enterprise.VisualBasic + AWSTemplateFormatVersion + true + 30 + False + 4 + https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&d=identicon + 11.12.0.40973 + true + fixed + 600 + .jsp,.jspf,.jspx + true + 1000 + amd,applescript,atomtest,browser,commonjs,embertest,greasemonkey,jasmine,jest,jquery,meteor,mocha,mongo,nashorn,node,phantomjs,prototypejs,protractor,qunit,serviceworker,shared-node-browser,shelljs,webextensions,worker + false + **/vendor/** + .dart + true + .vb + SonarAnalyzer.Security.CSharp-11.12.0.40973.zip + true + .rpg,.rpgle,.sqlrpgle,.RPG,.RPGLE,.SQLRPGLE + false + .abap,.ab4,.flow,.asprog + true + 10.16.0.128591 + 30 + py + .cs,.razor + sql,tab,pkb + SonarAnalyzer.Security.CSharp + 8 + false + SonarAnalyzer-vbnetenterprise-10.16.0.128591.zip + true + true + .java,.jav + .kt,.kts + php,php3,php4,php5,phtml,inc + .xml,.xsd,.xsl,.config + 260 + true + true + true + coverage-reports/*coverage-*.xml + true + true + .go + 30 + true + DISABLED + true + 104 + true + **/vendor/** + false + true + .swift + false + false + as + true + 20 + .rb + true + xunit-reports/xunit-result-*.xml + 2 + angular,goog,google,OpenLayers,d3,dojo,dojox,dijit,Backbone,moment,casper,_,sap + true + 24 + .yaml,.yml + architecturecsharpfrontend + true + true + false + Model is not configured. + 10.16.0.128591 + noreply@sonarcloud.io + 10.16.0.128591 + SonarAnalyzer.Security.CSharp + 1 + SonarAnalyzer.Enterprise.VisualBasic + [SonarCloud] + false + csharpenterprise + true + true + 100 + False + SonarAnalyzer-vbnetenterprise-10.16.0.128591.zip + .json + securitycsharpfrontend + true + true + SonarAnalyzer.Security.VisualBasic-11.12.0.40973.zip + (branch|release)-.* + .m + false + coverage/.resultset.json + **/*.sh,**/*.bash,**/*.zsh,**/*.ksh,**/*.ps1,**/*.properties,**/*.conf,**/*.pem,**/*.config,.env,.aws/config,**/*.key + true + true + SonarAnalyzer-csharpenterprise-10.16.0.128591.zip + true + SonarAnalyzer-csharpenterprise-10.16.0.128591.zip + false + SonarAnalyzer.Enterprise.CSharp + csharpenterprise + securitycsharpfrontend + true + 0.05,0.1,0.2,0.5 + 2.11.0.7399 + true + true + 90000 + 10.16.0.128591 + SonarAnalyzer.Security.CSharp-11.12.0.40973.zip + .bicep + Directives are not configured. + .js,.jsx,.cjs,.mjs,.vue + 20 + .sh,.bash + false + .pli + false + vbnetenterprise + true + 2000000 + .tsql + https://sonarcloud.io + 105 + 1BD809FA-AWHW8ct9-T_TB3XqouNu + 1671634414000 + brave_brave-core,simgrid_simgrid,apache_struts,microsoft_vscode-python,mediawiki-core,jhipster-sample-application,JMeter,typo3,org.xwiki.platform:xwiki-platform,apache_ofbiz-framework,org.nuxeo:nuxeo-ecm,monica,sonarlint-visualstudio + OXYGEN:* + **/build-wrapper-dump.json + SonarCloud will undergo maintenance on Thursday, September 28th. +Automatic Analysis will not be available between 07:00 CET and 09:00 CET + https://community.sonarsource.com/t/sonarcloud-autoscan-maintenance-september-28th-07-00-and-09-00-cet/101442 + 2023-09-28T09:10:00:00.000+01:00 + https://api.sonarcloud.io/analysis + 11/28/2025 8:53:41 AM + + + **/coverage.opencover.xml + mihakralj-quantalib + **/coverage.opencover.xml + + + + + cs + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/Sonar-cs.ruleset + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/Sonar-cs-none.ruleset + + + + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/0/SonarAnalyzer.Architecture.CSharp.dll + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/0/Google.Protobuf.License.txt + + + + + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/1/SonarAnalyzer.Security.CSharp.dll + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/1/Google.Protobuf.License.txt + + + + + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/2/SonarAnalyzer.CSharp.dll + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/2/SonarAnalyzer.Enterprise.CSharp.dll + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/2/licenses/LICENSE.txt + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/2/licenses/THIRD_PARTY_LICENSES/Google.Protobuf-LICENSE.txt + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/2/licenses/THIRD_PARTY_LICENSES/StyleCop.Analyzers-LICENSE.txt + + + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/cs/SonarLint.xml + + + + vbnet + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/Sonar-vbnet.ruleset + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/Sonar-vbnet-none.ruleset + + + + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/3/Google.Protobuf.License.txt + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/3/SonarAnalyzer.Security.VisualBasic.dll + + + + + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/4/SonarAnalyzer.Enterprise.VisualBasic.dll + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/4/SonarAnalyzer.VisualBasic.dll + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/4/licenses/LICENSE.txt + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/4/licenses/THIRD_PARTY_LICENSES/Google.Protobuf-LICENSE.txt + /var/folders/qk/fg0x90rn1dl7k5d8z3m89hnw0000gn/T/.sonarqube/resources/4/licenses/THIRD_PARTY_LICENSES/StyleCop.Analyzers-LICENSE.txt + + + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/conf/vbnet/SonarLint.xml + + + + \ No newline at end of file diff --git a/.sonarqube/conf/cs/SonarLint.xml b/.sonarqube/conf/cs/SonarLint.xml new file mode 100644 index 00000000..416d0f90 --- /dev/null +++ b/.sonarqube/conf/cs/SonarLint.xml @@ -0,0 +1,1144 @@ + + + + + sonar.cs.opencover.reportsPaths + **/coverage.opencover.xml + + + sonar.cs.ignoreHeaderComments + true + + + sonar.cs.analyzeGeneratedCode + false + + + sonar.cs.file.suffixes + .cs,.razor + + + sonar.cs.analyzeRazorCode + true + + + sonar.cs.roslyn.ignoreIssues + false + + + + + S2114 + + + S3776 + + + threshold + 15 + + + propertyThreshold + 3 + + + + + S4507 + + + S5773 + + + S4426 + + + S6967 + + + S5766 + + + S2612 + + + S110 + + + max + 5 + + + + + S2053 + + + S6562 + + + S2092 + + + S4050 + + + S3925 + + + S3881 + + + S3447 + + + S3236 + + + S3451 + + + S3343 + + + S4159 + + + S4277 + + + S4428 + + + S2139 + + + S6675 + + + S6670 + + + S6608 + + + S1135 + + + S3168 + + + S5344 + + + S3885 + + + S1854 + + + S3267 + + + S4036 + + + S2245 + + + S1215 + + + S1313 + + + S2068 + + + credentialWords + password, passwd, pwd, passphrase + + + + + S6418 + + + secretWords + api[_\-]?key, auth, credential, secret, token + + + randomnessSensibility + 3 + + + + + S5122 + + + S4790 + + + S1871 + + + S3949 + + + S3626 + + + S5445 + + + S4502 + + + S2696 + + + S5547 + + + S3330 + + + S2755 + + + S1699 + + + S4830 + + + S5034 + + + S6377 + + + S7039 + + + S5332 + + + S2184 + + + S6781 + + + S5443 + + + S1133 + + + S7130 + + + S2737 + + + S2115 + + + S2259 + + + S2479 + + + S1192 + + + threshold + 3 + + + + + S1125 + + + S7133 + + + S7131 + + + S4487 + + + S2589 + + + S2222 + + + S2583 + + + S1264 + + + S3329 + + + S3655 + + + S3247 + + + S1155 + + + S2629 + + + S3966 + + + S1643 + + + S125 + + + S2930 + + + S3169 + + + S4347 + + + S4158 + + + S2325 + + + S2201 + + + S6932 + + + S1751 + + + S1764 + + + S3981 + + + S3433 + + + S3443 + + + S6800 + + + S6931 + + + S2699 + + + S6934 + + + S6930 + + + S3427 + + + S3237 + + + S2275 + + + S2368 + + + S6964 + + + S6960 + + + S6968 + + + S1048 + + + S3464 + + + S2970 + + + S2857 + + + S3875 + + + S2306 + + + S3877 + + + S2551 + + + S2437 + + + S3889 + + + S3869 + + + S2953 + + + S6668 + + + S6667 + + + S6669 + + + format + ^_?[Ll]og(ger)?$ + + + + + S6422 + + + S6424 + + + S2187 + + + S6674 + + + S6798 + + + S6672 + + + S2190 + + + S2178 + + + S3060 + + + S2225 + + + S2346 + + + S2223 + + + S5856 + + + S2344 + + + S2345 + + + S4524 + + + S1134 + + + S3431 + + + S2342 + + + format + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + flagsAttributeFormat + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$ + + + + + S2234 + + + S3444 + + + S3445 + + + S1144 + + + S3442 + + + S3440 + + + S3449 + + + S2445 + + + S3897 + + + S2688 + + + S1110 + + + S2681 + + + S2328 + + + S1118 + + + S1117 + + + S2326 + + + S3415 + + + S1479 + + + maximum + 30 + + + + + S1116 + + + S4635 + + + S1123 + + + S1244 + + + S1121 + + + S2692 + + + S2219 + + + S1006 + + + S1481 + + + S3358 + + + S3598 + + + S4200 + + + S2386 + + + S3597 + + + S4201 + + + S5659 + + + S1172 + + + S4456 + + + S3249 + + + S3246 + + + S3005 + + + S4211 + + + S5542 + + + S3244 + + + S4210 + + + S1066 + + + S1186 + + + S3363 + + + S1185 + + + S3241 + + + S3457 + + + S4545 + + + S4423 + + + S3458 + + + S6965 + + + S6966 + + + S3456 + + + S3453 + + + S2123 + + + S2365 + + + S2486 + + + S6961 + + + S5753 + + + S6962 + + + S4663 + + + S6609 + + + S3459 + + + S3217 + + + S6607 + + + S3218 + + + S927 + + + S3450 + + + S6613 + + + S6612 + + + S1168 + + + S3466 + + + S2257 + + + S3346 + + + S2376 + + + S4433 + + + S3220 + + + S2252 + + + S6610 + + + S1163 + + + S6617 + + + S6618 + + + S818 + + + S2372 + + + S2251 + + + S2743 + + + S1656 + + + S907 + + + S2995 + + + S3600 + + + S3963 + + + S2996 + + + S2757 + + + S3604 + + + S2997 + + + S3603 + + + S1994 + + + S2971 + + + S1696 + + + S3871 + + + S1210 + + + S1694 + + + S3993 + + + S1450 + + + S3998 + + + S3878 + + + S1104 + + + S3887 + + + S2674 + + + S3400 + + + S2436 + + + max + 2 + + + maxMethod + 3 + + + + + S3972 + + + S3610 + + + S3973 + + + S2761 + + + S3971 + + + S3984 + + + S1206 + + + S1940 + + + S1944 + + + S1939 + + + S1905 + + + S4061 + + + S5042 + + + S4070 + + + S2701 + + + S1862 + + + S3927 + + + S3928 + + + S3926 + + + S2955 + + + S3923 + + + S2925 + + + S127 + + + S1607 + + + S1848 + + + S3903 + + + S3904 + + + S2933 + + + S2934 + + + S6664 + + + debugThreshold + 4 + + + errorThreshold + 1 + + + warningThreshold + 1 + + + informationThreshold + 2 + + + + + S3398 + + + S112 + + + S3397 + + + S6420 + + + S5693 + + + fileUploadSizeLimit + 8388608 + + + + + S2183 + + + S107 + + + max + 7 + + + + + S108 + + + S6678 + + + S4019 + + + S4015 + + + S4136 + + + S6677 + + + S6797 + + + S2198 + + + S2077 + + + S6673 + + + S1199 + + + S3376 + + + S2166 + + + S3256 + + + S3011 + + + S1075 + + + S4586 + + + S4581 + + + S3251 + + + S3010 + + + S6640 + + + S4220 + + + S4583 + + + S3264 + + + S101 + + + S3265 + + + S6419 + + + S3262 + + + S3263 + + + S2292 + + + S3260 + + + S3261 + + + S2290 + + + S2291 + + + S6588 + + + S6580 + + + S4052 + + + S6444 + + + S4144 + + + S6561 + + + S4143 + + + S3172 + + + S4260 + + + S6575 + + + S4035 + + + S4275 + + + S2094 + + + S3063 + + + + + diff --git a/.sonarqube/conf/vbnet/SonarLint.xml b/.sonarqube/conf/vbnet/SonarLint.xml new file mode 100644 index 00000000..b340e5bc --- /dev/null +++ b/.sonarqube/conf/vbnet/SonarLint.xml @@ -0,0 +1,601 @@ + + + + + sonar.vbnet.ignoreHeaderComments + true + + + sonar.vbnet.file.suffixes + .vb + + + sonar.vbnet.roslyn.ignoreIssues + false + + + sonar.vbnet.analyzeGeneratedCode + false + + + + + S3776 + + + threshold + 15 + + + propertyThreshold + 3 + + + + + S4507 + + + S5773 + + + S2612 + + + S2053 + + + S6562 + + + S4036 + + + S2068 + + + credentialWords + password, passwd, pwd, passphrase + + + + + S6418 + + + secretWords + api[_\-]?key, auth, credential, secret, token + + + randomnessSensibility + 3 + + + + + S1313 + + + S4790 + + + S3949 + + + S5445 + + + S5547 + + + S5443 + + + S4830 + + + S1135 + + + S1133 + + + S7133 + + + S7131 + + + S3385 + + + S2589 + + + S2222 + + + S2583 + + + S3329 + + + S3655 + + + S7130 + + + S2259 + + + S3966 + + + S4158 + + + S2077 + + + S1751 + + + S1764 + + + S3981 + + + S6931 + + + S6930 + + + S2368 + + + S1048 + + + S3464 + + + S2178 + + + S2551 + + + S2437 + + + S3889 + + + S4159 + + + S3869 + + + S2225 + + + S2346 + + + S2347 + + + format + ^(([a-z][a-z0-9]*)?([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?_)?([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + + + S5856 + + + S2344 + + + S2345 + + + S1134 + + + S2342 + + + format + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + flagsAttributeFormat + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$ + + + + + S3431 + + + S6146 + + + S2340 + + + S2349 + + + S6145 + + + S1940 + + + S2358 + + + S2234 + + + S2355 + + + S2352 + + + S1944 + + + S2359 + + + S3449 + + + S1110 + + + S1479 + + + maximum + 30 + + + + + S1125 + + + S1123 + + + S2692 + + + S1481 + + + S5042 + + + S3358 + + + S3598 + + + S4201 + + + S5659 + + + S1172 + + + S2951 + + + S1862 + + + S5542 + + + S4210 + + + S1066 + + + S1186 + + + S3363 + + + S3927 + + + S3926 + + + S3923 + + + S4545 + + + S4423 + + + S1155 + + + S3453 + + + S2365 + + + S5753 + + + S4663 + + + S6609 + + + S2925 + + + S4428 + + + S6608 + + + S6607 + + + S927 + + + S6613 + + + S6612 + + + S3466 + + + S2257 + + + S2375 + + + minimumSeriesLength + 6 + + + + + S2376 + + + S6610 + + + S1163 + + + S3903 + + + S3904 + + + S6617 + + + S2372 + + + S1654 + + + format + ^[a-z][a-z0-9]*([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + + + S112 + + + S1656 + + + S907 + + + S5693 + + + fileUploadSizeLimit + 8388608 + + + + + S107 + + + max + 7 + + + + + S108 + + + S1542 + + + format + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + + + S4136 + + + S2757 + + + S3603 + + + S114 + + + format + ^I([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + + + S117 + + + format + ^[a-z][a-z0-9]*([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + + + S1871 + + + S2166 + + + S3011 + + + S1075 + + + S4586 + + + S4581 + + + S4583 + + + S1192 + + + threshold + 3 + + + + + S1643 + + + S101 + + + format + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + + + S2737 + + + S1645 + + + S3871 + + + S6588 + + + S2304 + + + format + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?(\.([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?)*$ + + + + + S3998 + + + S3878 + + + S6580 + + + S5944 + + + S6444 + + + S2761 + + + S4144 + + + S6561 + + + S4143 + + + S4260 + + + S4277 + + + S6575 + + + S4275 + + + S2094 + + + S3063 + + + + + diff --git a/.sonarqube/out/.sonar/.sonar_lock b/.sonarqube/out/.sonar/.sonar_lock new file mode 100644 index 00000000..e69de29b diff --git a/.sonarqube/out/.sonar/report-task.txt b/.sonarqube/out/.sonar/report-task.txt new file mode 100644 index 00000000..7bb8b390 --- /dev/null +++ b/.sonarqube/out/.sonar/report-task.txt @@ -0,0 +1,7 @@ +organization=mihakralj-quantalib +projectKey=mihakralj_QuanTAlib +serverUrl=https://sonarcloud.io +serverVersion=8.0.0.76937 +dashboardUrl=https://sonarcloud.io/dashboard?id=mihakralj_QuanTAlib +ceTaskId=AZrSNMLCeZsUkJLW-DRa +ceTaskUrl=https://sonarcloud.io/api/ce/task?id=AZrSNMLCeZsUkJLW-DRa diff --git a/.sonarqube/out/0/Issues.json b/.sonarqube/out/0/Issues.json new file mode 100644 index 00000000..7a94ce40 --- /dev/null +++ b/.sonarqube/out/0/Issues.json @@ -0,0 +1,897 @@ +{ + "$schema": "http://json.schemastore.org/sarif-1.0.0", + "version": "1.0.0", + "runs": [ + { + "tool": { + "name": "Microsoft (R) Visual C# Compiler", + "version": "5.0.0.0", + "fileVersion": "5.0.0-2.25523.111 (b0f34d51)", + "semanticVersion": "5.0.0", + "language": "en-US" + }, + "results": [ + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs", + "region": { + "startLine": 51, + "startColumn": 69, + "endLine": 51, + "endColumn": 71 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 73, + "startColumn": 14, + "endLine": 73, + "endColumn": 16 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 74, + "startColumn": 14, + "endLine": 74, + "endColumn": 16 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 75, + "startColumn": 13, + "endLine": 75, + "endColumn": 15 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 76, + "startColumn": 15, + "endLine": 76, + "endColumn": 17 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 77, + "startColumn": 16, + "endLine": 77, + "endColumn": 18 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.SetClip(Rectangle)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 101, + "startColumn": 9, + "endLine": 101, + "endColumn": 31 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.DrawLine(Pen, Point, Point)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 108, + "startColumn": 13, + "endLine": 108, + "endColumn": 72 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'DashStyle.Dot' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 232, + "startColumn": 30, + "endLine": 232, + "endColumn": 43 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'DashStyle.Dash' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 231, + "startColumn": 31, + "endLine": 231, + "endColumn": 45 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'DashStyle.Solid' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 230, + "startColumn": 32, + "endLine": 230, + "endColumn": 47 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'DashStyle.Solid' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 234, + "startColumn": 18, + "endLine": 234, + "endColumn": 33 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'DashStyle.DashDot' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 233, + "startColumn": 34, + "endLine": 233, + "endColumn": 51 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.DrawString(string?, Font, Brush, PointF)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 223, + "startColumn": 9, + "endLine": 223, + "endColumn": 93 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Brushes.White' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 223, + "startColumn": 35, + "endLine": 223, + "endColumn": 48 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Brushes.DarkBlue' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 222, + "startColumn": 26, + "endLine": 222, + "endColumn": 42 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.FillRectangle(Brush, RectangleF)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 222, + "startColumn": 9, + "endLine": 222, + "endColumn": 53 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.MeasureString(string?, Font)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 217, + "startColumn": 26, + "endLine": 217, + "endColumn": 54 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Font' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 216, + "startColumn": 21, + "endLine": 216, + "endColumn": 41 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.FillRectangle(Brush, int, int, int, int)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 196, + "startColumn": 21, + "endLine": 196, + "endColumn": 93 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.SetClip(Rectangle)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 178, + "startColumn": 9, + "endLine": 178, + "endColumn": 31 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.FillRectangle(Brush, int, int, int, int)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 203, + "startColumn": 21, + "endLine": 203, + "endColumn": 94 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'SolidBrush' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 194, + "startColumn": 37, + "endLine": 194, + "endColumn": 83 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.SmoothingMode' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 173, + "startColumn": 9, + "endLine": 173, + "endColumn": 25 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'SmoothingMode.AntiAlias' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 173, + "startColumn": 28, + "endLine": 173, + "endColumn": 51 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'SolidBrush' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 201, + "startColumn": 37, + "endLine": 201, + "endColumn": 83 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.SetClip(Rectangle)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 123, + "startColumn": 9, + "endLine": 123, + "endColumn": 31 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Pen.DashStyle' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 146, + "startColumn": 68, + "endLine": 146, + "endColumn": 77 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Pen.DashStyle' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 145, + "startColumn": 71, + "endLine": 145, + "endColumn": 80 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.DrawCurve(Pen, Point[], int, int, float)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 161, + "startColumn": 21, + "endLine": 161, + "endColumn": 96 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'SmoothingMode.AntiAlias' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 118, + "startColumn": 28, + "endLine": 118, + "endColumn": 51 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.SmoothingMode' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 118, + "startColumn": 9, + "endLine": 118, + "endColumn": 25 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'DashStyle.Dot' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 146, + "startColumn": 80, + "endLine": 146, + "endColumn": 93 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Pen' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 145, + "startColumn": 37, + "endLine": 145, + "endColumn": 126 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Graphics.DrawCurve(Pen, Point[], int, int, float)' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 154, + "startColumn": 21, + "endLine": 154, + "endColumn": 97 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1416", + "level": "warning", + "message": "This call site is reachable on all platforms. 'Pen' is only supported on: 'windows' 6.1 and later.", + "suppressionStates": [ + "suppressedInSource" + ], + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs", + "region": { + "startLine": 146, + "startColumn": 34, + "endLine": 146, + "endColumn": 95 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + } + ], + "rules": { + "CA1416": { + "id": "CA1416", + "shortDescription": "Validate platform compatibility", + "fullDescription": "Using platform dependent API on a component makes the code no longer work across all platforms.", + "defaultLevel": "warning", + "helpUri": "https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1416", + "properties": { + "category": "Interoperability", + "isEnabledByDefault": true, + "tags": [ + "Telemetry", + "EnabledRuleInAggressiveMode" + ] + } + }, + "S1244": { + "id": "S1244", + "shortDescription": "Floating point numbers should not be tested for equality", + "fullDescription": "Floating point numbers in C# (and in most other programming languages) are not precise. They are a binary approximation of the actual value. This means that even if two floating point numbers appear to be equal, they might not be due to the tiny differences in their binary representation.", + "defaultLevel": "warning", + "helpUri": "https://rules.sonarsource.com/csharp/RSPEC-1244", + "properties": { + "category": "Major Bug", + "isEnabledByDefault": true, + "tags": [ + "C#", + "MainSourceScope", + "TestSourceScope", + "SonarWay" + ] + } + } + } + } + ] +} \ No newline at end of file diff --git a/.sonarqube/out/0/ProjectInfo.xml b/.sonarqube/out/0/ProjectInfo.xml new file mode 100644 index 00000000..8d338ad6 --- /dev/null +++ b/.sonarqube/out/0/ProjectInfo.xml @@ -0,0 +1,20 @@ + + + Averages + C# + Product + d8f03b19-f99f-475f-8951-85c9d2258b73 + /Users/mihakralj/Github/QuanTAlib/quantower/Averages.csproj + false + + + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0/Issues.json + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0 + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0/Telemetry.json + + Debug + AnyCPU + net8.0 + \ No newline at end of file diff --git a/.sonarqube/out/0/Telemetry.json b/.sonarqube/out/0/Telemetry.json new file mode 100644 index 00000000..224dada1 --- /dev/null +++ b/.sonarqube/out/0/Telemetry.json @@ -0,0 +1 @@ +{"dotnetenterprise.s4net.build.target_framework_moniker":".NETCoreApp,Version=v8.0"} diff --git a/.sonarqube/out/0/output-cs/file-metadata.pb b/.sonarqube/out/0/output-cs/file-metadata.pb new file mode 100644 index 00000000..79a4fd91 --- /dev/null +++ b/.sonarqube/out/0/output-cs/file-metadata.pb @@ -0,0 +1,13 @@ +Y +N/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/Averages.AssemblyInfo.csutf-8o +d/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/.NETCoreApp,Version=v8.0.AssemblyAttributes.csutf-8[ +P/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/Averages.GlobalUsings.g.csutf-8U +L/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/EmaVector.csutf-8Y +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.Quantower.csutf-8O +F/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.csutf-8Q +H/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tvalue/TValue.csutf-8S +J/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tseries/TSeries.csutf-8Y +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbarseries/TBarSeries.csutf-8M +D/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbar/TBar.csutf-8W +N/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/simd/SimdExtensions.csutf-8K +B/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.csutf-8 \ No newline at end of file diff --git a/.sonarqube/out/0/output-cs/log.pb b/.sonarqube/out/0/output-cs/log.pb new file mode 100644 index 00000000..c3315333 --- /dev/null +++ b/.sonarqube/out/0/output-cs/log.pb @@ -0,0 +1 @@ +Roslyn version: 5.0.0.0Language version: Preview!Concurrent execution: enableduqFile '/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/Averages.AssemblyInfo.cs' was recognized as generatedFile '/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs' was recognized as generatedwsFile '/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/Averages.GlobalUsings.g.cs' was recognized as generated \ No newline at end of file diff --git a/.sonarqube/out/0/output-cs/metrics.pb b/.sonarqube/out/0/output-cs/metrics.pb new file mode 100644 index 00000000..4a5266c3 --- /dev/null +++ b/.sonarqube/out/0/output-cs/metrics.pb @@ -0,0 +1,19 @@ + +L/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/EmaVector.csy +8"jj + 2345OPQ]^_jklmnopqr  !"#$%&'(*+,-./06789:;<=>@ABCDEFGIJKLMRSTUVWXYZ[`abcdefghrstuvwxyz{|}~x,"#$%&'(*,-.89:;<=>@BCDEKLUWXZbdfguwx|} +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.Quantower.cs 8j2r/  !"#%&'()*,-./012356789:x  !"'()./01278 +J/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tseries/TSeries.cs 8j +  !")*+PQRYZ[ltrt #$%&',-./02345689:;<>?@ABDEFGHJKLMNSTUVW\]^_`bcdefghijkmnopqruvxy{|~x $%&./5AGMV_eghmnoqvy| +F/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.cs2 8jI !"+,-.789<=>ABCOPQRghijklyr + #$%&()/01245:?DEFGHIJKLMSTUVXYZ[\]^_`abdemnopqrstuvwz{|}~x E%&(124?GIJLVY[\]adprvz{|} +D/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbar/TBar.cs 8jr@ +  !"$%&'()*+,-/012345678:;=>@ACDFGHIJKLMOPQRSx'()*+,234567;>AHIJKLMOPQR +H/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tvalue/TValue.cs 8 j  r! +  "#$%&')*,-/02356789x %&*-35678 +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbarseries/TBarSeries.cs/ 83j  +  )123=r !"#$%'(*+,-./456789:;>?@ABCEFGHIKLMNOQRSTUWXYZ[\^_`abcdefghijklmnopqrsuvxyz|}~xO*+,-.6789:;>?@ABHTWXYZ[\acdefghlmnopqruz~ +N/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/simd/SimdExtensions.cs 8Rj RSTUVWglsr + !"#$%&'()*+-./012345679:;<=>?@ABCEFGHIJKLMNOPXYZ[]^_`acdehijmnopqtuvwxz{}~xo%'(*1346=@BJLMO[]_acehijmnoptvwz} +B/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.csQ 8&j r +  !"#$%&'()*+,-/0123456789;<=>?@ABCDEFGHJKMNOPQRSTUVWX[\]^`abcefghjklmnpqrsuvwxy{|}x !"#$%&'()*1345678=>?@ABCDEFGJOPQRSTUV]^`abcefghjlrsuvwxy{|} \ No newline at end of file diff --git a/.sonarqube/out/0/output-cs/symrefs.pb b/.sonarqube/out/0/output-cs/symrefs.pb new file mode 100644 index 00000000..2c67d2c5 --- /dev/null +++ b/.sonarqube/out/0/output-cs/symrefs.pb @@ -0,0 +1,1445 @@ +" +L/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/EmaVector.cs + +   b + %## -- 99 DD  +2 9 + " +6 = + & + #$$ :: KK ww || % +0 5 + # +  +' , + ! + " +4 9 +" ' +  ++ 0 + % +! & + !%% ;; LL xx }} ! +. 1 +  +  +  +  +/ 2 +2 5 + # +  +  +  +3 62 + %&& << ww %|| 2 + #'' == xx !}}  + "" ## #$$ !%% && #'' !(( "** "88 99 #:: !;; << #== !>> "@@ "bb "ww' -xx# )||' -}}# ) +, 2 +  +  +' - +$ * +& , + " +0 6 + " +  + "( + "WW ZZ ff X + (( >> gg  +  +  +  + ( +   """ ,,? F-- 'F +** ** **$ %,,G H-- --( ).. F +66 $88 BB BB" (CC= CCCF LDD Z +@@ @@ @@$ %BB BB) *CCM NDD DD !EE ( +II .. EE dd  +II "KK LL " +SS  + " + ( +SS( -UU !WW #XX  + +`` ( +bb bb bb$ %dd  + +ss . +ss" ' +# ( +/ 4 +# ( +ss. 3uu $ + +  +. 1 +! $< + +  +6 > +! ) +0 8 +$ , + +  +  ++ , +; < +7 8 +3 4 +% & +! " +  +  +  +# $ +  +- . +" # +  +  +  +# $ +3 4 +  + +  +& .$ + +  +  +/ 5 + +  += G$ + +  + " +" *H + +  +  +1 7 +% + +  + < + +  +  +8 < +7 ; +  + + " + " + +  +* 3 + +  +; D< + +  + ! +. / +  +E F$ + +  +  +! &$ + +  +  +/ 5 + +  + "0 + +' - +  + ! + ` + +  +' * +) , +3 6 +3 6 +  += @ += @$ + +  +  + T + +  +  +( . +2 8 +* 0 +* 0 +2 8T + +  +  +( . +2 8 +* 0 +5 ; +2 8T + +  +  +$ % +  +  +/ 0 +/ 0 + +  + % + +  + #< + +  +: B +% - +4 < +( 0$ + +  + # +3 9 + +  +A Kl + +  +  +! " +& ' +$ % +A B +A B +5 6 +5 6< + +  +  + # +. 1 +% ($ + +  +F J +: > + +  +* 2 + +  +  +/ 0 +? @ +; < +7 8 +) * +% & +9 : +9 : +  +  +' ( +  +1 2 +& ' +  +  +  +' ( +7 8 +1 2 +1 2$ + +  + & +& .H + +  +  +5 ; +) / +  + < + +  +  +< @ +; ? +  + + & + & + + ! +. 7 + + ! +F OH + +  +$ % +2 3 += > += > +P Q$ + +  + ! +% *$ + +  +  +: @l + +  +  +$ % +  +1 2 +< = +9 : +9 : +  + +  +# ( + +  +* / + + % + +. 4 +# ) + +< C +& - + +  +  +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.Quantower.cs + + 2 +   # )/ 5!!" ('' ( +    (( ..0 6 + 88@ N + '' +00 < + !! "" 11 22 88$ *( + 8 B ((  + 0 @ + + , + + $ + +%% " + +,, $( +,,0 4..* .// //; ? +.. 00# ( +// 00* / +00 11  + +55 % +55: >77 88 " +J/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tseries/TSeries.cs + +   z +" $ +%% +.. +;; AA" $MM MM __) +gg nn  +$ & +$ & +&& +// +55 ;; AA AA* ,GG GG VV) +ee hh mm oo  +  ++ - + +  +! $qq  +## %% $&& & +,, "..  +,,1 7//  + +22  + +88  + +>>  + +DD  + +JJ  + +SS & + +\\ #4 +cc vv- 0yyC F||G J + < +cc# (gg hh nn oo qq  +cc/ 4ee  +" ' +mm nn oo  + +vv  +vv# (vv1 6 + +yy  +yy yyR V +yy& +yyX ] +yy2 7yy` e + +||  +|| !||V Z +||* /||b g +||6 ;||j o + +~~  +~~( . + $ + +  +  +  + + , +/ << + +  +  +& ' +' ( +. / + + ) +F/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.cs^ +      &  (TTC K +  + < +   , /VV VV, /]] aa 2 +     5 6[[ \\ !]]. /2 + + +   > C?? %YY \\ * +   ' *) , +  + + 4 + "(( 44 {{ ! + %b + ?? rr vv {{' - +  +  +  + 6 + rr vv  +  + * + "II LL  + ( +## %% &&P V(( 2 +// 11 11 22P U44 6 +:: || }}  +  +  + +??  +EE zz " + &( +EE( -GG !II #JJ  +TT "{{  +  +TT* /VV # +TT8 =VV [[ #d +TTL QVV VV& +YY [[ \\ \\ ]] ]]( -aa ( +XX ]] aa dd  + +nn  +nn %zz# (||  +nn, 1pp ( +zz {{ {{ ||' * + +  + 0 + +" ( +  + ! + ` + +  + " +! $ +' * +' * +  +! $ +1 40 + +  +$ % +. / + 0 + +  +$ % +. / + $ + +  +  + $ + +  +  ++ 0 + +  +' 3 + +  + "0 + +  ++ 0 +  + T + +  +  +! " +4 5 +  +# $ + 0 + +  +  +  +  + + # + +, 2 +  + +8 > +  + +  +  + +  +D/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbar/TBar.csn + + +  + +) -;;+ />>+ /AA- 1GG OO7 ;QQ# 'QQ. 2RR# 'RR. 2 +   & *T XT XT XT XT X'' 22 >>@ DAAB FHH HH PP: >n +   Z ^S WT X!!U Y(( 33 DDQ UII II PP@ D + Z ^S W[ _  T X!!\ `""U Y)) 44 DD^ bJJ JJ PPF J + Z ]Z ]b e  [ ^!!c f""\ _** 55 DDk nKK KK PPL O + Z _Z _  a f!!i n""b g""j o++ 66 ;;< A>>J ODDw |LL LL PPQ VR + !Z `,, 77  +DD MM MM PPX ^ + DD- 7 + +  + +  + +  + +  + +  + +  + +  + +  + +    + +!!  + +""  +%% ''  +%%" &((  +%%/ 3))  +%%< ?**  +%%H M++  +%%V \,,  +00 22  +00& *33  +003 744  +00@ C55  +00L Q66  +00Z `77  +;;0 3;;8 ; +>>0 3>>< ?>>F I +AA2 5AA> A + +DD #( +GG OOE KQQB HRRC IF +GG !HH II JJ KK LL MM  + +OO  +OO( +OO0 3 +OO< AOOL Q + +PP # +QQ( ,QQ= A +QQ3 8QQI N +RR( ,RR> B +RR3 8RRJ O +H/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tvalue/TValue.csd + + +  + ++ 1**+ 1--- 333 557 =77# )770 688# )880 6P + & * %% --B F33( ,336 :66: >P +  && **< A00O T33> C33M R66@ E + 00- 7 +   +$ )  +## %%  +##( -&&  +**2 4**9 ; +--4 6--? A + +00 #( +33 55G M77F L88G M +33 #330 533G L + +55  +55( +550 3 +55> C55N S + +66 # +77* .77A E +777 <77M R +88* .88B F +887 <88N S +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbarseries/TBarSeries.cs + +    +" $** ++ ,, -- .. 66 +>> ?? @@ AA BB NN TT" $WWU WWWd fcc mm  + + +" $| +$ &** !77 +>> !NN TT* ,XXW YXXf hdd nn  + + +) +| +$ &++ !88 +?? !NN) +TT2 4YYW YYYf hee oo  + + +0 2| +$ &,, 99 +@@ NN4 6TT: <ZZV XZZe gff pp  + + +7 9 +$ &-- ":: +AA "HH NN? ATT TTB D[[X Z[[g iaa gg ll qq  + + +  +> @| +$ &..! #;; +BB! #NNJ LTTJ L\\Y [\\h jhh rr  + + +E G + +  + "uu ( + !! ** >> ( + "" ++ ?? ( + ## ,, @@ ( + $$ -- AA ( + %% .. BB  + +!!  + +""  + +##  + +$$  + +%% F +44 "66 $77 &88 &99 &:: &;; & + +EE  + +KK  + +QQ  + +WW  + +XX  + +YY  + +ZZ  + +[[  + +\\  +__ zz ~~  +__ cc dd ee ff gg hh mm nn oo pp qq rr uu  +__# (aa F +ll mm nn oo pp qq rr  + +yy  +yy zz  +yy& *zz  +yy3 7zz! % +yy@ Czz' * +yyL Qzz, 1 +yyZ `zz3 9 +yyg lzz< A + +}}  +}} !~~  +}}* .~~! % +}}7 ;~~' + +}}D G~~- 0 +}}P U~~2 7 +}}^ d~~9 ? +}}k p~~B G + + $ + +& ' +  +" #$ + += > +  +$ %$ + +T U +  +$ %$ + +k l +  +$ %& +   +  +$ %& +   +  +$ %$ + +  +  + 0 + +  +  +* . + 0 + +  +9 = +  + 0 + +  +  +* . + 0 + +  +9 = +  + $ + +  +  +  + + * +/ <l + +  +  +& ' +% & +, - +3 4 +: ; +A B +H I + + )$ +N/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/simd/SimdExtensions.cs + + + + " + 0}} & +F J ! %( +  ) *& ' + $ +  +: >   +   ( +  ) *  +"" $ + 2 +"": >$$ %% '' (( ( +$$ '' (( ** 2 +%% %% %%) *'' ((  +.. $ + 2 +..: >00 11 33 44 ( +00 33 44 66 2 +11 11 11) *33 44  +:: ) + ( +::? C== ?? BB ! +::L P??$ ( +<< @@ BB ( +== == ==) *??  +?? @@ @@! % +FF- 9 + P +FFO SHH II JJ LL LL1 5MM MM1 5( +HH LL #LL% .OO ( +II MM #MM% .OO $F +JJ JJ JJ) *LL LL6 7MM MM6 7 + +YY (P +YYC G[[ ]], 0cc ee0 4tt vv% )}}' +( +__ cc& 0cc7 Aee> HF +`` cc cc2 3ee; <tt tt$ %vv* + +aa nn: B( +ee hh- 3hh5 ;mm( . +hh ii  +mm nn2 8 +nn oo  + + l + +; ? +  +  +, 0 +  +0 4 +  +  + $ + +  +  + < + +  +& 0 +7 A +> H + *T + +  +  +2 3 +; < +  +$ % +  + +  + 0 + +  +  +  + 0 + +  +  +, - +  + +  + +; ? +  +  +% ) +  +, 0 +, 0 +  +0 4 +  +  + ! + T + +  +: D +  +& 0 +7 A +> H + *H + +  +  +$ * + " +  + #` + +  +  +2 3 +; < +  +$ % +  +" # + +  +, 2H + +  + & +  + $ +  + < + +  +  +, - +  +$ % + +  + +; ? +  +  +% ) +  +, 0 +, 0 +  +0 4 +  +  + ! + T + +  +: D +  +& 0 +7 A +> H + *H + +  +  +$ * + " +  + #` + +  +  +2 3 +; < +  +$ % +  +" # + +  +, 2H + +  + & +  + $ +  + < + +  +  +, - +  +$ % + + $0 + +? C +  +  + $ + + % + +@ D +  +  +  +, 0 +  +0 4 +  + " + ! + " + +N R + < + +  +  +- . +( ) +$ % + +  +$ +$ + +  +  + < + +  +& 0 +7 A +> H + *T + +  +  +2 3 +; < +  +$ % +# $ + +  + !$ + +  +  + $0 + +  +  +  + 0 + +  +  +, - + !$ + +  +  +! % + + # + +> B +  + +L P ++ / + ++ 5 + +P T +  +  +& * +/ 3 +  +, 0 +, 0 +  +0 4 +  +  +) - +  +) - + T + +  +: D +  +& 0 +7 A +> H + *T + +  +  +  +$ * +  +  ++ 1H + +  +  +$ * +  +  ++ 1x + +  +  +2 3 +; < +  +$ % +  +. / +  +. /$ + +  +, 2 +, 2H + +  + # +% ( + ! +# & + H + +  + # +% ( + ! +# & + T + +  +  +, - +  +2 3 +  +2 3 +B/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs + !! """ "## !$$ #%%! +&&# -'' *((# -))$ .**% ///R \== >> ?? @@ AA BB CC DD EE FF  + +    + + ' + +! ) + +! ' + +! + + +! + + +! , + +! ) + +! , + + ) +/ 4  +J S # + +// &F +//6 ?11 &44! *55! *66 )77" +88# , + +//L P +//] c;; F +11 33 44 55 66 77 !88 " +22 == ">> "?? !@@ #AA !BB !CC "DD "EE #FF #GG JJ  +;; JJ$ ) + +MM "F +MM2 ;OO &RR! *SS! *TT )UU" +VV# , + +MMH LF +OO QQ RR SS TT UU !VV " + +[[ ! +[[1 :]] aa " +[[P T`` aa8 < +[[] bhh) . +[[h kjj ll  +`` ee +ll  +aa bb "cc # +bb hh ( +cc ee ff gg  +ff ll' , +gg ll< B +hh ll. /llD E + +pp 'v +pp7 @rr (ww "||H Q||f o}}J S & + ' +0 9 + ( + ( +ppV Zuu ww8 <\ +ppg mrr  +0 6 +( . +6 < +n t +% + +3 9 +pps  +1 = + +pp  + "$ + +pp  +X _ +W ^6 +uu vv +{{ + +  +  +ww xx "yy #6 +xx ||$ -}}% . + % + %( +yy {{ ||6 @}}7 A +|| E M +}}  +F O +  +% .$ + +  +  +@ J` + +  +  +  +  +$ - +J S +1 : +% .< + +  +! " +0 1 +N O +7 8 + +  +$ ( + +  +9 = + +  ++ 7 + +  +  + + ! +! + + +  +! (< + +  +  +< D +& . +@ H$ + + ! +- 6 +; D$ + + " +* 4 +9 C + + %x + +5 > + ( + " +H Q +f o +J S + & + ' +0 9 + ($ + +T X +  +8 <0 + +e k +  +0 6 +  + +q } +  < + +  + + + + +  + $ + +  + " + #H + +  +$ - +% . + % + % + &0 + +  +  +6 @ +7 A + +  +E M + +  +F O + +  +% . + +  + H + +  +! " +0 1 +N O +7 8 + $ + +  ++ / ++ /0 + +  +1 5 +N R +W [0 + +  +U Z +1 6 +O T$ + +  +7 C +8 D + + ! +% ) + + ! +% ) + + $ + +/ 8 +  + " + +N R + $ + +[ _ +* . + 0 + +  +  + + + +$ + +  +- 7 ++ 5$ + +  +0 4 + 0 + +  +? G ++ 3 +@ H0 + +  ++ 3 +< D +L T + + 8 +R m + +C L +  \ No newline at end of file diff --git a/.sonarqube/out/0/output-cs/telemetry.pb b/.sonarqube/out/0/output-cs/telemetry.pb new file mode 100644 index 00000000..6e56fac9 --- /dev/null +++ b/.sonarqube/out/0/output-cs/telemetry.pb @@ -0,0 +1 @@ +PR;/Users/mihakralj/Github/QuanTAlib/quantower/Averages.csprojnet8.0Preview \ No newline at end of file diff --git a/.sonarqube/out/0/output-cs/test-method-declarations.pb b/.sonarqube/out/0/output-cs/test-method-declarations.pb new file mode 100644 index 00000000..e69de29b diff --git a/.sonarqube/out/0/output-cs/token-cpd.pb b/.sonarqube/out/0/output-cs/token-cpd.pb new file mode 100644 index 00000000..4a05c103 --- /dev/null +++ b/.sonarqube/out/0/output-cs/token-cpd.pb @@ -0,0 +1,13637 @@ + +L/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/EmaVector.cs + namespace  + QuanTAlib +  +;  +[   +SkipLocalsInit    +]    +public   +class    + EmaVector    +{  +private  +readonly  +double  +[  +]  +_alphas % +;% & +private  +readonly  +double  +[  +]  +_emas # +;# $ +private  +readonly  +double  +[  +]  +_Es ! +;! " +private  +readonly  +double  +[  +]  +_p_emas % +;% & +private  +readonly  +double  +[  +]  +_p_Es # +;# $ +private  +readonly  +int  +_count  +;  +private  +double  +_lastValidValue " +;" # +public + +TValue  +[  +]  +Values  +{  +get  +; ! +private" ) +set* - +;- . +}/ 0 +public   + + EmaVector    +(    +int    +[    +]    +periods   " +)  " # +{!!  +_count""  +=""  +periods""  +.""  +Length""  +;""  +_alphas##  +=##  +new##  +double##  +[##  +_count## # +]### $ +;##$ % +_emas$$  +=$$  +new$$  +double$$  +[$$  +_count$$ ! +]$$! " +;$$" # +_Es%%  +=%%  +new%%  +double%%  +[%%  +_count%%  +]%%  +;%% ! +_p_emas&&  +=&&  +new&&  +double&&  +[&&  +_count&& # +]&&# $ +;&&$ % +_p_Es''  +=''  +new''  +double''  +[''  +_count'' ! +]''! " +;''" # +Values((  +=((  +new((  +TValue((  +[((  +_count(( " +]((" # +;((# $ +for**  +(**  +int**  +i**  +=**  +$num**  +;**  +i**  +<**  +_count** " +;**" # +i**$ % +++**% ' +)**' ( +{++ ' +ArgumentOutOfRangeException,, ' +.,,' (" +ThrowIfLessThanOrEqual,,( > +(,,> ? +periods,,? F +[,,F G +i,,G H +],,H I +,,,I J +$num,,K L +),,L M +;,,M N +_alphas--  +[--  +i--  +]--  +=--  +$num--  +/--  +(--  +periods-- ' +[--' ( +i--( ) +]--) * ++--+ , +$num--- . +)--. / +;--/ 0 +ResetAt..  +(..  +i..  +)..  +;..  +}//  +}00  +public66 + + EmaVector66  +(66  +double66  +[66  +]66  +alphas66 $ +)66$ % +{77  +_count88  +=88  +alphas88  +.88  +Length88  +;88  +_alphas99  +=99  +new99  +double99  +[99  +_count99 # +]99# $ +;99$ % +_emas::  +=::  +new::  +double::  +[::  +_count:: ! +]::! " +;::" # +_Es;;  +=;;  +new;;  +double;;  +[;;  +_count;;  +];;  +;;; ! +_p_emas<<  +=<<  +new<<  +double<<  +[<<  +_count<< # +]<<# $ +;<<$ % +_p_Es==  +===  +new==  +double==  +[==  +_count== ! +]==! " +;==" # +Values>>  +=>>  +new>>  +TValue>>  +[>>  +_count>> " +]>>" # +;>># $ +for@@  +(@@  +int@@  +i@@  +=@@  +$num@@  +;@@  +i@@  +<@@  +_count@@ " +;@@" # +i@@$ % +++@@% ' +)@@' ( +{AA  +ifBB  +(BB  +alphasBB  +[BB  +iBB  +]BB  +<=BB  +$numBB  +||BB ! +alphasBB" ( +[BB( ) +iBB) * +]BB* + +>BB, - +$numBB. / +)BB/ 0 +throwCC  +newCC ' +ArgumentOutOfRangeExceptionCC 5 +(CC5 6 +nameofCC6 < +(CC< = +alphasCC= C +)CCC D +,CCD E +alphasCCF L +[CCL M +iCCM N +]CCN O +,CCO P +$str CCQ  +) +CC  +; +CC  +_alphasDD  +[DD  +iDD  +]DD  +=DD  +alphasDD  +[DD  +iDD ! +]DD! " +;DD" # +ResetAtEE  +(EE  +iEE  +)EE  +;EE  +}FF  +}GG  +privateII  +voidII  +ResetAtII  +(II  +intII  +indexII " +)II" # +{JJ  +_emasKK  +[KK  +indexKK  +]KK  +=KK  +$numKK  +;KK  +_EsLL  +[LL  +indexLL  +]LL  +=LL  +$numLL  +;LL  +}MM  +[RR  + +MethodImplRR  +(RR  +MethodImplOptionsRR ! +.RR! " +AggressiveInliningRR" 4 +)RR4 5 +]RR5 6 +privateSS  +doubleSS  + GetValidValueSS  +(SS ! +doubleSS! ' +inputSS( - +)SS- . +{TT  +ifUU + +(UU  +doubleUU  +.UU  +IsFiniteUU  +(UU  +inputUU ! +)UU! " +)UU" # +{VV  +_lastValidValueWW  +=WW  +inputWW # +;WW# $ +returnXX  +inputXX  +;XX  +}YY  +returnZZ  +_lastValidValueZZ  +;ZZ  +}[[  +public`` + +void``  +Reset``  +(``  +)``  +{aa  +forbb  +(bb  +intbb  +ibb  +=bb  +$numbb  +;bb  +ibb  +<bb  +_countbb " +;bb" # +ibb$ % +++bb% ' +)bb' ( +{cc  +ResetAtdd  +(dd  +idd  +)dd  +;dd  +}ee  +_lastValidValueff  +=ff  +$numff  +;ff  +Arraygg  +.gg  +Cleargg  +(gg  +Valuesgg  +)gg  +;gg  +}hh  +[rr  + +MethodImplrr  +(rr  +MethodImplOptionsrr ! +.rr! " +AggressiveInliningrr" 4 +)rr4 5 +]rr5 6 +publicss + +TValuess  +[ss  +]ss  +Updatess  +(ss  +TValuess ! +inputss" ' +,ss' ( +boolss) - +isNewss. 3 +=ss4 5 +truess6 : +)ss: ; +{tt  +ifuu + +(uu  +isNewuu  +)uu  +{vv  +Arrayww  +.ww  +Copyww  +(ww  +_emasww  +,ww  +_p_emasww % +,ww% & +_countww' - +)ww- . +;ww. / +Arrayxx  +.xx  +Copyxx  +(xx  +_Esxx  +,xx  +_p_Esxx ! +,xx! " +_countxx# ) +)xx) * +;xx* + +}yy  +elsezz  +{{{  +Array||  +.||  +Copy||  +(||  +_p_emas||  +,||  +_emas|| % +,||% & +_count||' - +)||- . +;||. / +Array}}  +.}}  +Copy}}  +(}}  +_p_Es}}  +,}}  +_Es}} ! +,}}! " +_count}}# ) +)}}) * +;}}* + +}~~  +double +  +val +  += +  + GetValidValue + " +( +" # +input +# ( +. +( ) +Value +) . +) +. / +; +/ 0 +int +  +vecCount +  += +  +Vector +  +< +  +double + $ +> +$ % +. +% & +Count +& + +; ++ , +int +  +i +  += +  +$num +  +; +  +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +_count +, 2 +>= +3 5 +vecCount +6 > +) +> ? +{ +  +var +  +vecInput +  += +  +new +  +Vector + % +< +% & +double +& , +> +, - +( +- . +val +. 1 +) +1 2 +; +2 3 +var +  +vecOne +  += +  +Vector +  +< +  +double + & +> +& ' +. +' ( +One +( + +; ++ , +var +  + +vecEpsilon +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +$num +0 5 +) +5 6 +; +6 7 +for +  +( +  +; +  +i +  +<= +  +_count +  +- +  +vecCount +! ) +; +) * +i ++ , ++= +- / +vecCount +0 8 +) +8 9 +{ +  +var +  +vecAlpha +  += +  +new + " +Vector +# ) +< +) * +double +* 0 +> +0 1 +( +1 2 +_alphas +2 9 +, +9 : +i +; < +) +< = +; += > +var +  +vecEma +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +_emas +0 5 +, +5 6 +i +7 8 +) +8 9 +; +9 : +var +  +vecE +  += +  +new +  +Vector + % +< +% & +double +& , +> +, - +( +- . +_Es +. 1 +, +1 2 +i +3 4 +) +4 5 +; +5 6 +vecEma +  ++= +  +vecAlpha + " +* +# $ +( +% & +vecInput +& . +- +/ 0 +vecEma +1 7 +) +7 8 +; +8 9 +vecE +  +*= +  +( +  +vecOne +  +- + ! +vecAlpha +" * +) +* + +; ++ , +var +  +vecCompensated + " += +# $ +vecEma +% + +/ +, - +( +. / +vecOne +/ 5 +- +6 7 +vecE +8 < +) +< = +; += > +var +  + isHotMask +  += +  +Vector + & +. +& ' +LessThanOrEqual +' 6 +( +6 7 +vecE +7 ; +, +; < + +vecEpsilon += G +) +G H +; +H I +var +  + vecResult +  += +  +Vector + & +. +& ' +ConditionalSelect +' 8 +( +8 9 +Vector +  +. +  +AsVectorDouble + ) +( +) * + isHotMask +* 3 +) +3 4 +, +4 5 +vecEma +  +, +  +vecCompensated + " +) +  +; +  +vecEma +  +. +  +CopyTo +  +( +  +_emas + # +, +# $ +i +% & +) +& ' +; +' ( +vecE +  +. +  +CopyTo +  +( +  +_Es +  +, +  +i +! " +) +" # +; +# $ +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j + ! +< +" # +vecCount +$ , +; +, - +j +. / +++ +/ 1 +) +1 2 +{ +  +Values +  +[ +  +i +  ++ +  +j +  +] + ! += +" # +new +$ ' +TValue +( . +( +. / +input +/ 4 +. +4 5 +Time +5 9 +, +9 : + vecResult +; D +[ +D E +j +E F +] +F G +) +G H +; +H I +} +  +} +  +} +  +for +  +( +  +; +  +i +  +< +  +_count +  +; +  +i +  +++ +  +) +  +{ +  +double +  +alpha +  += +  +_alphas + " +[ +" # +i +# $ +] +$ % +; +% & +_emas +  +[ +  +i +  +] +  ++= +  +alpha +  +* +  +( + ! +val +! $ +- +% & +_emas +' , +[ +, - +i +- . +] +. / +) +/ 0 +; +0 1 +double +  +result +  += +  +_emas + ! +[ +! " +i +" # +] +# $ +; +$ % +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num +  +) +  +{ +  +_Es +  +[ +  +i +  +] +  +*= +  +( +  +$num +  +- +  +alpha +! & +) +& ' +; +' ( +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num + " +) +" # +{ +  +result +  += +  +_emas + " +[ +" # +i +# $ +] +$ % +/ +& ' +( +( ) +$num +) , +- +- . +_Es +/ 2 +[ +2 3 +i +3 4 +] +4 5 +) +5 6 +; +6 7 +} +  +} +  +Values +  +[ +  +i +  +] +  += +  +new +  +TValue + " +( +" # +input +# ( +. +( ) +Time +) - +, +- . +result +/ 5 +) +5 6 +; +6 7 +} +  +return +  +Values +  +; +  +} +  +public + + +TSeries +  +[ +  +] +  + Calculate +  +( +  +TSeries + & +source +' - +) +- . +{ +  +int +  +len +  += +  +source +  +. +  +Count +  +; +  +var +  + resultSeries +  += +  +new +  +TSeries + & +[ +& ' +_count +' - +] +- . +; +. / +var +  +tLists +  += +  +new +  +List +  +< +  +long + " +> +" # +[ +# $ +_count +$ * +] +* + +; ++ , +var +  +vLists +  += +  +new +  +List +  +< +  +double + $ +> +$ % +[ +% & +_count +& , +] +, - +; +- . +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_count + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +tLists +  +[ +  +i +  +] +  += +  +new +  +List +  +< + ! +long +! % +> +% & +( +& ' +len +' * +) +* + +; ++ , +vLists +  +[ +  +i +  +] +  += +  +new +  +List +  +< + ! +double +! ' +> +' ( +( +( ) +len +) , +) +, - +; +- . +CollectionsMarshal +  +. +  +SetCount + ' +( +' ( +tLists +( . +[ +. / +i +/ 0 +] +0 1 +, +1 2 +len +3 6 +) +6 7 +; +7 8 +CollectionsMarshal +  +. +  +SetCount + ' +( +' ( +vLists +( . +[ +. / +i +/ 0 +] +0 1 +, +1 2 +len +3 6 +) +6 7 +; +7 8 +} +  +var +  + sourceValues +  += +  +source + ! +. +! " +Values +" ( +; +( ) +var +  + sourceTimes +  += +  +source +  +. + ! +Times +! & +; +& ' +int +  +vecCount +  += +  +Vector +  +< +  +double + $ +> +$ % +. +% & +Count +& + +; ++ , +var +  +vecOne +  += +  +Vector +  +< +  +double + " +> +" # +. +# $ +One +$ ' +; +' ( +var +  + +vecEpsilon +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +$num +, 1 +) +1 2 +; +2 3 +for +  +( +  +int +  +t +  += +  +$num +  +; +  +t +  +< +  +len +  +; +  +t +! " +++ +" $ +) +$ % +{ +  +double +  +val +  += +  + sourceValues + % +[ +% & +t +& ' +] +' ( +; +( ) +long +  +time +  += +  + sourceTimes + # +[ +# $ +t +$ % +] +% & +; +& ' +val +  += +  + GetValidValue +  +( +  +val + # +) +# $ +; +$ % +var +  +vecInput +  += +  +new +  +Vector + % +< +% & +double +& , +> +, - +( +- . +val +. 1 +) +1 2 +; +2 3 +int +  +i +  += +  +$num +  +; +  +if +  +( +  +Vector +  +. + # +IsHardwareAccelerated + , +&& +- / +_count +0 6 +>= +7 9 +vecCount +: B +) +B C +{ +  +for +  +( +  +; +  +i +  +<= +  +_count + " +- +# $ +vecCount +% - +; +- . +i +/ 0 ++= +1 3 +vecCount +4 < +) +< = +{ +  +var +  +vecAlpha +  += +! " +new +# & +Vector +' - +< +- . +double +. 4 +> +4 5 +( +5 6 +_alphas +6 = +, += > +i +? @ +) +@ A +; +A B +var +  +vecEma +  += +  +new +! $ +Vector +% + +< ++ , +double +, 2 +> +2 3 +( +3 4 +_emas +4 9 +, +9 : +i +; < +) +< = +; += > +var +  +vecE +  += +  +new + " +Vector +# ) +< +) * +double +* 0 +> +0 1 +( +1 2 +_Es +2 5 +, +5 6 +i +7 8 +) +8 9 +; +9 : +vecEma +  ++= +  +vecAlpha + & +* +' ( +( +) * +vecInput +* 2 +- +3 4 +vecEma +5 ; +) +; < +; +< = +vecE +  +*= +  +( +  +vecOne + # +- +$ % +vecAlpha +& . +) +. / +; +/ 0 +var +  +vecCompensated + & += +' ( +vecEma +) / +/ +0 1 +( +2 3 +vecOne +3 9 +- +: ; +vecE +< @ +) +@ A +; +A B +var +  + isHotMask + ! += +" # +Vector +$ * +. +* + +LessThanOrEqual ++ : +( +: ; +vecE +; ? +, +? @ + +vecEpsilon +A K +) +K L +; +L M +var +  + vecResult + ! += +" # +Vector +$ * +. +* + +ConditionalSelect ++ < +( +< = +Vector +  +. +  +AsVectorDouble + - +( +- . + isHotMask +. 7 +) +7 8 +, +8 9 +vecEma +  +, +  +vecCompensated + & +) +  +; +  +vecEma +  +. +  +CopyTo + ! +( +! " +_emas +" ' +, +' ( +i +) * +) +* + +; ++ , +vecE +  +. +  +CopyTo +  +( +  +_Es + # +, +# $ +i +% & +) +& ' +; +' ( +for +  +( +  +int +  +j +  += +  +$num +! " +; +" # +j +$ % +< +& ' +vecCount +( 0 +; +0 1 +j +2 3 +++ +3 5 +) +5 6 +{ +  +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +tLists +2 8 +[ +8 9 +i +9 : ++ +; < +j += > +] +> ? +) +? @ +[ +@ A +t +A B +] +B C += +D E +time +F J +; +J K +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +vLists +2 8 +[ +8 9 +i +9 : ++ +; < +j += > +] +> ? +) +? @ +[ +@ A +t +A B +] +B C += +D E + vecResult +F O +[ +O P +j +P Q +] +Q R +; +R S +} +  +} +  +} +  +for +  +( +  +; +  +i +  +< +  +_count +  +; +  +i +  +++ + " +) +" # +{ +  +double +  +alpha +  += +  +_alphas + & +[ +& ' +i +' ( +] +( ) +; +) * +_emas +  +[ +  +i +  +] +  ++= +  +alpha + ! +* +" # +( +$ % +val +% ( +- +) * +_emas ++ 0 +[ +0 1 +i +1 2 +] +2 3 +) +3 4 +; +4 5 +double +  +result +  += +  +_emas + % +[ +% & +i +& ' +] +' ( +; +( ) +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num + " +) +" # +{ +  +_Es +  +[ +  +i +  +] +  +*= +  +( +  +$num + " +- +# $ +alpha +% * +) +* + +; ++ , +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num +! & +) +& ' +{ +  +result +  += +  +_emas +! & +[ +& ' +i +' ( +] +( ) +/ +* + +( +, - +$num +- 0 +- +1 2 +_Es +3 6 +[ +6 7 +i +7 8 +] +8 9 +) +9 : +; +: ; +} +  +} +  +CollectionsMarshal + " +. +" # +AsSpan +# ) +( +) * +tLists +* 0 +[ +0 1 +i +1 2 +] +2 3 +) +3 4 +[ +4 5 +t +5 6 +] +6 7 += +8 9 +time +: > +; +> ? +CollectionsMarshal + " +. +" # +AsSpan +# ) +( +) * +vLists +* 0 +[ +0 1 +i +1 2 +] +2 3 +) +3 4 +[ +4 5 +t +5 6 +] +6 7 += +8 9 +result +: @ +; +@ A +} +  +} +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_count + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  + resultSeries +  +[ +  +i +  +] +  += +  +new + ! +TSeries +" ) +( +) * +tLists +* 0 +[ +0 1 +i +1 2 +] +2 3 +, +3 4 +vLists +5 ; +[ +; < +i +< = +] += > +) +> ? +; +? @ +var +  +lastT +  += +  +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +tLists +2 8 +[ +8 9 +i +9 : +] +: ; +) +; < +[ +< = +len += @ +- +A B +$num +C D +] +D E +; +E F +var +  +lastV +  += +  +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +vLists +2 8 +[ +8 9 +i +9 : +] +: ; +) +; < +[ +< = +len += @ +- +A B +$num +C D +] +D E +; +E F +Values +  +[ +  +i +  +] +  += +  +new +  +TValue + " +( +" # +lastT +# ( +, +( ) +lastV +* / +) +/ 0 +; +0 1 +} +  +return +  + resultSeries +  +; +  +} +  +public + + +static +  +TSeries +  +[ +  +] +  + Calculate + % +( +% & +TSeries +& - +source +. 4 +, +4 5 +int +6 9 +[ +9 : +] +: ; +periods +< C +) +C D +{ +  +var +  + emaVector +  += +  +new +  + EmaVector + % +( +% & +periods +& - +) +- . +; +. / +return +  + emaVector +  +. +  + Calculate + " +( +" # +source +# ) +) +) * +; +* + +} +  +} / +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.Quantower.cs + namespace  + QuanTAlib +  +;  +public  +class  + EmaIndicator  +:  + Indicator % +,% & +IWatchlistIndicator' : +{  +[  +InputParameter  +(  +$str  +,  + sortIndex ' +:' ( +$num) * +,* + +$num, - +,- . +$num/ 3 +,3 4 +$num5 6 +,6 7 +$num8 9 +)9 : +]: ; +public   + +int    +Period    +{    +get    +;    +set    +;   ! +}  " # +=  $ % +$num  & ( +;  ( ) +[    +IndicatorExtensions    +.    +DataSourceInput   ( +]  ( ) +public   + + +SourceType    +Source    +{    +get   " +;  " # +set  $ ' +;  ' ( +}  ) * +=  + , + +SourceType  - 7 +.  7 8 +Close  8 = +;  = > +[  +InputParameter  +(  +$str & +,& ' + sortIndex( 1 +:1 2 +$num3 5 +)5 6 +]6 7 +public + +bool  +ShowColdValues  +{  +get! $ +;$ % +set& ) +;) * +}+ , +=- . +true/ 3 +;3 4 +private  +Ema  +?  +ma  +;  + protected  + +LineSeries  +?  +Series  +; ! + protected  +string  +?  + +SourceName  +; ! +public + +int  +MinHistoryDepths  +=> " +Period# ) +;) * +int  +IWatchlistIndicator  +.  +MinHistoryDepths , +=>- / +MinHistoryDepths0 @ +;@ A +public + +override  +string  + ShortName $ +=>% ' +$"( * +$str* . +{. / +Period/ 5 +}5 6 +$str6 7 +{7 8 + +SourceName8 B +}B C +"C D +;D E +public + + EmaIndicator  +(  +)  +{  + OnBackGround  +=  +true  +;  +SeparateWindow  +=  +false  +;  + +SourceName  +=  +Source  +.  +ToString $ +($ % +)% & +;& ' +Name  +=  +$str 1 +;1 2 + Description    +=    +$str   2 +;  2 3 +Series!!  +=!!  +new!!  +(!!  +name!!  +:!!  +$"!!  +$str!! ! +{!!! " +Period!!" ( +}!!( ) +"!!) * +,!!* + +color!!, 1 +:!!1 2 +IndicatorExtensions!!3 F +.!!F G +Averages!!G O +,!!O P +width!!Q V +:!!V W +$num!!X Y +,!!Y Z +style!![ ` +:!!` a + LineStyle!!b k +.!!k l +Solid!!l q +)!!q r +;!!r s + AddLineSeries""  +(""  +Series""  +)""  +;""  +}##  + protected%%  +override%%  +void%%  +OnInit%% " +(%%" # +)%%# $ +{&&  +ma'' + +=''  +new''  +Ema''  +(''  +Period''  +)''  +;''  + +SourceName((  +=((  +Source((  +.((  +ToString(( $ +((($ % +)((% & +;((& ' +base))  +.))  +OnInit))  +())  +)))  +;))  +}**  + protected,,  +override,,  +void,,  +OnUpdate,, $ +(,,$ % + +UpdateArgs,,% / +args,,0 4 +),,4 5 +{--  +TValue..  +input..  +=..  +this..  +...  + GetInputValue.. ) +(..) * +args..* . +,... / +Source..0 6 +)..6 7 +;..7 8 +bool//  +isNew//  +=//  +args//  +.//  +Reason//  +==//! # + UpdateReason//$ 0 +.//0 1 +NewBar//1 7 +||//8 : +args//; ? +.//? @ +Reason//@ F +==//G I + UpdateReason//J V +.//V W + HistoricalBar//W d +;//d e +TValue00  +result00  +=00  +ma00  +!00  +.00  +Update00 " +(00" # +input00# ( +,00( ) +isNew00* / +)00/ 0 +;000 1 +Series11  +!11  +.11  +SetValue11  +(11  +result11  +.11  +Value11 % +)11% & +;11& ' +Series22  +!22  +.22  + SetMarker22  +(22  +$num22  +,22  +Color22 " +.22" # + Transparent22# . +)22. / +;22/ 0 +}33  +public55 + +override55  +void55  + OnPaintChart55 % +(55% & +PaintChartEventArgs55& 9 +args55: > +)55> ? +{66  +base77  +.77  + OnPaintChart77  +(77  +args77  +)77  +;77  +this88  +.88  +PaintSmoothCurve88  +(88  +args88 " +,88" # +Series88$ * +!88* + +,88+ , +$num88- . +,88. / +showColdValues880 > +:88> ? +ShowColdValues88@ N +,88N O +tension88P W +:88W X +$num88Y \ +)88\ ] +;88] ^ +}99  +}:: Z +F/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.cs + namespace  + QuanTAlib +  +;  +internal  +struct  +EmaState  +{  +public + +double  +Ema  +{  +get  +;  +set  +; ! +}" # +public   + +double    +E    +{    +get    +;    +set    +;    +}   ! +public + + + +bool + +  +IsHot + +  +{ + +  +get + +  +; + +  +set + +  +; + + ! +} + +" # +public   + +static    +EmaState    +New    +(    +)    +=>  ! # +new  $ ' +(  ' ( +)  ( ) +{  * + +Ema  , / +=  0 1 +$num  2 3 +,  3 4 +E  5 6 +=  7 8 +$num  9 < +,  < = +IsHot  > C +=  D E +false  F K +}  L M +;  M N +}   +public  +class  +Ema  +{  +private  +readonly  +double  +_alpha " +;" # +private  +EmaState  +_state  +=  +EmaState & +.& ' +New' * +(* + +)+ , +;, - +private  +EmaState  +_p_state  +=  +EmaState ( +.( ) +New) , +(, - +)- . +;. / +private  +double  +_lastValidValue " +;" # +public## + +Ema##  +(##  +int##  +period##  +)##  +{$$  +if%% + +(%%  +period%%  +<=%%  +$num%%  +)%%  +throw&&  +new&&  +ArgumentException&& ' +(&&' ( +$str&&( G +,&&G H +nameof&&I O +(&&O P +period&&P V +)&&V W +)&&W X +;&&X Y +_alpha((  +=((  +$num((  +/((  +(((  +period((  ++((  +$num((! " +)((" # +;((# $ +}))  +public// + +Ema//  +(//  +double//  +alpha//  +)//  +{00  +if11 + +(11  +alpha11  +<=11  +$num11  +||11  +alpha11  +>11 ! +$num11" # +)11# $ +throw22  +new22  +ArgumentException22 ' +(22' ( +$str22( G +,22G H +nameof22I O +(22O P +alpha22P U +)22U V +)22V W +;22W X +_alpha44  +=44  +alpha44  +;44  +}55  +public:: + +TValue::  +Value::  +{::  +get::  +;::  +private:: & +set::' * +;::* + +}::, - +public?? + +bool??  +IsHot??  +=>??  +_state??  +.??  +IsHot?? % +;??% & +[DD  + +MethodImplDD  +(DD  +MethodImplOptionsDD ! +.DD! " +AggressiveInliningDD" 4 +)DD4 5 +]DD5 6 +privateEE  +doubleEE  + GetValidValueEE  +(EE ! +doubleEE! ' +inputEE( - +)EE- . +{FF  +ifGG + +(GG  +doubleGG  +.GG  +IsFiniteGG  +(GG  +inputGG ! +)GG! " +)GG" # +{HH  +_lastValidValueII  +=II  +inputII # +;II# $ +returnJJ  +inputJJ  +;JJ  +}KK  +returnLL  +_lastValidValueLL  +;LL  +}MM  +[SS  + +MethodImplSS  +(SS  +MethodImplOptionsSS ! +.SS! " +AggressiveInliningSS" 4 +)SS4 5 +]SS5 6 +internalTT  +staticTT  +doubleTT  +ComputeTT " +(TT" # +doubleTT# ) +inputTT* / +,TT/ 0 +doubleTT1 7 +alphaTT8 = +,TT= > +refTT? B +EmaStateTTC K +stateTTL Q +)TTQ R +{UU  +stateVV  +.VV  +EmaVV  ++=VV  +alphaVV  +*VV  +(VV  +inputVV # +-VV$ % +stateVV& + +.VV+ , +EmaVV, / +)VV/ 0 +;VV0 1 +doubleXX  +resultXX  +;XX  +ifYY + +(YY  +!YY  +stateYY  +.YY  +IsHotYY  +)YY  +{ZZ  +state[[  +.[[  +E[[  +*=[[  +([[  +$num[[  +-[[  +alpha[[ # +)[[# $ +;[[$ % +state\\  +.\\  +IsHot\\  +=\\  +state\\  +.\\  +E\\ ! +<=\\" $ +$num\\% * +;\\* + +result]]  +=]]  +state]]  +.]]  +Ema]]  +/]]  +(]]! " +$num]]" % +-]]& ' +state]]( - +.]]- . +E]]. / +)]]/ 0 +;]]0 1 +}^^  +else__  +{``  +resultaa  +=aa  +stateaa  +.aa  +Emaaa  +;aa  +}bb  +returndd  +resultdd  +;dd  +}ee  +[mm  + +MethodImplmm  +(mm  +MethodImplOptionsmm ! +.mm! " +AggressiveInliningmm" 4 +)mm4 5 +]mm5 6 +publicnn + +TValuenn  +Updatenn  +(nn  +TValuenn  +inputnn % +,nn% & +boolnn' + +isNewnn, 1 +=nn2 3 +truenn4 8 +)nn8 9 +{oo  +ifpp + +(pp  +isNewpp  +)pp  +{qq  +_p_staterr  +=rr  +_staterr  +;rr  +}ss  +elsett  +{uu  +_statevv  +=vv  +_p_statevv  +;vv  +}ww  +doublezz  +valzz  +=zz  + GetValidValuezz " +(zz" # +inputzz# ( +.zz( ) +Valuezz) . +)zz. / +;zz/ 0 +val{{  +={{  +Compute{{  +({{  +val{{  +,{{  +_alpha{{ ! +,{{! " +ref{{# & +_state{{' - +){{- . +;{{. / +Value||  +=||  +new||  +TValue||  +(||  +input||  +.|| ! +Time||! % +,||% & +val||' * +)||* + +;||+ , +return}}  +Value}}  +;}}  +}~~  +public + + +TSeries +  +Update +  +( +  +TSeries + ! +source +" ( +) +( ) +{ +  +int +  +len +  += +  +source +  +. +  +Count +  +; +  +var +  +t +  += +  +new +  +List +  +< +  +long +  +> +  +( +  +len + " +) +" # +; +# $ +var +  +v +  += +  +new +  +List +  +< +  +double +  +> +  +( + ! +len +! $ +) +$ % +; +% & +CollectionsMarshal +  +. +  +SetCount + # +( +# $ +t +$ % +, +% & +len +' * +) +* + +; ++ , +CollectionsMarshal +  +. +  +SetCount + # +( +# $ +v +$ % +, +% & +len +' * +) +* + +; ++ , +var +  +tSpan +  += +  +CollectionsMarshal + & +. +& ' +AsSpan +' - +( +- . +t +. / +) +/ 0 +; +0 1 +var +  +vSpan +  += +  +CollectionsMarshal + & +. +& ' +AsSpan +' - +( +- . +v +. / +) +/ 0 +; +0 1 +var +  + sourceValues +  += +  +source + ! +. +! " +Values +" ( +; +( ) +var +  + sourceTimes +  += +  +source +  +. + ! +Times +! & +; +& ' +EmaState +  +state +  += +  +_state +  +; +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +len +  +; +  +i +! " +++ +" $ +) +$ % +{ +  +double +  +val +  += +  + GetValidValue + & +( +& ' + sourceValues +' 3 +[ +3 4 +i +4 5 +] +5 6 +) +6 7 +; +7 8 +val +  += +  +Compute +  +( +  +val +  +, +  +_alpha + % +, +% & +ref +' * +state ++ 0 +) +0 1 +; +1 2 +tSpan +  +[ +  +i +  +] +  += +  + sourceTimes + " +[ +" # +i +# $ +] +$ % +; +% & +vSpan +  +[ +  +i +  +] +  += +  +val +  +; +  +} +  +_state +  += +  +state +  +; +  +_p_state +  += +  +state +  +; +  +Value +  += +  +new +  +TValue +  +( +  +tSpan +  +[ + ! +len +! $ +- +% & +$num +' ( +] +( ) +, +) * +vSpan ++ 0 +[ +0 1 +len +1 4 +- +5 6 +$num +7 8 +] +8 9 +) +9 : +; +: ; +return +  +new +  +TSeries +  +( +  +t +  +, +  +v +  +) +  +; + ! +} +  +public + + +static +  +TSeries +  + Calculate + # +( +# $ +TSeries +$ + +source +, 2 +, +2 3 +int +4 7 +period +8 > +) +> ? +{ +  +var +  +ema +  += +  +new +  +Ema +  +( +  +period +  +) + ! +; +! " +return +  +ema +  +. +  +Update +  +( +  +source +  +) + ! +; +! " +} +  +public + + +void +  +Reset +  +( +  +) +  +{ +  +_state +  += +  +EmaState +  +. +  +New +  +( +  +) +  +; +  +_p_state +  += +  +_state +  +; +  +_lastValidValue +  += +  +$num +  +; +  +Value +  += +  +default +  +; +  +} +  +} ( +H/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tvalue/TValue.cs + namespace  + QuanTAlib +  +;  +[   +SkipLocalsInit    +]    +public + +  +readonly + +  +struct + +  +TValue + +  +: + +  + +IEquatable + + * +< + +* + +TValue + ++ 1 +> + +1 2 +{   +public + +readonly  +long  +Time  +;  +public + +readonly  +double  +Value  +; ! +public + +DateTime  + +AsDateTime  +=> ! +new" % +(% & +Time& * +,* + + DateTimeKind, 8 +.8 9 +Utc9 < +)< = +;= > +[  + +MethodImpl  +(  +MethodImplOptions ! +.! " +AggressiveInlining" 4 +)4 5 +]5 6 +public + +TValue  +(  +long  +time  +,  +double # +value$ ) +)) * +{  +Time  +=  +time  +;  +Value  +=  +value  +;  +}    +[""  + +MethodImpl""  +(""  +MethodImplOptions"" ! +.""! " +AggressiveInlining""" 4 +)""4 5 +]""5 6 +public## + +TValue##  +(##  +DateTime##  +time##  +,##  +double##! ' +value##( - +)##- . +{$$  +Time%%  +=%%  +time%%  +.%%  +Ticks%%  +;%%  +Value&&  +=&&  +value&&  +;&&  +}''  +[))  + +MethodImpl))  +())  +MethodImplOptions)) ! +.))! " +AggressiveInlining))" 4 +)))4 5 +]))5 6 +public** + +static**  +implicit**  +operator** # +double**$ * +(*** + +TValue**+ 1 +tv**2 4 +)**4 5 +=>**6 8 +tv**9 ; +.**; < +Value**< A +;**A B +[,,  + +MethodImpl,,  +(,,  +MethodImplOptions,, ! +.,,! " +AggressiveInlining,," 4 +),,4 5 +],,5 6 +public-- + +static--  +implicit--  +operator-- # +DateTime--$ , +(--, - +TValue--- 3 +tv--4 6 +)--6 7 +=>--8 : +new--; > +(--> ? +tv--? A +.--A B +Time--B F +,--F G + DateTimeKind--H T +.--T U +Utc--U X +)--X Y +;--Y Z +[//  + +MethodImpl//  +(//  +MethodImplOptions// ! +.//! " +AggressiveInlining//" 4 +)//4 5 +]//5 6 +public00 + +override00  +string00  +ToString00 # +(00# $ +)00$ % +=>00& ( +$"00) + +$str00+ , +{00, - + +AsDateTime00- 7 +:007 8 +$str008 K +}00K L +$str00L N +{00N O +Value00O T +:00T U +$str00U W +}00W X +$str00X Y +"00Y Z +;00Z [ +[22  + +MethodImpl22  +(22  +MethodImplOptions22 ! +.22! " +AggressiveInlining22" 4 +)224 5 +]225 6 +public33 + +bool33  +Equals33  +(33  +TValue33  +other33 # +)33# $ +=>33% ' +Time33( , +==33- / +other330 5 +.335 6 +Time336 : +&&33; = +Value33> C +==33D F +other33G L +.33L M +Value33M R +;33R S +public55 + +override55  +bool55  +Equals55  +(55  +object55 & +?55& ' +obj55( + +)55+ , +=>55- / +obj550 3 +is554 6 +TValue557 = +other55> C +&&55D F +Equals55G M +(55M N +other55N S +)55S T +;55T U +public66 + +override66  +int66  + GetHashCode66 # +(66# $ +)66$ % +=>66& ( +HashCode66) 1 +.661 2 +Combine662 9 +(669 : +Time66: > +,66> ? +Value66@ E +)66E F +;66F G +public77 + +static77  +bool77  +operator77  +==77 " +(77" # +TValue77# ) +left77* . +,77. / +TValue770 6 +right777 < +)77< = +=>77> @ +left77A E +.77E F +Equals77F L +(77L M +right77M R +)77R S +;77S T +public88 + +static88  +bool88  +operator88  +!=88 " +(88" # +TValue88# ) +left88* . +,88. / +TValue880 6 +right887 < +)88< = +=>88> @ +!88A B +left88B F +.88F G +Equals88G M +(88M N +right88N S +)88S T +;88T U +}99 V +J/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tseries/TSeries.cs + namespace  + QuanTAlib +  +;  +public   +class    +TSeries    +:    + IReadOnlyList   $ +<  $ % +TValue  % + +>  + , +{   + protected  +readonly  +List  +<  +long  +> ! +_t" $ +;$ % + protected  +readonly  +List  +<  +double " +>" # +_v$ & +;& ' +public + +string  +Name  +{  +get  +;  +set ! +;! " +}# $ +=% & +$str' - +;- . +public + +event  +Action  +<  +TValue  +>  +?  +Pub! $ +;$ % +public + +TSeries  +(  +)  +{  +_t + +=  +new  +List  +<  +long  +>  +(  +)  +;  +_v + +=  +new  +List  +<  +double  +>  +(  +)  +;  +}  +public## + +TSeries##  +(##  +int##  +capacity##  +)##  +{$$  +_t%% + +=%%  +new%%  +List%%  +<%%  +long%%  +>%%  +(%%  +capacity%% $ +)%%$ % +;%%% & +_v&& + +=&&  +new&&  +List&&  +<&&  +double&&  +>&&  +(&&  +capacity&& & +)&&& ' +;&&' ( +}''  +public,, + +TSeries,,  +(,,  +List,,  +<,,  +long,,  +>,,  +time,, " +,,," # +List,,$ ( +<,,( ) +double,,) / +>,,/ 0 +values,,1 7 +),,7 8 +{--  +_t.. + +=..  +time..  +;..  +_v// + +=//  +values//  +;//  +}00  +public22 + +int22  +Count22  +{33  +[44  + +MethodImpl44  +(44  +MethodImplOptions44 % +.44% & +AggressiveInlining44& 8 +)448 9 +]449 : +get55  +=>55  +_v55  +.55  +Count55  +;55  +}66  +public88 + +TValue88  +this88  +[88  +int88  +index88  +]88 ! +{99  +[::  + +MethodImpl::  +(::  +MethodImplOptions:: % +.::% & +AggressiveInlining::& 8 +)::8 9 +]::9 : +get;;  +=>;;  +new;;  +(;;  +_t;;  +[;;  +index;;  +];;  +,;;  +_v;;  +[;; ! +index;;! & +];;& ' +);;' ( +;;;( ) +}<<  +public>> + +TValue>>  +Last>>  +{??  +[@@  + +MethodImpl@@  +(@@  +MethodImplOptions@@ % +.@@% & +AggressiveInlining@@& 8 +)@@8 9 +]@@9 : +getAA  +=>AA  +_vAA  +.AA  +CountAA  +>AA  +$numAA  +?AA  +newAA ! +(AA! " +_tAA" $ +[AA$ % +^AA% & +$numAA& ' +]AA' ( +,AA( ) +_vAA* , +[AA, - +^AA- . +$numAA. / +]AA/ 0 +)AA0 1 +:AA2 3 +defaultAA4 ; +;AA; < +}BB  +publicDD + +doubleDD  + LastValueDD  +{EE  +[FF  + +MethodImplFF  +(FF  +MethodImplOptionsFF % +.FF% & +AggressiveInliningFF& 8 +)FF8 9 +]FF9 : +getGG  +=>GG  +_vGG  +.GG  +CountGG  +>GG  +$numGG  +?GG  +_vGG  +[GG ! +^GG! " +$numGG" # +]GG# $ +:GG% & +doubleGG' - +.GG- . +NaNGG. 1 +;GG1 2 +}HH  +publicJJ + +longJJ  +LastTimeJJ  +{KK  +[LL  + +MethodImplLL  +(LL  +MethodImplOptionsLL % +.LL% & +AggressiveInliningLL& 8 +)LL8 9 +]LL9 : +getMM  +=>MM  +_tMM  +.MM  +CountMM  +>MM  +$numMM  +?MM  +_tMM  +[MM ! +^MM! " +$numMM" # +]MM# $ +:MM% & +$numMM' ( +;MM( ) +}NN  +publicSS + + ReadOnlySpanSS  +<SS  +doubleSS  +>SS  +ValuesSS & +{TT  +[UU  + +MethodImplUU  +(UU  +MethodImplOptionsUU % +.UU% & +AggressiveInliningUU& 8 +)UU8 9 +]UU9 : +getVV  +=>VV  +CollectionsMarshalVV ! +.VV! " +AsSpanVV" ( +(VV( ) +_vVV) + +)VV+ , +;VV, - +}WW  +public\\ + + ReadOnlySpan\\  +<\\  +long\\  +>\\  +Times\\ # +{]]  +[^^  + +MethodImpl^^  +(^^  +MethodImplOptions^^ % +.^^% & +AggressiveInlining^^& 8 +)^^8 9 +]^^9 : +get__  +=>__  +CollectionsMarshal__ ! +.__! " +AsSpan__" ( +(__( ) +_t__) + +)__+ , +;__, - +}``  +[bb  + +MethodImplbb  +(bb  +MethodImplOptionsbb ! +.bb! " +AggressiveInliningbb" 4 +)bb4 5 +]bb5 6 +publiccc + +virtualcc  +voidcc  +Addcc  +(cc  +TValuecc " +valuecc# ( +,cc( ) +boolcc* . +isNewcc/ 4 +)cc4 5 +{dd  +ifee + +(ee  +isNewee  +||ee  +_vee  +.ee  +Countee  +==ee  +$numee! " +)ee" # +{ff  +_tgg  +.gg  +Addgg  +(gg  +valuegg  +.gg  +Timegg  +)gg  +;gg  +_vhh  +.hh  +Addhh  +(hh  +valuehh  +.hh  +Valuehh  +)hh  +;hh  +}ii  +elsejj  +{kk  +intmm  +lastIdxmm  +=mm  +_vmm  +.mm  +Countmm " +-mm# $ +$nummm% & +;mm& ' +_tnn  +[nn  +lastIdxnn  +]nn  +=nn  +valuenn  +.nn  +Timenn $ +;nn$ % +_voo  +[oo  +lastIdxoo  +]oo  +=oo  +valueoo  +.oo  +Valueoo % +;oo% & +}pp  +Pubqq  +?qq  +.qq  +Invokeqq  +(qq  +valueqq  +)qq  +;qq  +}rr  +[uu  + +MethodImpluu  +(uu  +MethodImplOptionsuu ! +.uu! " +AggressiveInlininguu" 4 +)uu4 5 +]uu5 6 +publicvv + +virtualvv  +voidvv  +Addvv  +(vv  +TValuevv " +valuevv# ( +)vv( ) +=>vv* , +Addvv- 0 +(vv0 1 +valuevv1 6 +,vv6 7 +truevv8 < +)vv< = +;vv= > +[xx  + +MethodImplxx  +(xx  +MethodImplOptionsxx ! +.xx! " +AggressiveInliningxx" 4 +)xx4 5 +]xx5 6 +publicyy + +voidyy  +Addyy  +(yy  +longyy  +timeyy  +,yy  +doubleyy % +valueyy& + +,yy+ , +boolyy- 1 +isNewyy2 7 +=yy8 9 +trueyy: > +)yy> ? +=>yy@ B +AddyyC F +(yyF G +newyyG J +TValueyyK Q +(yyQ R +timeyyR V +,yyV W +valueyyX ] +)yy] ^ +,yy^ _ +isNewyy` e +)yye f +;yyf g +[{{  + +MethodImpl{{  +({{  +MethodImplOptions{{ ! +.{{! " +AggressiveInlining{{" 4 +){{4 5 +]{{5 6 +public|| + +void||  +Add||  +(||  +DateTime||  +time|| ! +,||! " +double||# ) +value||* / +,||/ 0 +bool||1 5 +isNew||6 ; +=||< = +true||> B +)||B C +=>||D F +Add||G J +(||J K +new||K N +TValue||O U +(||U V +time||V Z +.||Z [ +Ticks||[ ` +,||` a +value||b g +)||g h +,||h i +isNew||j o +)||o p +;||p q +public~~ + +void~~  +Add~~  +(~~  + IEnumerable~~  +<~~  +double~~ & +>~~& ' +values~~( . +)~~. / +{  +long +  +t +  += +  +DateTime +  +. +  +UtcNow +  +. + ! +Ticks +! & +; +& ' +foreach +  +( +  +var +  +v +  +in +  +values +  +) + ! +{ +  +Add +  +( +  +new +  +TValue +  +( +  +t +  +, +  +v +  +) +  +, + ! +isNew +" ' +: +' ( +true +) - +) +- . +; +. / +t +  ++= +  +TimeSpan +  +. +  +TicksPerMinute + ( +; +( ) +} +  +} +  +public + + + IEnumerator +  +< +  +TValue +  +> +  + GetEnumerator + , +( +, - +) +- . +{ +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_v +  +. +  +Count + $ +; +$ % +i +& ' +++ +' ) +) +) * +{ +  +yield +  +return +  +new +  +TValue + # +( +# $ +_t +$ & +[ +& ' +i +' ( +] +( ) +, +) * +_v ++ - +[ +- . +i +. / +] +/ 0 +) +0 1 +; +1 2 +} +  +} +  + IEnumerator +  + IEnumerable +  +. +  + GetEnumerator + ) +( +) * +) +* + +=> +, . + GetEnumerator +/ < +( +< = +) += > +; +> ? +}  +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbarseries/TBarSeries.cs + namespace  + QuanTAlib +  +;  +public   +class    + +TBarSeries    +:    + IReadOnlyList   ' +<  ' ( +TBar  ( , +>  , - +{   + protected  +readonly  +List  +<  +long  +> ! +_t" $ +=% & +new' * +(* + +)+ , +;, - + protected  +readonly  +List  +<  +double " +>" # +_o$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_h$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_l$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_c$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_v$ & +=' ( +new) , +(, - +)- . +;. / +public + +string  +Name  +{  +get  +;  +set ! +;! " +}# $ +=% & +$str' , +;, - +public + +event  +Action  +<  +TBar  +>  +?  +Pub " +;" # +public + +TSeries  +Open  +{  +get  +;  +}  +public + +TSeries  +High  +{  +get  +;  +}  +public + +TSeries  +Low  +{  +get  +;  +}  +public + +TSeries  +Close  +{  +get  +;  +} ! +public + +TSeries  +Volume  +{  +get  +;  +}! " +public!! + +TSeries!!  +O!!  +=>!!  +Open!!  +;!!  +public"" + +TSeries""  +H""  +=>""  +High""  +;""  +public## + +TSeries##  +L##  +=>##  +Low##  +;##  +public$$ + +TSeries$$  +C$$  +=>$$  +Close$$  +;$$  +public%% + +TSeries%%  +V%%  +=>%%  +Volume%%  +;%%  +public'' + + +TBarSeries''  +(''  +)''  +{((  +Open**  +=**  +new**  +TSeries**  +(**  +_t**  +,**  +_o** ! +)**! " +{**# $ +Name**% ) +=*** + +$str**, 2 +}**3 4 +;**4 5 +High++  +=++  +new++  +TSeries++  +(++  +_t++  +,++  +_h++ ! +)++! " +{++# $ +Name++% ) +=++* + +$str++, 2 +}++3 4 +;++4 5 +Low,,  +=,,  +new,,  +TSeries,,  +(,,  +_t,,  +,,,  +_l,,  +),, ! +{,," # +Name,,$ ( +=,,) * +$str,,+ 0 +},,1 2 +;,,2 3 +Close--  +=--  +new--  +TSeries--  +(--  +_t--  +,--  +_c-- " +)--" # +{--$ % +Name--& * +=--+ , +$str--- 4 +}--5 6 +;--6 7 +Volume..  +=..  +new..  +TSeries..  +(..  +_t..  +,..  +_v..! # +)..# $ +{..% & +Name..' + +=.., - +$str... 6 +}..7 8 +;..8 9 +}//  +public44 + + +TBarSeries44  +(44  +int44  +capacity44 " +)44" # +{55  +_t66 + +=66  +new66  +List66  +<66  +long66  +>66  +(66  +capacity66 $ +)66$ % +;66% & +_o77 + +=77  +new77  +List77  +<77  +double77  +>77  +(77  +capacity77 & +)77& ' +;77' ( +_h88 + +=88  +new88  +List88  +<88  +double88  +>88  +(88  +capacity88 & +)88& ' +;88' ( +_l99 + +=99  +new99  +List99  +<99  +double99  +>99  +(99  +capacity99 & +)99& ' +;99' ( +_c:: + +=::  +new::  +List::  +<::  +double::  +>::  +(::  +capacity:: & +)::& ' +;::' ( +_v;; + +=;;  +new;;  +List;;  +<;;  +double;;  +>;;  +(;;  +capacity;; & +);;& ' +;;;' ( +Open>>  +=>>  +new>>  +TSeries>>  +(>>  +_t>>  +,>>  +_o>> ! +)>>! " +{>># $ +Name>>% ) +=>>* + +$str>>, 2 +}>>3 4 +;>>4 5 +High??  +=??  +new??  +TSeries??  +(??  +_t??  +,??  +_h?? ! +)??! " +{??# $ +Name??% ) +=??* + +$str??, 2 +}??3 4 +;??4 5 +Low@@  +=@@  +new@@  +TSeries@@  +(@@  +_t@@  +,@@  +_l@@  +)@@ ! +{@@" # +Name@@$ ( +=@@) * +$str@@+ 0 +}@@1 2 +;@@2 3 +CloseAA  +=AA  +newAA  +TSeriesAA  +(AA  +_tAA  +,AA  +_cAA " +)AA" # +{AA$ % +NameAA& * +=AA+ , +$strAA- 4 +}AA5 6 +;AA6 7 +VolumeBB  +=BB  +newBB  +TSeriesBB  +(BB  +_tBB  +,BB  +_vBB! # +)BB# $ +{BB% & +NameBB' + +=BB, - +$strBB. 6 +}BB7 8 +;BB8 9 +}CC  +publicEE + +intEE  +CountEE  +{FF  +[GG  + +MethodImplGG  +(GG  +MethodImplOptionsGG % +.GG% & +AggressiveInliningGG& 8 +)GG8 9 +]GG9 : +getHH  +=>HH  +_cHH  +.HH  +CountHH  +;HH  +}II  +publicKK + +TBarKK  +thisKK  +[KK  +intKK  +indexKK  +]KK  +{LL  +[MM  + +MethodImplMM  +(MM  +MethodImplOptionsMM % +.MM% & +AggressiveInliningMM& 8 +)MM8 9 +]MM9 : +getNN  +=>NN  +newNN  +(NN  +_tNN  +[NN  +indexNN  +]NN  +,NN  +_oNN  +[NN ! +indexNN! & +]NN& ' +,NN' ( +_hNN) + +[NN+ , +indexNN, 1 +]NN1 2 +,NN2 3 +_lNN4 6 +[NN6 7 +indexNN7 < +]NN< = +,NN= > +_cNN? A +[NNA B +indexNNB G +]NNG H +,NNH I +_vNNJ L +[NNL M +indexNNM R +]NNR S +)NNS T +;NNT U +}OO  +publicQQ + +TBarQQ  +LastQQ  +{RR  +[SS  + +MethodImplSS  +(SS  +MethodImplOptionsSS % +.SS% & +AggressiveInliningSS& 8 +)SS8 9 +]SS9 : +getTT  +=>TT  +_cTT  +.TT  +CountTT  +>TT  +$numTT  +?TT  +newTT ! +(TT! " +_tTT" $ +[TT$ % +^TT% & +$numTT& ' +]TT' ( +,TT( ) +_oTT* , +[TT, - +^TT- . +$numTT. / +]TT/ 0 +,TT0 1 +_hTT2 4 +[TT4 5 +^TT5 6 +$numTT6 7 +]TT7 8 +,TT8 9 +_lTT: < +[TT< = +^TT= > +$numTT> ? +]TT? @ +,TT@ A +_cTTB D +[TTD E +^TTE F +$numTTF G +]TTG H +,TTH I +_vTTJ L +[TTL M +^TTM N +$numTTN O +]TTO P +)TTP Q +:TTR S +defaultTTT [ +;TT[ \ +}UU  +publicWW + +longWW  +LastTimeWW  +{WW  +[WW  + +MethodImplWW & +(WW& ' +MethodImplOptionsWW' 8 +.WW8 9 +AggressiveInliningWW9 K +)WWK L +]WWL M +getWWN Q +=>WWR T +_tWWU W +.WWW X +CountWWX ] +>WW^ _ +$numWW` a +?WWb c +_tWWd f +[WWf g +^WWg h +$numWWh i +]WWi j +:WWk l +$numWWm n +;WWn o +}WWp q +publicXX + +doubleXX  +LastOpenXX  +{XX  +[XX  + +MethodImplXX ( +(XX( ) +MethodImplOptionsXX) : +.XX: ; +AggressiveInliningXX; M +)XXM N +]XXN O +getXXP S +=>XXT V +_oXXW Y +.XXY Z +CountXXZ _ +>XX` a +$numXXb c +?XXd e +_oXXf h +[XXh i +^XXi j +$numXXj k +]XXk l +:XXm n +doubleXXo u +.XXu v +NaNXXv y +;XXy z +}XX{ | +publicYY + +doubleYY  +LastHighYY  +{YY  +[YY  + +MethodImplYY ( +(YY( ) +MethodImplOptionsYY) : +.YY: ; +AggressiveInliningYY; M +)YYM N +]YYN O +getYYP S +=>YYT V +_hYYW Y +.YYY Z +CountYYZ _ +>YY` a +$numYYb c +?YYd e +_hYYf h +[YYh i +^YYi j +$numYYj k +]YYk l +:YYm n +doubleYYo u +.YYu v +NaNYYv y +;YYy z +}YY{ | +publicZZ + +doubleZZ  +LastLowZZ  +{ZZ  +[ZZ  + +MethodImplZZ ' +(ZZ' ( +MethodImplOptionsZZ( 9 +.ZZ9 : +AggressiveInliningZZ: L +)ZZL M +]ZZM N +getZZO R +=>ZZS U +_lZZV X +.ZZX Y +CountZZY ^ +>ZZ_ ` +$numZZa b +?ZZc d +_lZZe g +[ZZg h +^ZZh i +$numZZi j +]ZZj k +:ZZl m +doubleZZn t +.ZZt u +NaNZZu x +;ZZx y +}ZZz { +public[[ + +double[[  + LastClose[[  +{[[  +[[[  + +MethodImpl[[ ) +([[) * +MethodImplOptions[[* ; +.[[; < +AggressiveInlining[[< N +)[[N O +][[O P +get[[Q T +=>[[U W +_c[[X Z +.[[Z [ +Count[[[ ` +>[[a b +$num[[c d +?[[e f +_c[[g i +[[[i j +^[[j k +$num[[k l +][[l m +:[[n o +double[[p v +.[[v w +NaN[[w z +;[[z { +}[[| } +public\\ + +double\\  + +LastVolume\\  +{\\  +[\\  + +MethodImpl\\ * +(\\* + +MethodImplOptions\\+ < +.\\< = +AggressiveInlining\\= O +)\\O P +]\\P Q +get\\R U +=>\\V X +_v\\Y [ +.\\[ \ +Count\\\ a +>\\b c +$num\\d e +?\\f g +_v\\h j +[\\j k +^\\k l +$num\\l m +]\\m n +:\\o p +double\\q w +.\\w x +NaN\\x { +;\\{ | +}\\} ~ +[^^  + +MethodImpl^^  +(^^  +MethodImplOptions^^ ! +.^^! " +AggressiveInlining^^" 4 +)^^4 5 +]^^5 6 +public__ + +void__  +Add__  +(__  +TBar__  +bar__  +,__  +bool__ " +isNew__# ( +=__) * +true__+ / +)__/ 0 +{``  +ifaa + +(aa  +isNewaa  +||aa  +_caa  +.aa  +Countaa  +==aa  +$numaa! " +)aa" # +{bb  +_tcc  +.cc  +Addcc  +(cc  +barcc  +.cc  +Timecc  +)cc  +;cc  +_odd  +.dd  +Adddd  +(dd  +bardd  +.dd  +Opendd  +)dd  +;dd  +_hee  +.ee  +Addee  +(ee  +baree  +.ee  +Highee  +)ee  +;ee  +_lff  +.ff  +Addff  +(ff  +barff  +.ff  +Lowff  +)ff  +;ff  +_cgg  +.gg  +Addgg  +(gg  +bargg  +.gg  +Closegg  +)gg  +;gg  +_vhh  +.hh  +Addhh  +(hh  +barhh  +.hh  +Volumehh  +)hh  +;hh  +}ii  +elsejj  +{kk  +intll  +lastIdxll  +=ll  +_cll  +.ll  +Countll " +-ll# $ +$numll% & +;ll& ' +_tmm  +[mm  +lastIdxmm  +]mm  +=mm  +barmm  +.mm  +Timemm " +;mm" # +_onn  +[nn  +lastIdxnn  +]nn  +=nn  +barnn  +.nn  +Opennn " +;nn" # +_hoo  +[oo  +lastIdxoo  +]oo  +=oo  +baroo  +.oo  +Highoo " +;oo" # +_lpp  +[pp  +lastIdxpp  +]pp  +=pp  +barpp  +.pp  +Lowpp ! +;pp! " +_cqq  +[qq  +lastIdxqq  +]qq  +=qq  +barqq  +.qq  +Closeqq # +;qq# $ +_vrr  +[rr  +lastIdxrr  +]rr  +=rr  +barrr  +.rr  +Volumerr $ +;rr$ % +}ss  +Pubuu  +?uu  +.uu  +Invokeuu  +(uu  +baruu  +)uu  +;uu  +}vv  +[xx  + +MethodImplxx  +(xx  +MethodImplOptionsxx ! +.xx! " +AggressiveInliningxx" 4 +)xx4 5 +]xx5 6 +publicyy + +voidyy  +Addyy  +(yy  +longyy  +timeyy  +,yy  +doubleyy % +openyy& * +,yy* + +doubleyy, 2 +highyy3 7 +,yy7 8 +doubleyy9 ? +lowyy@ C +,yyC D +doubleyyE K +closeyyL Q +,yyQ R +doubleyyS Y +volumeyyZ ` +,yy` a +boolyyb f +isNewyyg l +=yym n +trueyyo s +)yys t +=>yyu w +Addzz  +(zz  +newzz  +TBarzz  +(zz  +timezz  +,zz  +openzz  +,zz  +highzz! % +,zz% & +lowzz' * +,zz* + +closezz, 1 +,zz1 2 +volumezz3 9 +)zz9 : +,zz: ; +isNewzz< A +)zzA B +;zzB C +[||  + +MethodImpl||  +(||  +MethodImplOptions|| ! +.||! " +AggressiveInlining||" 4 +)||4 5 +]||5 6 +public}} + +void}}  +Add}}  +(}}  +DateTime}}  +time}} ! +,}}! " +double}}# ) +open}}* . +,}}. / +double}}0 6 +high}}7 ; +,}}; < +double}}= C +low}}D G +,}}G H +double}}I O +close}}P U +,}}U V +double}}W ] +volume}}^ d +,}}d e +bool}}f j +isNew}}k p +=}}q r +true}}s w +)}}w x +=>}}y { +Add~~  +(~~  +new~~  +TBar~~  +(~~  +time~~  +.~~  +Ticks~~  +,~~  +open~~! % +,~~% & +high~~' + +,~~+ , +low~~- 0 +,~~0 1 +close~~2 7 +,~~7 8 +volume~~9 ? +)~~? @ +,~~@ A +isNew~~B G +)~~G H +;~~H I +public + + +void +  +Add +  +( +  + IEnumerable +  +< +  +long + $ +> +$ % +t +& ' +, +' ( + IEnumerable +) 4 +< +4 5 +double +5 ; +> +; < +o += > +, +> ? + IEnumerable +@ K +< +K L +double +L R +> +R S +h +T U +, +U V + IEnumerable +W b +< +b c +double +c i +> +i j +l +k l +, +l m + IEnumerable +n y +< +y z +double z  +>   +c   +,   + IEnumerable   +<   +double   +>   +v   +)   +{ +  +var +  +tArr +  += +  +t +  +as +  +long +  +[ +  +] +  +?? + ! +t +" # +. +# $ +ToArray +$ + +( ++ , +) +, - +; +- . +var +  +oArr +  += +  +o +  +as +  +double +  +[ +  +] +  +?? +! # +o +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +hArr +  += +  +h +  +as +  +double +  +[ +  +] +  +?? +! # +h +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +lArr +  += +  +l +  +as +  +double +  +[ +  +] +  +?? +! # +l +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +cArr +  += +  +c +  +as +  +double +  +[ +  +] +  +?? +! # +c +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +vArr +  += +  +v +  +as +  +double +  +[ +  +] +  +?? +! # +v +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +if + + +( +  +tArr +  +. +  +Length +  +!= +  +oArr +  +. +  +Length + & +|| +' ) +oArr +* . +. +. / +Length +/ 5 +!= +6 8 +hArr +9 = +. += > +Length +> D +|| +E G +hArr +  +. +  +Length +  +!= +  +lArr +  +. +  +Length + & +|| +' ) +lArr +* . +. +. / +Length +/ 5 +!= +6 8 +cArr +9 = +. += > +Length +> D +|| +E G +cArr +  +. +  +Length +  +!= +  +vArr +  +. +  +Length + & +) +& ' +{ +  +throw +  +new +  +ArgumentException + ' +( +' ( +$str +( N +) +N O +; +O P +} +  +_t + + +. + +  +AddRange +  +( +  +tArr +  +) +  +; +  +_o + + +. + +  +AddRange +  +( +  +oArr +  +) +  +; +  +_h + + +. + +  +AddRange +  +( +  +hArr +  +) +  +; +  +_l + + +. + +  +AddRange +  +( +  +lArr +  +) +  +; +  +_c + + +. + +  +AddRange +  +( +  +cArr +  +) +  +; +  +_v + + +. + +  +AddRange +  +( +  +vArr +  +) +  +; +  +} +  +public + + + IEnumerator +  +< +  +TBar +  +> +  + GetEnumerator + * +( +* + +) ++ , +{ +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_c +  +. +  +Count + $ +; +$ % +i +& ' +++ +' ) +) +) * +{ +  +yield +  +return +  +new +  +TBar + ! +( +! " +_t +" $ +[ +$ % +i +% & +] +& ' +, +' ( +_o +) + +[ ++ , +i +, - +] +- . +, +. / +_h +0 2 +[ +2 3 +i +3 4 +] +4 5 +, +5 6 +_l +7 9 +[ +9 : +i +: ; +] +; < +, +< = +_c +> @ +[ +@ A +i +A B +] +B C +, +C D +_v +E G +[ +G H +i +H I +] +I J +) +J K +; +K L +} +  +} +  + IEnumerator +  + IEnumerable +  +. +  + GetEnumerator + ) +( +) * +) +* + +=> +, . + GetEnumerator +/ < +( +< = +) += > +; +> ? +} b +D/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbar/TBar.cs + namespace  + QuanTAlib +  +;  +[   +SkipLocalsInit    +]    +public + +  +readonly + +  +struct + +  +TBar + +  +: + +  + +IEquatable + + ( +< + +( ) +TBar + +) - +> + +- . +{   +public   + +readonly    +long    +Time    +;    +public   + +readonly    +double    +Open    +;    +public + +readonly  +double  +High  +;  +public + +readonly  +double  +Low  +;  +public + +readonly  +double  +Close  +; ! +public + +readonly  +double  +Volume ! +;! " +public + +DateTime  + +AsDateTime  +=> ! +new" % +(% & +Time& * +,* + + DateTimeKind, 8 +.8 9 +Utc9 < +)< = +;= > +public + +TValue  +O  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +OpenZ ^ +)^ _ +;_ ` +}a b +public + +TValue  +H  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +HighZ ^ +)^ _ +;_ ` +}a b +public + +TValue  +L  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +LowZ ] +)] ^ +;^ _ +}` a +public + +TValue  +C  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +CloseZ _ +)_ ` +;` a +}b c +public + +TValue  +V  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +VolumeZ ` +)` a +;a b +}c d +public + +double  +HL2  +{  +[  + +MethodImpl # +(# $ +MethodImplOptions$ 5 +.5 6 +AggressiveInlining6 H +)H I +]I J +getK N +=>O Q +(R S +HighS W ++X Y +LowZ ] +)] ^ +*_ ` +$numa d +;d e +}f g +public + +double  +OC2  +{  +[  + +MethodImpl # +(# $ +MethodImplOptions$ 5 +.5 6 +AggressiveInlining6 H +)H I +]I J +getK N +=>O Q +(R S +OpenS W ++X Y +CloseZ _ +)_ ` +*a b +$numc f +;f g +}h i +public + +double  +OHL3  +{  +[  + +MethodImpl $ +($ % +MethodImplOptions% 6 +.6 7 +AggressiveInlining7 I +)I J +]J K +getL O +=>P R +(S T +OpenT X ++Y Z +High[ _ ++` a +Lowb e +)e f +/g h +$numi l +;l m +}n o +public   + +double    +HLC3    +{    +[    + +MethodImpl   $ +(  $ % +MethodImplOptions  % 6 +.  6 7 +AggressiveInlining  7 I +)  I J +]  J K +get  L O +=>  P R +(  S T +High  T X ++  Y Z +Low  [ ^ ++  _ ` +Close  a f +)  f g +/  h i +$num  j m +;  m n +}  o p +public!! + +double!!  +OHLC4!!  +{!!  +[!!  + +MethodImpl!! % +(!!% & +MethodImplOptions!!& 7 +.!!7 8 +AggressiveInlining!!8 J +)!!J K +]!!K L +get!!M P +=>!!Q S +(!!T U +Open!!U Y ++!!Z [ +High!!\ ` ++!!a b +Low!!c f ++!!g h +Close!!i n +)!!n o +*!!p q +$num!!r v +;!!v w +}!!x y +public"" + +double""  +HLCC4""  +{""  +[""  + +MethodImpl"" % +(""% & +MethodImplOptions""& 7 +.""7 8 +AggressiveInlining""8 J +)""J K +]""K L +get""M P +=>""Q S +(""T U +High""U Y ++""Z [ +Low""\ _ ++""` a +Close""b g ++""h i +Close""j o +)""o p +*""q r +$num""s w +;""w x +}""y z +[$$  + +MethodImpl$$  +($$  +MethodImplOptions$$ ! +.$$! " +AggressiveInlining$$" 4 +)$$4 5 +]$$5 6 +public%% + +TBar%%  +(%%  +long%%  +time%%  +,%%  +double%% ! +open%%" & +,%%& ' +double%%( . +high%%/ 3 +,%%3 4 +double%%5 ; +low%%< ? +,%%? @ +double%%A G +close%%H M +,%%M N +double%%O U +volume%%V \ +)%%\ ] +{&&  +Time''  +=''  +time''  +;''  +Open((  +=((  +open((  +;((  +High))  +=))  +high))  +;))  +Low**  +=**  +low**  +;**  +Close++  +=++  +close++  +;++  +Volume,,  +=,,  +volume,,  +;,,  +}--  +[//  + +MethodImpl//  +(//  +MethodImplOptions// ! +.//! " +AggressiveInlining//" 4 +)//4 5 +]//5 6 +public00 + +TBar00  +(00  +DateTime00  +time00  +,00  +double00 % +open00& * +,00* + +double00, 2 +high003 7 +,007 8 +double009 ? +low00@ C +,00C D +double00E K +close00L Q +,00Q R +double00S Y +volume00Z ` +)00` a +{11  +Time22  +=22  +time22  +.22  +Ticks22  +;22  +Open33  +=33  +open33  +;33  +High44  +=44  +high44  +;44  +Low55  +=55  +low55  +;55  +Close66  +=66  +close66  +;66  +Volume77  +=77  +volume77  +;77  +}88  +[::  + +MethodImpl::  +(::  +MethodImplOptions:: ! +.::! " +AggressiveInlining::" 4 +)::4 5 +]::5 6 +public;; + +static;;  +implicit;;  +operator;; # +double;;$ * +(;;* + +TBar;;+ / +bar;;0 3 +);;3 4 +=>;;5 7 +bar;;8 ; +.;;; < +Close;;< A +;;;A B +[==  + +MethodImpl==  +(==  +MethodImplOptions== ! +.==! " +AggressiveInlining==" 4 +)==4 5 +]==5 6 +public>> + +static>>  +implicit>>  +operator>> # +TValue>>$ * +(>>* + +TBar>>+ / +bar>>0 3 +)>>3 4 +=>>>5 7 +new>>8 ; +(>>; < +bar>>< ? +.>>? @ +Time>>@ D +,>>D E +bar>>F I +.>>I J +Close>>J O +)>>O P +;>>P Q +[@@  + +MethodImpl@@  +(@@  +MethodImplOptions@@ ! +.@@! " +AggressiveInlining@@" 4 +)@@4 5 +]@@5 6 +publicAA + +staticAA  +implicitAA  +operatorAA # +DateTimeAA$ , +(AA, - +TBarAA- 1 +barAA2 5 +)AA5 6 +=>AA7 9 +newAA: = +(AA= > +barAA> A +.AAA B +TimeAAB F +,AAF G + DateTimeKindAAH T +.AAT U +UtcAAU X +)AAX Y +;AAY Z +[CC  + +MethodImplCC  +(CC  +MethodImplOptionsCC ! +.CC! " +AggressiveInliningCC" 4 +)CC4 5 +]CC5 6 +publicDD + +overrideDD  +stringDD  +ToStringDD # +(DD# $ +)DD$ % +=>DD& ( +$"DD) + +$strDD+ , +{DD, - + +AsDateTimeDD- 7 +:DD7 8 +$strDD8 K +}DDK L +$strDDL P +{DDP Q +OpenDDQ U +:DDU V +$strDDV X +}DDX Y +$strDDY ] +{DD] ^ +HighDD^ b +:DDb c +$strDDc e +}DDe f +$strDDf j +{DDj k +LowDDk n +:DDn o +$strDDo q +}DDq r +$strDDr v +{DDv w +CloseDDw | +:DD| } +$strDD}  +} DD  +$str +DD  +{ +DD  +Volume +DD  +: +DD  +$str +DD  +} +DD  +$str +DD  +" +DD  +; +DD  +[FF  + +MethodImplFF  +(FF  +MethodImplOptionsFF ! +.FF! " +AggressiveInliningFF" 4 +)FF4 5 +]FF5 6 +publicGG + +boolGG  +EqualsGG  +(GG  +TBarGG  +otherGG ! +)GG! " +=>GG# % +TimeHH  +==HH  +otherHH  +.HH  +TimeHH  +&&HH  +OpenII  +==II  +otherII  +.II  +OpenII  +&&II  +HighJJ  +==JJ  +otherJJ  +.JJ  +HighJJ  +&&JJ  +LowKK  +==KK  +otherKK  +.KK  +LowKK  +&&KK  +CloseLL  +==LL  +otherLL  +.LL  +CloseLL  +&&LL  +VolumeMM  +==MM  +otherMM  +.MM  +VolumeMM  +;MM  +publicOO + +overrideOO  +boolOO  +EqualsOO  +(OO  +objectOO & +?OO& ' +objOO( + +)OO+ , +=>OO- / +objOO0 3 +isOO4 6 +TBarOO7 ; +otherOO< A +&&OOB D +EqualsOOE K +(OOK L +otherOOL Q +)OOQ R +;OOR S +publicPP + +overridePP  +intPP  + GetHashCodePP # +(PP# $ +)PP$ % +=>PP& ( +HashCodePP) 1 +.PP1 2 +CombinePP2 9 +(PP9 : +TimePP: > +,PP> ? +OpenPP@ D +,PPD E +HighPPF J +,PPJ K +LowPPL O +,PPO P +ClosePPQ V +,PPV W +VolumePPX ^ +)PP^ _ +;PP_ ` +publicQQ + +staticQQ  +boolQQ  +operatorQQ  +==QQ " +(QQ" # +TBarQQ# ' +leftQQ( , +,QQ, - +TBarQQ. 2 +rightQQ3 8 +)QQ8 9 +=>QQ: < +leftQQ= A +.QQA B +EqualsQQB H +(QQH I +rightQQI N +)QQN O +;QQO P +publicRR + +staticRR  +boolRR  +operatorRR  +!=RR " +(RR" # +TBarRR# ' +leftRR( , +,RR, - +TBarRR. 2 +rightRR3 8 +)RR8 9 +=>RR: < +!RR= > +leftRR> B +.RRB C +EqualsRRC I +(RRI J +rightRRJ O +)RRO P +;RRP Q +}SS  +N/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/simd/SimdExtensions.cs + namespace  + QuanTAlib +  +;  +public + +  +static + +  +class + +  +SimdExtensions + + " +{   +[    + +MethodImpl    +(    +MethodImplOptions   ! +.  ! " +AggressiveInlining  " 4 +)  4 5 +]  5 6 +internal  +static  +bool # +ContainsNonFiniteScalar 0 +(0 1 + ReadOnlySpan1 = +<= > +double> D +>D E +spanF J +)J K +{  +for  +(  +int  +i  +=  +$num  +;  +i  +<  +span  +. ! +Length! ' +;' ( +i) * +++* , +), - +{  +if  +(  +!  +double  +.  +IsFinite  +( ! +span! % +[% & +i& ' +]' ( +)( ) +)) * +return  +true  +;  +}  +return  +false  +;  +}  +[  + +MethodImpl  +(  +MethodImplOptions ! +.! " +AggressiveInlining" 4 +)4 5 +]5 6 +internal  +static  +double  + SumScalar $ +($ % + ReadOnlySpan% 1 +<1 2 +double2 8 +>8 9 +span: > +)> ? +{  +double  +scalar  +=  +$num  +;  +for  +(  +int  +i  +=  +$num  +;  +i  +<  +span  +. ! +Length! ' +;' ( +i) * +++* , +), - +scalar  ++=  +span  +[  +i  +]  +;  +return  +scalar  +;  +}  +[!!  + +MethodImpl!!  +(!!  +MethodImplOptions!! ! +.!!! " +AggressiveInlining!!" 4 +)!!4 5 +]!!5 6 +internal""  +static""  +double""  + MinScalar"" $ +(""$ % + ReadOnlySpan""% 1 +<""1 2 +double""2 8 +>""8 9 +span"": > +)""> ? +{##  +double$$  +min$$  +=$$  +span$$  +[$$  +$num$$  +]$$  +;$$  +for%%  +(%%  +int%%  +i%%  +=%%  +$num%%  +;%%  +i%%  +<%%  +span%%  +.%% ! +Length%%! ' +;%%' ( +i%%) * +++%%* , +)%%, - +{&&  +if''  +(''  +span''  +[''  +i''  +]''  +<''  +min''  +)''  +min((  +=((  +span((  +[((  +i((  +]((  +;((  +}))  +return**  +min**  +;**  +}++  +[--  + +MethodImpl--  +(--  +MethodImplOptions-- ! +.--! " +AggressiveInlining--" 4 +)--4 5 +]--5 6 +internal..  +static..  +double..  + MaxScalar.. $ +(..$ % + ReadOnlySpan..% 1 +<..1 2 +double..2 8 +>..8 9 +span..: > +)..> ? +{//  +double00  +max00  +=00  +span00  +[00  +$num00  +]00  +;00  +for11  +(11  +int11  +i11  +=11  +$num11  +;11  +i11  +<11  +span11  +.11 ! +Length11! ' +;11' ( +i11) * +++11* , +)11, - +{22  +if33  +(33  +span33  +[33  +i33  +]33  +>33  +max33  +)33  +max44  +=44  +span44  +[44  +i44  +]44  +;44  +}55  +return66  +max66  +;66  +}77  +[99  + +MethodImpl99  +(99  +MethodImplOptions99 ! +.99! " +AggressiveInlining99" 4 +)994 5 +]995 6 +internal::  +static::  +double::  +VarianceScalar:: ) +(::) * + ReadOnlySpan::* 6 +<::6 7 +double::7 = +>::= > +span::? C +,::C D +double::E K +mean::L P +)::P Q +{;;  +double<<  + +sumSquares<<  +=<<  +$num<<  +;<<  +for==  +(==  +int==  +i==  +===  +$num==  +;==  +i==  +<==  +span==  +.== ! +Length==! ' +;==' ( +i==) * +++==* , +)==, - +{>>  +double??  +diff??  +=??  +span??  +[??  +i??  +]?? ! +-??" # +mean??$ ( +;??( ) + +sumSquares@@  ++=@@  +diff@@  +*@@  +diff@@! % +;@@% & +}AA  +returnBB  + +sumSquaresBB  +/BB  +(BB  +spanBB ! +.BB! " +LengthBB" ( +-BB) * +$numBB+ , +)BB, - +;BB- . +}CC  +[EE  + +MethodImplEE  +(EE  +MethodImplOptionsEE ! +.EE! " +AggressiveInliningEE" 4 +)EE4 5 +]EE5 6 +internalFF  +staticFF  +(FF  +doubleFF  +MinFF  +,FF  +doubleFF! ' +MaxFF( + +)FF+ , + MinMaxScalarFF- 9 +(FF9 : + ReadOnlySpanFF: F +<FFF G +doubleFFG M +>FFM N +spanFFO S +)FFS T +{GG  +doubleHH  + scalarMinHH  +=HH  +spanHH  +[HH  +$numHH ! +]HH! " +;HH" # +doubleII  + scalarMaxII  +=II  +spanII  +[II  +$numII ! +]II! " +;II" # +forJJ  +(JJ  +intJJ  +iJJ  +=JJ  +$numJJ  +;JJ  +iJJ  +<JJ  +spanJJ  +.JJ ! +LengthJJ! ' +;JJ' ( +iJJ) * +++JJ* , +)JJ, - +{KK  +ifLL  +(LL  +spanLL  +[LL  +iLL  +]LL  +<LL  + scalarMinLL # +)LL# $ + scalarMinLL% . +=LL/ 0 +spanLL1 5 +[LL5 6 +iLL6 7 +]LL7 8 +;LL8 9 +ifMM  +(MM  +spanMM  +[MM  +iMM  +]MM  +>MM  + scalarMaxMM # +)MM# $ + scalarMaxMM% . +=MM/ 0 +spanMM1 5 +[MM5 6 +iMM6 7 +]MM7 8 +;MM8 9 +}NN  +returnOO  +(OO  + scalarMinOO  +,OO  + scalarMaxOO $ +)OO$ % +;OO% & +}PP  +[XX  + +MethodImplXX  +(XX  +MethodImplOptionsXX ! +.XX! " +AggressiveInliningXX" 4 +)XX4 5 +]XX5 6 +publicYY + +staticYY  +boolYY  +ContainsNonFiniteYY ( +(YY( ) +thisYY) - + ReadOnlySpanYY. : +<YY: ; +doubleYY; A +>YYA B +spanYYC G +)YYG H +{ZZ  +if[[ + +([[  +span[[  +.[[  +IsEmpty[[  +)[[  +return[[  +false[[! & +;[[& ' +if]] + +(]]  +Vector]]  +.]] ! +IsHardwareAccelerated]] ( +&&]]) + +span]], 0 +.]]0 1 +Length]]1 7 +>=]]8 : +Vector]]; A +<]]A B +double]]B H +>]]H I +.]]I J +Count]]J O +)]]O P +{^^  +int__  + +vectorSize__  +=__  +Vector__ # +<__# $ +double__$ * +>__* + +.__+ , +Count__, 1 +;__1 2 +int``  +i``  +=``  +$num``  +;``  +varaa  +maxValueaa  +=aa  +newaa  +Vectoraa % +<aa% & +doubleaa& , +>aa, - +(aa- . +doubleaa. 4 +.aa4 5 +MaxValueaa5 = +)aa= > +;aa> ? +forcc  +(cc  +;cc  +icc  +<=cc  +spancc  +.cc  +Lengthcc # +-cc$ % + +vectorSizecc& 0 +;cc0 1 +icc2 3 ++=cc4 6 + +vectorSizecc7 A +)ccA B +{dd  +varee  +vectoree  +=ee  +newee  +Vectoree! ' +<ee' ( +doubleee( . +>ee. / +(ee/ 0 +spanee0 4 +.ee4 5 +Sliceee5 : +(ee: ; +iee; < +,ee< = + +vectorSizeee> H +)eeH I +)eeI J +;eeJ K +varhh  +nanCheckhh  +=hh  +Vectorhh % +.hh% & +Equalshh& , +(hh, - +vectorhh- 3 +,hh3 4 +vectorhh5 ; +)hh; < +;hh< = +ifii  +(ii  +!ii  +nanCheckii  +.ii  +Equalsii $ +(ii$ % +Vectorii% + +<ii+ , +longii, 0 +>ii0 1 +.ii1 2 + +AllBitsSetii2 < +)ii< = +)ii= > +returnjj  +truejj  +;jj  +varmm  +absVecmm  +=mm  +Vectormm # +.mm# $ +Absmm$ ' +(mm' ( +vectormm( . +)mm. / +;mm/ 0 +varnn  +infChecknn  +=nn  +Vectornn % +.nn% & + GreaterThannn& 1 +(nn1 2 +absVecnn2 8 +,nn8 9 +maxValuenn: B +)nnB C +;nnC D +ifoo  +(oo  +!oo  +infCheckoo  +.oo  +Equalsoo $ +(oo$ % +Vectoroo% + +<oo+ , +longoo, 0 +>oo0 1 +.oo1 2 +Zerooo2 6 +)oo6 7 +)oo7 8 +returnpp  +truepp  +;pp  +}qq  +fortt  +(tt  +;tt  +itt  +<tt  +spantt  +.tt  +Lengthtt " +;tt" # +itt$ % +++tt% ' +)tt' ( +{uu  +ifvv  +(vv  +!vv  +doublevv  +.vv  +IsFinitevv $ +(vv$ % +spanvv% ) +[vv) * +ivv* + +]vv+ , +)vv, - +)vv- . +returnww  +trueww  +;ww  +}xx  +returnzz  +falsezz  +;zz  +}{{  +return}} # +ContainsNonFiniteScalar}} & +(}}& ' +span}}' + +)}}+ , +;}}, - +}~~  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  +SumSIMD +  +( + ! +this +! % + ReadOnlySpan +& 2 +< +2 3 +double +3 9 +> +9 : +span +; ? +) +? @ +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +$num +! $ +; +$ % +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +Vector +  +< +  +double +  +> +  +sum +  += +  +Vector +! ' +< +' ( +double +( . +> +. / +. +/ 0 +Zero +0 4 +; +4 5 +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +int +  +i +  += +  +$num +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +sum +  ++= +  +vector +  +; +  +} +  +double +  +result +  += +  +$num +  +; +  +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +result +  ++= +  +sum +  +[ +  +j +  +] +  +; + ! +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +result +  ++= +  +span +  +[ +  +i +  +] + ! +; +! " +return +  +result +  +; +  +} +  +return +  + SumScalar +  +( +  +span +  +) +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  +MinSIMD +  +( + ! +this +! % + ReadOnlySpan +& 2 +< +2 3 +double +3 9 +> +9 : +span +; ? +) +? @ +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +double +! ' +. +' ( +NaN +( + +; ++ , +if + + +( +  +span +  +. +  +Length +  +== +  +$num +  +) +  +return + $ +span +% ) +[ +) * +$num +* + +] ++ , +; +, - +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +var +  +minVec +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +span +, 0 +. +0 1 +Slice +1 6 +( +6 7 +$num +7 8 +, +8 9 + +vectorSize +: D +) +D E +) +E F +; +F G +int +  +i +  += +  + +vectorSize +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +minVec +  += +  +Vector +  +. +  +Min + # +( +# $ +minVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +} +  +double +  +result +  += +  +minVec + " +[ +" # +$num +# $ +] +$ % +; +% & +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +{ +  +if +  +( +  +minVec +  +[ +  +j +  +] +  +< +  +result + & +) +& ' +result +  += +  +minVec + # +[ +# $ +j +$ % +] +% & +; +& ' +} +  +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +if +  +( +  +span +  +[ +  +i +  +] +  +< +  +result + $ +) +$ % +result +  += +  +span + ! +[ +! " +i +" # +] +# $ +; +$ % +} +  +return +  +result +  +; +  +} +  +return +  + MinScalar +  +( +  +span +  +) +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  +MaxSIMD +  +( + ! +this +! % + ReadOnlySpan +& 2 +< +2 3 +double +3 9 +> +9 : +span +; ? +) +? @ +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +double +! ' +. +' ( +NaN +( + +; ++ , +if + + +( +  +span +  +. +  +Length +  +== +  +$num +  +) +  +return + $ +span +% ) +[ +) * +$num +* + +] ++ , +; +, - +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +var +  +maxVec +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +span +, 0 +. +0 1 +Slice +1 6 +( +6 7 +$num +7 8 +, +8 9 + +vectorSize +: D +) +D E +) +E F +; +F G +int +  +i +  += +  + +vectorSize +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +maxVec +  += +  +Vector +  +. +  +Max + # +( +# $ +maxVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +} +  +double +  +result +  += +  +maxVec + " +[ +" # +$num +# $ +] +$ % +; +% & +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +{ +  +if +  +( +  +maxVec +  +[ +  +j +  +] +  +> +  +result + & +) +& ' +result +  += +  +maxVec + # +[ +# $ +j +$ % +] +% & +; +& ' +} +  +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +if +  +( +  +span +  +[ +  +i +  +] +  +> +  +result + $ +) +$ % +result +  += +  +span + ! +[ +! " +i +" # +] +# $ +; +$ % +} +  +return +  +result +  +; +  +} +  +return +  + MaxScalar +  +( +  +span +  +) +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  + AverageSIMD + $ +( +$ % +this +% ) + ReadOnlySpan +* 6 +< +6 7 +double +7 = +> += > +span +? C +) +C D +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +double +! ' +. +' ( +NaN +( + +; ++ , +return +  +span +  +. +  +SumSIMD +  +( +  +) +  +/ +  +span + $ +. +$ % +Length +% + +; ++ , +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  + VarianceSIMD + % +( +% & +this +& * + ReadOnlySpan ++ 7 +< +7 8 +double +8 > +> +> ? +span +@ D +, +D E +double +F L +? +L M +mean +N R += +S T +null +U Y +) +Y Z +{ +  +if + + +( +  +span +  +. +  +Length +  +< +  +$num +  +) +  +return + # +double +$ * +. +* + +NaN ++ . +; +. / +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +double +  +m +  += +  +mean +  +?? +  +span +  +. +  + AverageSIMD + + +( ++ , +) +, - +; +- . +if + + +( +  +! +  +double +  +. +  +IsFinite +  +( +  +m +  +) +  +) +  +return +! ' +double +( . +. +. / +NaN +/ 2 +; +2 3 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +var +  +meanVec +  += +  +new +  +Vector + $ +< +$ % +double +% + +> ++ , +( +, - +m +- . +) +. / +; +/ 0 +Vector +  +< +  +double +  +> +  +sumSq +  += +! " +Vector +# ) +< +) * +double +* 0 +> +0 1 +. +1 2 +Zero +2 6 +; +6 7 +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +int +  +i +  += +  +$num +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +var +  +diff +  += +  +vector + ! +- +" # +meanVec +$ + +; ++ , +sumSq +  ++= +  +diff +  +* +  +diff + $ +; +$ % +} +  +double +  +result +  += +  +$num +  +; +  +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +result +  ++= +  +sumSq +  +[ +  +j + ! +] +! " +; +" # +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +double +  +diff +  += +  +span + " +[ +" # +i +# $ +] +$ % +- +& ' +m +( ) +; +) * +result +  ++= +  +diff +  +* +  +diff +! % +; +% & +} +  +return +  +result +  +/ +  +( +  +span + ! +. +! " +Length +" ( +- +) * +$num ++ , +) +, - +; +- . +} +  +return +  +VarianceScalar +  +( +  +span + " +, +" # +m +$ % +) +% & +; +& ' +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  + +StdDevSIMD + # +( +# $ +this +$ ( + ReadOnlySpan +) 5 +< +5 6 +double +6 < +> +< = +span +> B +, +B C +double +D J +? +J K +mean +L P += +Q R +null +S W +) +W X +{ +  +return +  +Math +  +. +  +Sqrt +  +( +  +span +  +. +  + VarianceSIMD + * +( +* + +mean ++ / +) +/ 0 +) +0 1 +; +1 2 +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +( +  +double +  +Min +  +, +  +double + % +Max +& ) +) +) * + +MinMaxSIMD ++ 5 +( +5 6 +this +6 : + ReadOnlySpan +; G +< +G H +double +H N +> +N O +span +P T +) +T U +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +( +! " +double +" ( +. +( ) +NaN +) , +, +, - +double +. 4 +. +4 5 +NaN +5 8 +) +8 9 +; +9 : +if + + +( +  +span +  +. +  +Length +  +== +  +$num +  +) +  +return + $ +( +% & +span +& * +[ +* + +$num ++ , +] +, - +, +- . +span +/ 3 +[ +3 4 +$num +4 5 +] +5 6 +) +6 7 +; +7 8 +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +( +- . +double +. 4 +. +4 5 +NaN +5 8 +, +8 9 +double +: @ +. +@ A +NaN +A D +) +D E +; +E F +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +var +  +minVec +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +span +, 0 +. +0 1 +Slice +1 6 +( +6 7 +$num +7 8 +, +8 9 + +vectorSize +: D +) +D E +) +E F +; +F G +var +  +maxVec +  += +  +minVec +  +; +  +int +  +i +  += +  + +vectorSize +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +minVec +  += +  +Vector +  +. +  +Min + # +( +# $ +minVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +maxVec +  += +  +Vector +  +. +  +Max + # +( +# $ +maxVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +} +  +double +  +min +  += +  +minVec +  +[ +  +$num + ! +] +! " +; +" # +double +  +max +  += +  +maxVec +  +[ +  +$num + ! +] +! " +; +" # +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +{ +  +if +  +( +  +minVec +  +[ +  +j +  +] +  +< +  +min + # +) +# $ +min +% ( += +) * +minVec ++ 1 +[ +1 2 +j +2 3 +] +3 4 +; +4 5 +if +  +( +  +maxVec +  +[ +  +j +  +] +  +> +  +max + # +) +# $ +max +% ( += +) * +maxVec ++ 1 +[ +1 2 +j +2 3 +] +3 4 +; +4 5 +} +  +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +if +  +( +  +span +  +[ +  +i +  +] +  +< +  +min + ! +) +! " +min +# & += +' ( +span +) - +[ +- . +i +. / +] +/ 0 +; +0 1 +if +  +( +  +span +  +[ +  +i +  +] +  +> +  +max + ! +) +! " +max +# & += +' ( +span +) - +[ +- . +i +. / +] +/ 0 +; +0 1 +} +  +return +  +( +  +min +  +, +  +max +  +) +  +; +  +} +  +return +  + MinMaxScalar +  +( +  +span +  +) + ! +; +! " +} +  +}  +B/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs + namespace  + QuanTAlib +  +;  +public  +enum  + +SourceType  +{  +Open    +,    +High   +  +,    +Low    +,    +Close    +,    +HL2    +,    +OC2  ! $ +,  $ % +OHL3  & * +,  * + +HLC3  , 0 +,  0 1 +OHLC4  2 7 +,  7 8 +HLCC4  9 > +} + +  +public   +enum    +MaType    +{   +Alma  +,  +Dema +  +,  +Dsma  +,  +Dwma  +,  +Ema  +,  +Epma! % +,% & +Frama' , +,, - +Fwma. 2 +,2 3 +Gma4 7 +,7 8 +Hma9 < +,< = +Hwma> B +,B C +JmaD G +,G H +KamaI M +,M N +MaafO S +,S T +MgdiU Y +,Y Z +MMa[ ^ +,^ _ +Pwma` d +,d e +Remaf j +,j k +Rmal o +,o p +Sinemaq w +,w x +Smay | +,| } +Smma ~  +, +  +T3 +  +, +  +Tema +  +, +  +Trima +  +, +  +Vidya +  +, +  +Wma +  +, +  +Zlema +  +}  +public  +static  +class  +IndicatorExtensions ' +{  +public + +static  +readonly  +Color  +Averages! ) +=* + +Color, 1 +.1 2 +FromArgb2 : +(: ; +$num; > +,> ? +$num@ C +,C D +$numE H +)H I +;I J +public + +static  +readonly  +Color  +Volume! ' +=( ) +Color* / +./ 0 +FromArgb0 8 +(8 9 +$num9 < +,< = +$num> A +,A B +$numC F +)F G +;G H +public + +static  +readonly  +Color  + +Volatility! + +=, - +Color. 3 +.3 4 +FromArgb4 < +(< = +$num= @ +,@ A +$numB E +,E F +$numG J +)J K +;K L +public + +static  +readonly  +Color  + +Statistics! + +=, - +Color. 3 +.3 4 +FromArgb4 < +(< = +$num= @ +,@ A +$numB E +,E F +$numG J +)J K +;K L +public + +static  +readonly  +Color  + Oscillators! , +=- . +Color/ 4 +.4 5 +FromArgb5 = +(= > +$num> A +,A B +$numC F +,F G +$numH K +)K L +;L M +public + +static  +readonly  +Color  +Momentum! ) +=* + +Color, 1 +.1 2 +FromArgb2 : +(: ; +$num; > +,> ? +$num@ C +,C D +$numE H +)H I +;I J +public + +static  +readonly  +Color  + Experiments! , +=- . +Color/ 4 +.4 5 +FromArgb5 = +(= > +$num> A +,A B +$numC F +,F G +$numH I +)I J +;J K +[  +AttributeUsage  +(  +AttributeTargets $ +.$ % +Property% - +)- . +]. / +public + +class $ +DataSourceInputAttribute ) +:* +# +InputParameterAttribute, C +{  +public $ +DataSourceInputAttribute ' +(' ( +string( . +label/ 4 +=5 6 +$str7 D +,D E +intF I + sortIndexJ S +=T U +$numV X +)X Y +:  +base  +(  +label  +,  + sortIndex # +,# $ +variants% - +:- . +new/ 2 +object3 9 +[9 : +]: ; +{    +$str!!  +,!!  + +SourceType!! " +.!!" # +Open!!# ' +,!!' ( +$str""  +,""  + +SourceType"" " +.""" # +High""# ' +,""' ( +$str##  +,##  + +SourceType## ! +.##! " +Low##" % +,##% & +$str$$  +,$$  + +SourceType$$ # +.$$# $ +Close$$$ ) +,$$) * +$str%%  +,%%  + +SourceType%%! + +.%%+ , +HL2%%, / +,%%/ 0 +$str&& ! +,&&! " + +SourceType&&# - +.&&- . +OC2&&. 1 +,&&1 2 +$str''  +,''  + +SourceType'' * +.''* + +OHL3''+ / +,''/ 0 +$str(( ! +,((! " + +SourceType((# - +.((- . +HLC3((. 2 +,((2 3 +$str)) " +,))" # + +SourceType))$ . +.)). / +OHLC4))/ 4 +,))4 5 +$str** # +,**# $ + +SourceType**% / +.**/ 0 +HLCC4**0 5 +}++  +)++  +{,,  +},, +  +}--  +public// + +static//  +TValue//  + GetInputValue// & +(//& ' +this//' + + Indicator//, 5 + indicator//6 ? +,//? @ + +UpdateArgs//A K +args//L P +,//P Q + +SourceType//R \ +source//] c +)//c d +{00  +var11  +historicalData11  +=11  + indicator11 & +.11& ' +HistoricalData11' 5 +;115 6 +TBar22  +bar22  +=22  +new22  +TBar22  +(22  +time33  +:33  +historicalData33  +.33 ! +Time33! % +(33% & +)33& ' +,33' ( +open44  +:44  +historicalData44  +[44 ! + indicator44! * +.44* + +Count44+ 0 +-441 2 +$num443 4 +,444 5 +SeekOriginHistory446 G +.44G H +Begin44H M +]44M N +[44N O + PriceType44O X +.44X Y +Open44Y ] +]44] ^ +,44^ _ +high55  +:55  +historicalData55  +[55 ! + indicator55! * +.55* + +Count55+ 0 +-551 2 +$num553 4 +,554 5 +SeekOriginHistory556 G +.55G H +Begin55H M +]55M N +[55N O + PriceType55O X +.55X Y +High55Y ] +]55] ^ +,55^ _ +low66  +:66  +historicalData66  +[66  + indicator66 ) +.66) * +Count66* / +-660 1 +$num662 3 +,663 4 +SeekOriginHistory665 F +.66F G +Begin66G L +]66L M +[66M N + PriceType66N W +.66W X +Low66X [ +]66[ \ +,66\ ] +close77  +:77  +historicalData77 ! +[77! " + indicator77" + +.77+ , +Count77, 1 +-772 3 +$num774 5 +,775 6 +SeekOriginHistory777 H +.77H I +Begin77I N +]77N O +[77O P + PriceType77P Y +.77Y Z +Close77Z _ +]77_ ` +,77` a +volume88  +:88  +historicalData88 " +[88" # + indicator88# , +.88, - +Count88- 2 +-883 4 +$num885 6 +,886 7 +SeekOriginHistory888 I +.88I J +Begin88J O +]88O P +[88P Q + PriceType88Q Z +.88Z [ +Volume88[ a +]88a b +)99  +;99 + +double;;  +price;;  +=;;  +source;;  +switch;; $ +{<<  + +SourceType==  +.==  +Open==  +=>==  +bar== " +.==" # +Open==# ' +,==' ( + +SourceType>>  +.>>  +High>>  +=>>>  +bar>> " +.>>" # +High>># ' +,>>' ( + +SourceType??  +.??  +Low??  +=>??  +bar?? ! +.??! " +Low??" % +,??% & + +SourceType@@  +.@@  +Close@@  +=>@@  +bar@@ # +.@@# $ +Close@@$ ) +,@@) * + +SourceTypeAA  +.AA  +HL2AA  +=>AA  +barAA ! +.AA! " +HL2AA" % +,AA% & + +SourceTypeBB  +.BB  +OC2BB  +=>BB  +barBB ! +.BB! " +OC2BB" % +,BB% & + +SourceTypeCC  +.CC  +OHL3CC  +=>CC  +barCC " +.CC" # +OHL3CC# ' +,CC' ( + +SourceTypeDD  +.DD  +HLC3DD  +=>DD  +barDD " +.DD" # +HLC3DD# ' +,DD' ( + +SourceTypeEE  +.EE  +OHLC4EE  +=>EE  +barEE # +.EE# $ +OHLC4EE$ ) +,EE) * + +SourceTypeFF  +.FF  +HLCC4FF  +=>FF  +barFF # +.FF# $ +HLCC4FF$ ) +,FF) * +_GG  +=>GG  +barGG  +.GG  +CloseGG  +}HH  +;HH + +returnJJ  +newJJ  +TValueJJ  +(JJ  +barJJ  +.JJ  +TimeJJ " +,JJ" # +priceJJ$ ) +)JJ) * +;JJ* + +}KK  +publicMM + +staticMM  +TBarMM  + GetInputBarMM " +(MM" # +thisMM# ' + IndicatorMM( 1 + indicatorMM2 ; +,MM; < + +UpdateArgsMM= G +argsMMH L +)MML M +{NN  +varOO  +historicalDataOO  +=OO  + indicatorOO & +.OO& ' +HistoricalDataOO' 5 +;OO5 6 +returnPP  +newPP  +TBarPP  +(PP  +timeQQ  +:QQ  +historicalDataQQ  +.QQ ! +TimeQQ! % +(QQ% & +)QQ& ' +,QQ' ( +openRR  +:RR  +historicalDataRR  +[RR ! + indicatorRR! * +.RR* + +CountRR+ 0 +-RR1 2 +$numRR3 4 +,RR4 5 +SeekOriginHistoryRR6 G +.RRG H +BeginRRH M +]RRM N +[RRN O + PriceTypeRRO X +.RRX Y +OpenRRY ] +]RR] ^ +,RR^ _ +highSS  +:SS  +historicalDataSS  +[SS ! + indicatorSS! * +.SS* + +CountSS+ 0 +-SS1 2 +$numSS3 4 +,SS4 5 +SeekOriginHistorySS6 G +.SSG H +BeginSSH M +]SSM N +[SSN O + PriceTypeSSO X +.SSX Y +HighSSY ] +]SS] ^ +,SS^ _ +lowTT  +:TT  +historicalDataTT  +[TT  + indicatorTT ) +.TT) * +CountTT* / +-TT0 1 +$numTT2 3 +,TT3 4 +SeekOriginHistoryTT5 F +.TTF G +BeginTTG L +]TTL M +[TTM N + PriceTypeTTN W +.TTW X +LowTTX [ +]TT[ \ +,TT\ ] +closeUU  +:UU  +historicalDataUU ! +[UU! " + indicatorUU" + +.UU+ , +CountUU, 1 +-UU2 3 +$numUU4 5 +,UU5 6 +SeekOriginHistoryUU7 H +.UUH I +BeginUUI N +]UUN O +[UUO P + PriceTypeUUP Y +.UUY Z +CloseUUZ _ +]UU_ ` +,UU` a +volumeVV  +:VV  +historicalDataVV " +[VV" # + indicatorVV# , +.VV, - +CountVV- 2 +-VV3 4 +$numVV5 6 +,VV6 7 +SeekOriginHistoryVV8 I +.VVI J +BeginVVJ O +]VVO P +[VVP Q + PriceTypeVVQ Z +.VVZ [ +VolumeVV[ a +]VVa b +)WW  +;WW + +}XX  +public[[ + +static[[  +void[[  + +PaintHLine[[ ! +([[! " +this[[" & + Indicator[[' 0 + indicator[[1 : +,[[: ; +PaintChartEventArgs[[< O +args[[P T +,[[T U +double[[V \ +value[[] b +,[[b c +Pen[[d g +pen[[h k +)[[k l +{\\  +if]] + +(]]  + indicator]]  +.]]  + CurrentChart]] " +==]]# % +null]]& * +)]]* + +return^^  +;^^  +Graphics``  +gr``  +=``  +args``  +.``  +Graphics`` # +;``# $ +varaa  + +mainWindowaa  +=aa  + indicatoraa " +.aa" # + CurrentChartaa# / +.aa/ 0 +Windowsaa0 7 +[aa7 8 +argsaa8 < +.aa< = + WindowIndexaa= H +]aaH I +;aaI J +varbb  + converterbb  +=bb  + +mainWindowbb " +.bb" # +CoordinatesConverterbb# 7 +;bb7 8 +varcc  + +clientRectcc  +=cc  + +mainWindowcc # +.cc# $ +ClientRectanglecc$ 3 +;cc3 4 +gree + +.ee +  +SetClipee  +(ee  + +clientRectee  +)ee  +;ee  +intff  +leftXff  +=ff  + +clientRectff  +.ff  +Leftff # +;ff# $ +intgg  +rightXgg  +=gg  + +clientRectgg  +.gg  +Rightgg % +;gg% & +inthh  +Yhh  +=hh  +(hh  +inthh  +)hh  + converterhh  +.hh  + GetChartYhh ( +(hh( ) +valuehh) . +)hh. / +;hh/ 0 +usingjj  +(jj  +penjj  +)jj  +{kk  +grll  +.ll  +DrawLinell  +(ll  +penll  +,ll  +newll  +Pointll! & +(ll& ' +leftXll' , +,ll, - +Yll. / +)ll/ 0 +,ll0 1 +newll2 5 +Pointll6 ; +(ll; < +rightXll< B +,llB C +YllD E +)llE F +)llF G +;llG H +}mm  +}nn  +publicpp + +staticpp  +voidpp  +PaintSmoothCurvepp ' +(pp' ( +thispp( , + Indicatorpp- 6 + indicatorpp7 @ +,pp@ A +PaintChartEventArgsppB U +argsppV Z +,ppZ [ + +LineSeriespp\ f +seriesppg m +,ppm n +intppo r + warmupPeriodpps  +, pp  +bool +pp  +showColdValues +pp  += +pp  +true +pp  +, +pp  +double +pp  +tension +pp  += +pp  +$num +pp  +) +pp  +{qq  +ifrr + +(rr  +!rr  +seriesrr  +.rr  +Visiblerr  +||rr  + indicatorrr ( +.rr( ) + CurrentChartrr) 5 +==rr6 8 +nullrr9 = +)rr= > +returnss  +;ss  +Graphicsuu  +gruu  +=uu  +argsuu  +.uu  +Graphicsuu # +;uu# $ +grvv + +.vv +  + SmoothingModevv  +=vv  + SmoothingModevv ( +.vv( ) + AntiAliasvv) 2 +;vv2 3 +varww  + +mainWindowww  +=ww  + indicatorww " +.ww" # + CurrentChartww# / +.ww/ 0 +Windowsww0 7 +[ww7 8 +argsww8 < +.ww< = + WindowIndexww= H +]wwH I +;wwI J +varxx  + converterxx  +=xx  + +mainWindowxx " +.xx" # +CoordinatesConverterxx# 7 +;xx7 8 +varyy  + +clientRectyy  +=yy  + +mainWindowyy # +.yy# $ +ClientRectangleyy$ 3 +;yy3 4 +gr{{ + +.{{ +  +SetClip{{  +({{  + +clientRect{{  +){{  +;{{  +DateTime||  +leftTime||  +=||  +new||  +[||  +]|| ! +{||" # + converter||$ - +.||- . +GetTime||. 5 +(||5 6 + +clientRect||6 @ +.||@ A +Left||A E +)||E F +,||F G + indicator||H Q +.||Q R +HistoricalData||R ` +.||` a +Time||a e +(||e f + indicator||f o +!||o p +.||p q +Count||q v +-||w x +$num||y z +)||z { +}||| } +.||} ~ +Max ||~  +( +||  +) +||  +; +||  +DateTime}}  + rightTime}}  +=}}  +new}}  +[}} ! +]}}! " +{}}# $ + converter}}% . +.}}. / +GetTime}}/ 6 +(}}6 7 + +clientRect}}7 A +.}}A B +Right}}B G +)}}G H +,}}H I + indicator}}J S +.}}S T +HistoricalData}}T b +.}}b c +Time}}c g +(}}g h +$num}}h i +)}}i j +}}}k l +.}}l m +Min}}m p +(}}p q +)}}q r +;}}r s +int  + leftIndex  +=  +(  +int  +)  + indicator & +.& ' +HistoricalData' 5 +.5 6 +GetIndexByTime6 D +(D E +leftTimeE M +.M N +TicksN S +)S T ++U V +$numW X +;X Y +int +  + +rightIndex +  += +  +( +  +int +  +) +  + indicator + ' +. +' ( +HistoricalData +( 6 +. +6 7 +GetIndexByTime +7 E +( +E F + rightTime +F O +. +O P +Ticks +P U +) +U V +; +V W +List +  +< +  +Point +  +> +  + allPoints +  += +  +new + # +List +$ ( +< +( ) +Point +) . +> +. / +( +/ 0 +) +0 1 +; +1 2 +for +  +( +  +int +  +i +  += +  + +rightIndex +  +; +  +i +! " +< +# $ + leftIndex +% . +; +. / +i +0 1 +++ +1 3 +) +3 4 +{ +  +int +  +barX +  += +  +( +  +int +  +) +  + converter + % +. +% & + GetChartX +& / +( +/ 0 + indicator +0 9 +. +9 : +HistoricalData +: H +. +H I +Time +I M +( +M N +i +N O +) +O P +) +P Q +; +Q R +int +  +barY +  += +  +( +  +int +  +) +  + converter + % +. +% & + GetChartY +& / +( +/ 0 +series +0 6 +[ +6 7 +i +7 8 +] +8 9 +) +9 : +; +: ; +int +  + halfBarWidth +  += +  + indicator + ( +. +( ) + CurrentChart +) 5 +. +5 6 + BarsWidth +6 ? +/ +@ A +$num +B C +; +C D +Point +  +point +  += +  +new +  +Point + # +( +# $ +barX +$ ( ++ +) * + halfBarWidth ++ 7 +, +7 8 +barY +9 = +) += > +; +> ? + allPoints +  +. +  +Add +  +( +  +point +  +) +  +; + ! +} +  +if + + +( +  + allPoints +  +. +  +Count +  +> +  +$num +  +) +  +{ +  +if +  +( +  + allPoints +  +. +  +Count +  +< + ! +$num +" # +) +# $ +return +% + +; ++ , +using +  +( +  +Pen +  + +defaultPen + ! += +" # +new +$ ' +( +' ( +series +( . +. +. / +Color +/ 4 +, +4 5 +series +6 < +. +< = +Width += B +) +B C +{ +D E + DashStyle +F O += +P Q) +ConvertLineStyleToDashStyle +R m +( +m n +series +n t +. +t u +Style +u z +) +z { +} +| } +) +} ~ +using +  +( +  +Pen +  +coldPen +  += +  +new +! $ +( +$ % +series +% + +. ++ , +Color +, 1 +, +1 2 +series +3 9 +. +9 : +Width +: ? +) +? @ +{ +A B + DashStyle +C L += +M N + DashStyle +O X +. +X Y +Dot +Y \ +} +] ^ +) +^ _ +{ +  +int +  +hotCount +  += +  + indicator + ( +. +( ) +Count +) . +- +/ 0 + warmupPeriod +1 = +- +> ? + +rightIndex +@ J +; +J K +if +  +( +  +hotCount +  +> +  +$num +  +) + ! +{ +  +var +  + hotPoints + ! += +" # + allPoints +$ - +. +- . +Take +. 2 +( +2 3 +Math +3 7 +. +7 8 +Min +8 ; +( +; < +hotCount +< D ++ +E F +$num +G H +, +H I + allPoints +J S +. +S T +Count +T Y +) +Y Z +) +Z [ +. +[ \ +ToArray +\ c +( +c d +) +d e +; +e f +gr +  +. +  + DrawCurve +  +( + ! + +defaultPen +! + +, ++ , + hotPoints +- 6 +, +6 7 +$num +8 9 +, +9 : + hotPoints +; D +. +D E +Length +E K +- +L M +$num +N O +, +O P +( +Q R +float +R W +) +W X +tension +X _ +) +_ ` +; +` a +} +  +if +  +( +  +showColdValues + " +&& +# % +hotCount +& . +< +/ 0 + allPoints +1 : +. +: ; +Count +; @ +) +@ A +{ +  +var +  + +coldPoints + " += +# $ + allPoints +% . +. +. / +Skip +/ 3 +( +3 4 +Math +4 8 +. +8 9 +Max +9 < +( +< = +$num += > +, +> ? +hotCount +@ H +) +H I +) +I J +. +J K +ToArray +K R +( +R S +) +S T +; +T U +gr +  +. +  + DrawCurve +  +( + ! +coldPen +! ( +, +( ) + +coldPoints +* 4 +, +4 5 +$num +6 7 +, +7 8 + +coldPoints +9 C +. +C D +Length +D J +- +K L +$num +M N +, +N O +( +P Q +float +Q V +) +V W +tension +W ^ +) +^ _ +; +_ ` +} +  +} +  +} +  +} +  +public + + +static +  +void +  +PaintHistogram + % +( +% & +this +& * + Indicator ++ 4 + indicator +5 > +, +> ?! +PaintChartEventArgs +@ S +args +T X +, +X Y + +LineSeries +Z d +series +e k +, +k l +int +m p + warmupPeriod +q } +, +} ~ +bool   +showColdValues   +=   +true   +)   +{ +  +if + + +( +  +! +  +series +  +. +  +Visible +  +|| +  + indicator + ( +. +( ) + CurrentChart +) 5 +== +6 8 +null +9 = +) += > +return +  +; +  +Graphics +  +gr +  += +  +args +  +. +  +Graphics + # +; +# $ +gr + + +. + +  + SmoothingMode +  += +  + SmoothingMode + ( +. +( ) + AntiAlias +) 2 +; +2 3 +var +  + +mainWindow +  += +  + indicator + " +. +" # + CurrentChart +# / +. +/ 0 +Windows +0 7 +[ +7 8 +args +8 < +. +< = + WindowIndex += H +] +H I +; +I J +var +  + converter +  += +  + +mainWindow + " +. +" #" +CoordinatesConverter +# 7 +; +7 8 +var +  + +clientRect +  += +  + +mainWindow + # +. +# $ +ClientRectangle +$ 3 +; +3 4 +gr + + +. + +  +SetClip +  +( +  + +clientRect +  +) +  +; +  +DateTime +  +leftTime +  += +  +new +  +[ +  +] + ! +{ +" # + converter +$ - +. +- . +GetTime +. 5 +( +5 6 + +clientRect +6 @ +. +@ A +Left +A E +) +E F +, +F G + indicator +H Q +. +Q R +HistoricalData +R ` +. +` a +Time +a e +( +e f + indicator +f o +! +o p +. +p q +Count +q v +- +w x +$num +y z +) +z { +} +| } +. +} ~ +Max ~  +(   +)   +;   +DateTime +  + rightTime +  += +  +new +  +[ + ! +] +! " +{ +# $ + converter +% . +. +. / +GetTime +/ 6 +( +6 7 + +clientRect +7 A +. +A B +Right +B G +) +G H +, +H I + indicator +J S +. +S T +HistoricalData +T b +. +b c +Time +c g +( +g h +$num +h i +) +i j +} +k l +. +l m +Min +m p +( +p q +) +q r +; +r s +int +  + leftIndex +  += +  +( +  +int +  +) +  + indicator + & +. +& ' +HistoricalData +' 5 +. +5 6 +GetIndexByTime +6 D +( +D E +leftTime +E M +. +M N +Ticks +N S +) +S T ++ +U V +$num +W X +; +X Y +int +  + +rightIndex +  += +  +( +  +int +  +) +  + indicator + ' +. +' ( +HistoricalData +( 6 +. +6 7 +GetIndexByTime +7 E +( +E F + rightTime +F O +. +O P +Ticks +P U +) +U V +; +V W +for +  +( +  +int +  +i +  += +  + +rightIndex +  +; +  +i +! " +< +# $ + leftIndex +% . +; +. / +i +0 1 +++ +1 3 +) +3 4 +{ +  +int +  +barX +  += +  +( +  +int +  +) +  + converter + % +. +% & + GetChartX +& / +( +/ 0 + indicator +0 9 +. +9 : +HistoricalData +: H +. +H I +Time +I M +( +M N +i +N O +) +O P +) +P Q +; +Q R +int +  +barY +  += +  +( +  +int +  +) +  + converter + % +. +% & + GetChartY +& / +( +/ 0 +series +0 6 +[ +6 7 +i +7 8 +] +8 9 +) +9 : +; +: ; +int +  +barY0 +  += +  +( +  +int +  +) +  + converter + & +. +& ' + GetChartY +' 0 +( +0 1 +$num +1 2 +) +2 3 +; +3 4 +int +  + HistBarWidth +  += +  + indicator + ( +. +( ) + CurrentChart +) 5 +. +5 6 + BarsWidth +6 ? +- +@ A +$num +B C +; +C D +if +  +( +  +series +  +[ +  +i +  +] +  +> +  +$num +  +) +  +{ +  +using +  +( +  +Brush +  +hist + ! += +" # +new +$ ' + +SolidBrush +( 2 +( +2 3 +Color +3 8 +. +8 9 +FromArgb +9 A +( +A B +$num +B E +, +E F +$num +G H +, +H I +$num +J M +, +M N +$num +O P +) +P Q +) +Q R +) +R S +{ +  +gr +  +. +  + FillRectangle + $ +( +$ % +hist +% ) +, +) * +barX ++ / +, +/ 0 +barY +1 5 +, +5 6 + HistBarWidth +7 C +, +C D +Math +E I +. +I J +Abs +J M +( +M N +barY +N R +- +S T +barY0 +U Z +) +Z [ +) +[ \ +; +\ ] +} +  +} +  +else +  +{ +  +using +  +( +  +Brush +  +hist + ! += +" # +new +$ ' + +SolidBrush +( 2 +( +2 3 +Color +3 8 +. +8 9 +FromArgb +9 A +( +A B +$num +B E +, +E F +$num +G J +, +J K +$num +L M +, +M N +$num +O P +) +P Q +) +Q R +) +R S +{ +  +gr +  +. +  + FillRectangle + $ +( +$ % +hist +% ) +, +) * +barX ++ / +, +/ 0 +barY0 +1 6 +, +6 7 + HistBarWidth +8 D +, +D E +Math +F J +. +J K +Abs +K N +( +N O +barY0 +O T +- +U V +barY +W [ +) +[ \ +) +\ ] +; +] ^ +} +  +} +  +} +  +} +  +public + + +static +  +void +  +DrawText +  +( +  +this + $ + Indicator +% . + indicator +/ 8 +, +8 9! +PaintChartEventArgs +: M +args +N R +, +R S +string +T Z +text +[ _ +) +_ ` +{ +  +if + + +( +  + indicator +  +. +  + CurrentChart + " +== +# % +null +& * +) +* + +return +  +; +  +Graphics +  +gr +  += +  +args +  +. +  +Graphics + # +; +# $ +var +  + +clientRect +  += +  + indicator + " +. +" # + CurrentChart +# / +. +/ 0 + +MainWindow +0 : +. +: ; +ClientRectangle +; J +; +J K +Font +  +font +  += +  +new +  +Font +  +( +  +$str + $ +, +$ % +$num +& ' +) +' ( +; +( ) +SizeF +  +textSize +  += +  +gr +  +. +  + MeasureString + ) +( +) * +text +* . +, +. / +font +0 4 +) +4 5 +; +5 6 + +RectangleF +  +textRect +  += +  +new + ! + +RectangleF +" , +( +, - + +clientRect +- 7 +. +7 8 +Left +8 < ++ += > +$num +? @ +, +@ A + +clientRect ++ 5 +. +5 6 +Bottom +6 < +- += > +textSize +? G +. +G H +Height +H N +- +O P +$num +Q S +, +S T +textSize ++ 3 +. +3 4 +Width +4 9 ++ +: ; +$num +< > +, +> ? +textSize +@ H +. +H I +Height +I O ++ +P Q +$num +R T +) +T U +; +U V +gr + + +. + +  + FillRectangle +  +( +  +Brushes +  +. + ! +DarkBlue +! ) +, +) * +textRect ++ 3 +) +3 4 +; +4 5 +gr + + +. + +  + +DrawString +  +( +  +text +  +, +  +font +  +, + ! +Brushes +" ) +. +) * +White +* / +, +/ 0 +new +1 4 +PointF +5 ; +( +; < +textRect +< D +. +D E +X +E F ++ +G H +$num +I J +, +J K +textRect +L T +. +T U +Y +U V ++ +W X +$num +Y Z +) +Z [ +) +[ \ +; +\ ] +} +  +private +  +static +  + DashStyle + ) +ConvertLineStyleToDashStyle + 8 +( +8 9 + LineStyle +9 B + lineStyle +C L +) +L M +{ +  +return +  + lineStyle +  +switch +  +{ +  + LineStyle +  +. +  +Solid +  +=> +  + DashStyle + ( +. +( ) +Solid +) . +, +. / + LineStyle +  +. +  +Dash +  +=> +  + DashStyle + ' +. +' ( +Dash +( , +, +, - + LineStyle +  +. +  +Dot +  +=> +  + DashStyle + & +. +& ' +Dot +' * +, +* + + LineStyle +  +. +  +DashDot +  +=> +  + DashStyle +! * +. +* + +DashDot ++ 2 +, +2 3 +_ +  +=> +  + DashStyle +  +. +  +Solid +  +, + ! +} +  +; + + +} +  +}  \ No newline at end of file diff --git a/.sonarqube/out/0/output-cs/token-type.pb b/.sonarqube/out/0/output-cs/token-type.pb new file mode 100644 index 00000000..dc62b1f0 --- /dev/null +++ b/.sonarqube/out/0/output-cs/token-type.pb @@ -0,0 +1,1136 @@ +) +L/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/EmaVector.cs +  +  +  +  +  + B +  a + + + C +       +                                                      +    +     " ) * -    5    6    +         ##  ##  $$  $$  %%  %%  &&  &&  ''  ''  ((  ((  **  **  **  ,, ' ,,K L --  --- . 22  33 4 44  55 4 66 + 66  66  99  99  ::  ::  ;;  ;;  <<  <<  ==  ==  >>  >>  @@  @@  @@  BB  BB  BB. / CC  CC  CC 5  CCQ  II  II  II  KK  LL  OO  PP V QQ  RR  RR ! SS  SS  SS! ' UU + UU  XX  ZZ  ]]  ^^  __  `` + ``  bb  bb  bb  ff  gg  jj  kk * ll U mm M nn  oo / pp e qq : rr  rr ! ss + ss  ss ! ss) - ss6 : uu + ww  xx  zz  ||  }}  + S +  +  +  +  + $ +  +  + + +  +  +  + % +& , +  +  + & +  +  +! ' +( . +0 5 +  +  +  + " +# ) +* 0 +  +  +! ' +( . +  +  + % +& , +  + / + + + # + / + & +  + O + e + R +  + & + _ + V +  + & +  +% 8 +% = +  +  +  +  +  +$ ' +( . + . +  +  +  +  +  +  +  + " +) , +  + " +  +  + . +  + 1 + . + + +  + & +  +  +  + & +  +  +  +  + " +  +  +  + $ +  +  +  +  +  +! % +  +  +! ' +  +  +  +  +  +  + $ +  +  + " +  +  + # +$ * +, 1 +  +  +  +  +  + W +  +  + % +& , +  +  +  +  +  +  +# & +' - +. 4 +  +! $ +% + +, 2 +  + " +# ) +* 0 +  + S +  +$ * + T +  +$ * +  +) < +) A + / +  +  +! " + * + * +  +  +  +  + " + " +  +! & +- 0 + " + " + + +  +  +  + ! +" ) +  + * +C D +  + * +C D +  + " +  +  + F +  + 1 + 6 + . + + +  +  +& - +6 9 +  +  + % +  + +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.Quantower.cs +  +  +  +       % ' :     ) * , - / 3 5 6 8 9    +               & (        (    +        "   $ '   - 7    & 3 5  +   ! $ & ) / 3              +        +     ( * * . 6 7 C D  +        1    2 !!  !!  !! ! !!) * !!3 F !!X Y !!b k %%  %%  %%  ''  ''  ))  ,,  ,,  ,,  ,,% / ..  ..  //  //$ 0 //J V 00  22  22 " 221 [ 55 + 55  55  55& 9 77  88  88- . 88Y \ +J/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tseries/TSeries.cs +  +  +  +  +  + Y +  \ + + + < +   +              $   % +  #  d                "  +      ! ' -  K  X  +  +        +                   !! E ""  ## + ##  ##  %%  %%  %%  &&  &&  &&  ))  ** G ++  ,, + ,,  ,,  ,,  ,,$ ( ,,) / 22 + 22  44  44 % 55  88 + 88  88  88  ::  :: % ;;  ;;  >> + >>  @@  @@ % AA  AA  AA ! AA& ' AA. / AA4 ; DD + DD  FF  FF % GG  GG  GG" # GG' - JJ + JJ  LL  LL % MM  MM  MM" # MM' ( PP  QQ R RR  SS + SS  SS  UU  UU % VV  VV ! YY  ZZ = [[  \\ + \\  \\  ^^  ^^ % __  __ ! bb  bb ! cc + cc  cc  cc " cc* . ee + ee! " jj  ll  mm  mm% & tt ? uu  uu ! vv + vv  vv  vv " vv8 < xx  xx ! yy + yy  yy  yy % yy- 1 yy: > yyG J yyK Q {{  {{ ! || + ||  ||  ||# ) ||1 5 ||> B ||K N ||O U ~~ + ~~  ~~  ~~ & +  +  +  +  +  +  +  +) - +  +* A + ! + + +  +  +  +  +  +  +  +  + # +  +  +F/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.cs +  +  +  +       +          +              + + +  + +   + +   + +     +           $ '   2 3   9 <   F K +  + V + > +  +  + V + ] +  +                 &      (        *     !!  "" M ## + ##  ##  %% + %%  &&  &&  && ' &&( G ((  ((! " ++  ,, : --  .. E // + //  //  11 + 11  11" # 22  22  22 ' 22( G 77  88  99  :: + ::  ::  :: & ::' * <<  == E >>  ?? + ??  AA  BB V CC  DD  DD ! EE  EE  EE! ' GG + GG  JJ  LL  OO  PP $ QQ E RR  SS  SS ! TT  TT  TT  TT# ) TT1 7 TT? B TTC K XX  YY + [[  \\% * ]]" % __  dd  gg  hh ) ii  jj / kk e ll 0 mm  mm ! nn + nn  nn  nn' + nn4 8 pp + tt  yy S zz  {{# & ||  ||  }}  +  + + +  + 1 + % + + +  + ! +  +  +  +  +  +  +  +  +  +  +  +  + & +  + & +  +  + + +  +  +  +  + W +  +' * + 3 + ; +  +  +' ( +7 8 +  +  +  +  + B +  + 1 + / + % + + +  +  +$ + +4 7 +  +  +  +  +  +  +  + + +  +  +  +  +D/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbar/TBar.cs +  +  +  + 3 + 0 +      + + +   + +   + +   + +   + + (  + +) -    +            +          +      +      +      +      +   " % , 8  <  +    ! " 3 I L P S  +    ! " 3 I L P S  +    ! " 3 I L P S  +    ! " 3 I L P S  +    ! " 3 I L P S  F  +    # $ 5 K N a d  +    # $ 5 K N c f  +    $ % 6 L O i l    +        $   % 6   L O   j m !! + !!  !! % !!& 7 !!M P !!r v "" + ""  "" % ""& 7 ""M P ""s w $$  $$ ! %% + %%  %%  %% ! %%( . %%5 ; %%A G %%O U //  // ! 00 + 00  00  00 % 00, 2 009 ? 00E K 00S Y ::  :: ! ;; + ;;  ;;  ;; # ;;$ * ;;+ / ==  == ! >> + >>  >>  >> # >>$ * >>+ / >>8 ; @@  @@ ! AA + AA  AA  AA # AA$ , AA- 1 AA: = AAH T CC  CC ! DD + DD  DD  DD) + DD+ , DD8 K DDL P DDV X DDY ] DDc e DDf j DDo q DDr v DD}  +DD  +DD  +DD  +DD  FF  FF ! GG + GG  GG  OO + OO  OO  OO & OO4 6 OO7 ; PP + PP  PP  PP) 1 QQ + QQ  QQ  QQ  QQ# ' QQ. 2 RR + RR  RR  RR  RR# ' RR. 2 +H/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tvalue/TValue.cs +  +  +  + 8 + - +      + + +   + +   + +   + +   + + *  + ++ 1            +            +        8    +   " % , 8    !  +      # ""  "" ! ## + ##  ##  ##! ' ))  )) ! ** + **  **  ** # **$ * **+ 1 ,,  ,, ! -- + --  --  -- # --$ , --- 3 --; > --H T //  // ! 00 + 00  00  00) + 00+ , 008 K 00L N 00U W 00X Y 00Y Z 22  22 ! 33 + 33  33  55 + 55  55  55 & 554 6 557 = 66 + 66  66  66) 1 77 + 77  77  77  77# ) 770 6 88 + 88  88  88  88# ) 880 6" +P/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbarseries/TBarSeries.cs +  +  +  +  +  + _ +  b + + + R +   +              '   ( ,  #         ' *        " ) ,        " ) ,        " ) ,        " ) ,        " ) ,  +      ! ' ,  +        5  +      +      +      +      +         !! + !!  "" + ""  ## + ##  $$ + $$  %% + %%  '' + ''  )) P **  **  **, 2 ++  ++  ++, 2 ,,  ,,  ,,+ 0 --  --  --- 4 ..  ..  ... 6 11  22 E 33  44 + 44  44  66  66  66  77  77  77  88  88  88  99  99  99  ::  ::  ::  ;;  ;;  ;;  == P >>  >>  >>, 2 ??  ??  ??, 2 @@  @@  @@+ 0 AA  AA  AA- 4 BB  BB  BB. 6 EE + EE  GG  GG % HH  KK + KK  KK  KK  MM  MM % NN  NN  QQ + QQ  SS  SS % TT  TT  TT ! TT& ' TT. / TT6 7 TT> ? TTF G TTN O TTT [ WW + WW  WW & WW' 8 WWN Q WW` a WWh i WWm n XX + XX  XX ( XX) : XXP S XXb c XXj k XXo u YY + YY  YY ( YY) : YYP S YYb c YYj k YYo u ZZ + ZZ  ZZ ' ZZ( 9 ZZO R ZZa b ZZi j ZZn t [[ + [[  [[ ) [[* ; [[Q T [[c d [[k l [[p v \\ + \\  \\ * \\+ < \\R U \\d e \\l m \\q w ^^  ^^ ! __ + __  __  __ " __+ / aa + aa! " jj  ll  ll% & xx  xx ! yy + yy  yy  yy % yy, 2 yy9 ? yyE K yyS Y yyb f yyo s zz  zz  ||  || ! }} + }}  }}  }}# ) }}0 6 }}= C }}I O }}W ] }}f j }}s w ~~  ~~  + + +  +  + $ +) 4 +5 ; +@ K +L R +W b +c i +n y z      +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + + +  +  + ' +( N + + +  +  +  +  +  +  +  +  + ! +  + ; +N/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/simd/SimdExtensions.cs +  +  +  +  + M + Y +   + + +   + +   + +   + + "    6        !       1 = > D                      !       % 1 2 8             !!  !! ! ""  ""  ""  ""% 1 ""2 8 $$  $$  %%  %%  %%  ''  **  --  -- ! ..  ..  ..  ..% 1 ..2 8 00  00  11  11  11  33  66  99  99 ! ::  ::  ::  ::* 6 ::7 = ::E K <<  <<  ==  ==  ==  ??  BB  BB+ , EE  EE ! FF  FF  FF  FF! ' FF: F FFG M HH  HH ! II  II ! JJ  JJ  JJ  LL  MM  OO  RR  SS H TT 6 UU V VV 8 WW  XX  XX ! YY + YY  YY  YY) - YY. : YY; A [[ + [[  [[! & ]] + ]]  ]]; A ]]B H __  __ # __$ * ``  ``  aa  aa  aa % aa& , aa. 4 cc  ee  ee  ee! ' ee( . gg \ hh  hh % ii  ii% + ii, 0 jj  jj  ll U mm  mm # nn  nn % oo  oo% + oo, 0 pp  pp  ss 3 tt  vv  vv  ww  ww  zz  zz  }}  +  + ? + > + 5 +  +  + ! + + +  +  +! % +& 2 +3 9 + + +  +! $ + * + + +& , +- 3 + + +  +; A +B H +  +  +! ' +( . +  + # +$ * +  +  + ' +  +  +  +! ' +( . + ' +  +  +  +  +  + ) +  +  +  +  + I + > + 5 +  +  + ! + + +  +  +! % +& 2 +3 9 + + +  +! ' + + +  + $ +* + + * + + +& , +- 3 + + +  +; A +B H +  + # +$ * +  +  + # +$ * +7 8 +  + ' +  +  +  +! ' +( . +  + ) +  +# $ +  +  +  +  + ) +  +  +  +  +  + I + > + 5 +  +  + ! + + +  +  +! % +& 2 +3 9 + + +  +! ' + + +  + $ +* + + * + + +& , +- 3 + + +  +; A +B H +  + # +$ * +  +  + # +$ * +7 8 +  + ' +  +  +  +! ' +( . +  + ) +  +# $ +  +  +  +  + ) +  +  +  +  +  + C + > + 5 +  +  + ! + + +  +  +% ) +* 6 +7 = + + +  +! ' + N +  +  + Z + > + N +  +  + ! + + +  +  +& * ++ 7 +8 > +F L +U Y + + +  + # +$ * + * + + +& , +- 3 +  + ` + + +  +! ' +( . + + +  +; A +B H +  +  + $ +% + +  +  +# ) +* 0 +  + # +$ * +  +  + ' +  +  +  +! ' +( . +  + ' +  +  +  +  +  + ) +  +  +  ++ , +  +  + ? + N +  +  + ! + + +  +  +$ ( +) 5 +6 < +D J +S W + ` +  +  +  + I + C + < +  +  + ! + + +  +  + % +6 : +; G +H N + + +  +" ( +. 4 + + +  + $ ++ , +4 5 + * + + +& , +. 4 +: @ + + +  +; A +B H +  + # +$ * +  +  + # +$ * +7 8 +  +  + ' +  +  +  +! ' +( . +  +  + * +  + ! +  + ! +  +  +  +  +  + ) +  +  +  +  + - +B/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs +  +  +  +  +      +           +       '  +       , 1 ; > @ C E H K ^  +       * / 9 < > A C F I [  +       . 3 = @ B E G J M ]  +       . 3 = @ B E G J M ^  +       / 4 > A C F H K N b  +       , 1 ; > @ C E H K \  +       / 4 > A C F H I L _    $  +    ) , C    ' ( . 7 D F I V X   / 2 3 9 !!  !! " ""  "" " ##  ## ! $$  $$ # %%  %%! + && ! &&# - ''  '' * (( ! ((# - )) " ))$ . ** # **% / // + //  //  //' + //, 5 //A K //R \ 11  22  22  22  443 4 446 G 44O X 553 4 556 G 55O X 662 3 665 F 66N W 774 5 777 H 77P Y 885 6 888 I 88Q Z ;;  ;; $ ==  >>  ??  @@  AA  BB  CC  DD  EE  FF  GG  JJ  JJ  JJ  MM + MM  MM  MM# ' MM( 1 MM= G OO  PP  PP  PP  RR3 4 RR6 G RRO X SS3 4 SS6 G SSO X TT2 3 TT5 F TTN W UU4 5 UU7 H UUP Y VV5 6 VV8 I VVQ Z [[ + [[  [[  [[" & [[' 0 [[< O [[V \ [[d g ]] + ]]& * ^^  ``  aa  bb  cc  ff  gg  hh  hh  jj  ll  ll! & ll2 5 ll6 ; pp + pp  pp  pp( , pp- 6 ppB U pp\ f ppo r +pp  +pp  +pp  +pp  rr + rr9 = ss  uu  vv ( ww  xx  yy  ||  ||  ||y z }}  }}  }}h i     W X +  +  +  +  + # +$ ( +) . +  +  +  +  +  +  +  +B C +  +  + # + + +  +  +" # +% + +  +  +$ ' +  +  +! $ +O X +  + $ +  +  +  +3 7 +G H +8 9 +N O +R W + % +  +  +4 8 += > +6 7 +M N +Q V + + +  +  +& * ++ 4 +@ S +Z d +m p     + + +9 = +  +  + ( +  +  +  +  +  +y z +  +  +h i +  +  +W X +  +  +  +  +  +  +  +  +  +  +1 2 +  +B C +  +  +  +  +$ ' +( 2 +3 8 +B E +G H +J M +O P +E I +  +  +  +$ ' +( 2 +3 8 +B E +G J +L M +O P +F J + + +  +  + $ +% . +: M +T Z + + +& * +  +  +  +  +  +  + $ +& ' +  +  + ! +" , +? @ +Q S +< > +R T +  +" ) +1 4 +5 ; +I J +Y Z +  +  +  +9 B +  +  +  + ( +  + ' +  + & +  +! * +  +  \ No newline at end of file diff --git a/.sonarqube/out/1/Issues.json b/.sonarqube/out/1/Issues.json new file mode 100644 index 00000000..97d6f569 --- /dev/null +++ b/.sonarqube/out/1/Issues.json @@ -0,0 +1,605 @@ +{ + "$schema": "http://json.schemastore.org/sarif-1.0.0", + "version": "1.0.0", + "runs": [ + { + "tool": { + "name": "Microsoft (R) Visual C# Compiler", + "version": "5.0.0.0", + "fileVersion": "5.0.0-2.25523.111 (b0f34d51)", + "semanticVersion": "5.0.0", + "language": "en-US" + }, + "results": [ + { + "ruleId": "S101", + "level": "warning", + "message": "Rename class 'GBM' to match pascal case naming rules, consider using 'Gbm'.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs", + "region": { + "startLine": 11, + "startColumn": 14, + "endLine": 11, + "endColumn": 17 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 16, + "startColumn": 42, + "endLine": 16, + "endColumn": 45 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 16, + "startColumn": 42, + "endLine": 16, + "endColumn": 47 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 18, + "startColumn": 42, + "endLine": 18, + "endColumn": 45 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 18, + "startColumn": 42, + "endLine": 18, + "endColumn": 47 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 17, + "startColumn": 42, + "endLine": 17, + "endColumn": 45 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 17, + "startColumn": 42, + "endLine": 17, + "endColumn": 47 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "S1450", + "level": "warning", + "message": "Remove the field '_dt' and declare it as a local variable in the relevant methods.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs", + "region": { + "startLine": 20, + "startColumn": 29, + "endLine": 20, + "endColumn": 32 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 15, + "startColumn": 40, + "endLine": 15, + "endColumn": 43 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 15, + "startColumn": 40, + "endLine": 15, + "endColumn": 45 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 19, + "startColumn": 42, + "endLine": 19, + "endColumn": 45 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 19, + "startColumn": 42, + "endLine": 19, + "endColumn": 47 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 20, + "startColumn": 42, + "endLine": 20, + "endColumn": 45 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs", + "region": { + "startLine": 20, + "startColumn": 42, + "endLine": 20, + "endColumn": 47 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs", + "region": { + "startLine": 28, + "startColumn": 14, + "endLine": 28, + "endColumn": 17 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs", + "region": { + "startLine": 28, + "startColumn": 14, + "endLine": 28, + "endColumn": 30 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "IDE0028", + "level": "note", + "message": "Collection initialization can be simplified", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs", + "region": { + "startLine": 29, + "startColumn": 14, + "endLine": 29, + "endColumn": 17 + } + } + } + ], + "relatedLocations": [ + { + "physicalLocation": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs", + "region": { + "startLine": 29, + "startColumn": 14, + "endLine": 29, + "endColumn": 32 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "UseCollectionExpressionName": "UseCollectionExpressionName" + } + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs", + "region": { + "startLine": 51, + "startColumn": 69, + "endLine": 51, + "endColumn": 71 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 73, + "startColumn": 14, + "endLine": 73, + "endColumn": 16 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 74, + "startColumn": 14, + "endLine": 74, + "endColumn": 16 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 75, + "startColumn": 13, + "endLine": 75, + "endColumn": 15 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 76, + "startColumn": 15, + "endLine": 76, + "endColumn": 17 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S1244", + "level": "warning", + "message": "Do not check floating point equality with exact values, use a range instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs", + "region": { + "startLine": 77, + "startColumn": 16, + "endLine": 77, + "endColumn": 18 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S2245", + "level": "warning", + "message": "Make sure that using this pseudorandom number generator is safe here.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs", + "region": { + "startLine": 53, + "startColumn": 32, + "endLine": 53, + "endColumn": 54 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "S2245", + "level": "warning", + "message": "Make sure that using this pseudorandom number generator is safe here.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs", + "region": { + "startLine": 53, + "startColumn": 57, + "endLine": 53, + "endColumn": 69 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + } + ], + "rules": { + "IDE0028": { + "id": "IDE0028", + "shortDescription": "Simplify collection initialization", + "defaultLevel": "note", + "helpUri": "https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0028", + "properties": { + "category": "Style", + "isEnabledByDefault": true, + "tags": [ + "Telemetry", + "EnforceOnBuild_Recommended" + ] + } + }, + "S101": { + "id": "S101", + "shortDescription": "Types should be named in PascalCase", + "fullDescription": "Shared naming conventions allow teams to collaborate efficiently.", + "defaultLevel": "warning", + "helpUri": "https://rules.sonarsource.com/csharp/RSPEC-101", + "properties": { + "category": "Minor Code Smell", + "isEnabledByDefault": true, + "tags": [ + "C#", + "MainSourceScope", + "TestSourceScope", + "SonarWay" + ] + } + }, + "S1244": { + "id": "S1244", + "shortDescription": "Floating point numbers should not be tested for equality", + "fullDescription": "Floating point numbers in C# (and in most other programming languages) are not precise. They are a binary approximation of the actual value. This means that even if two floating point numbers appear to be equal, they might not be due to the tiny differences in their binary representation.", + "defaultLevel": "warning", + "helpUri": "https://rules.sonarsource.com/csharp/RSPEC-1244", + "properties": { + "category": "Major Bug", + "isEnabledByDefault": true, + "tags": [ + "C#", + "MainSourceScope", + "TestSourceScope", + "SonarWay" + ] + } + }, + "S1450": { + "id": "S1450", + "shortDescription": "Private fields only used as local variables in methods should become local variables", + "fullDescription": "When the value of a private field is always assigned to in a class' methods before being read, then it is not being used to store class information. Therefore, it should become a local variable in the relevant methods to prevent any misunderstanding.", + "defaultLevel": "warning", + "helpUri": "https://rules.sonarsource.com/csharp/RSPEC-1450", + "properties": { + "category": "Minor Code Smell", + "isEnabledByDefault": true, + "tags": [ + "C#", + "MainSourceScope", + "SonarWay" + ] + } + }, + "S2245": { + "id": "S2245", + "shortDescription": "Using pseudorandom number generators (PRNGs) is security-sensitive", + "fullDescription": "PRNGs are algorithms that produce sequences of numbers that only approximate true randomness. While they are suitable for applications like simulations or modeling, they are not appropriate for security-sensitive contexts because their outputs can be predictable if the internal state is known.", + "defaultLevel": "warning", + "helpUri": "https://rules.sonarsource.com/csharp/RSPEC-2245", + "properties": { + "category": "Critical Security Hotspot", + "isEnabledByDefault": true, + "tags": [ + "C#", + "MainSourceScope", + "SonarWay" + ] + } + } + } + } + ] +} \ No newline at end of file diff --git a/.sonarqube/out/1/ProjectInfo.xml b/.sonarqube/out/1/ProjectInfo.xml new file mode 100644 index 00000000..98a4c28a --- /dev/null +++ b/.sonarqube/out/1/ProjectInfo.xml @@ -0,0 +1,20 @@ + + + quantalib + C# + Product + f455234b-2a3c-140a-17c3-683d7820a733 + /Users/mihakralj/Github/QuanTAlib/lib/quantalib.csproj + false + + + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1/Issues.json + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1 + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1/Telemetry.json + + Debug + AnyCPU + net10.0 + \ No newline at end of file diff --git a/.sonarqube/out/1/Telemetry.json b/.sonarqube/out/1/Telemetry.json new file mode 100644 index 00000000..83e13cb1 --- /dev/null +++ b/.sonarqube/out/1/Telemetry.json @@ -0,0 +1 @@ +{"dotnetenterprise.s4net.build.target_framework_moniker":".NETCoreApp,Version=v10.0"} diff --git a/.sonarqube/out/1/output-cs/file-metadata.pb b/.sonarqube/out/1/output-cs/file-metadata.pb new file mode 100644 index 00000000..65a20706 --- /dev/null +++ b/.sonarqube/out/1/output-cs/file-metadata.pb @@ -0,0 +1,16 @@ +\ +Q/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.AssemblyInfo.csutf-8T +I/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/AssemblyInfo.g.csutf-8] +R/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/GitVersionInformation.g.csutf-8r +g/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.csutf-8^ +S/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.GlobalUsings.g.csutf-8= +4/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.csutf-8? +6/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.csutf-8C +:/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.csutf-8D +;/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.csutf-8F +=/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.csutf-8L +C/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.csutf-8@ +7/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.csutf-8J +A/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.csutf-8H +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.csutf-8B +9/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.csutf-8 \ No newline at end of file diff --git a/.sonarqube/out/1/output-cs/log.pb b/.sonarqube/out/1/output-cs/log.pb new file mode 100644 index 00000000..30cfe5c2 --- /dev/null +++ b/.sonarqube/out/1/output-cs/log.pb @@ -0,0 +1 @@ +Roslyn version: 5.0.0.0Language version: CSharp14!Concurrent execution: enabledxtFile '/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.AssemblyInfo.cs' was recognized as generatedplFile '/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/AssemblyInfo.g.cs' was recognized as generatedyuFile '/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/GitVersionInformation.g.cs' was recognized as generatedFile '/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs' was recognized as generatedzvFile '/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.GlobalUsings.g.cs' was recognized as generated \ No newline at end of file diff --git a/.sonarqube/out/1/output-cs/metrics.pb b/.sonarqube/out/1/output-cs/metrics.pb new file mode 100644 index 00000000..1af05207 --- /dev/null +++ b/.sonarqube/out/1/output-cs/metrics.pb @@ -0,0 +1,22 @@ +\ +4/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.csj +  !r "# +6/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.csT 8 j6 #$%&'()*<@HIJ_`abfj~r +  !+,-./01235679:=>ABDEFKLMNOPQRTUVWYZ\]cdehikmnoqrstvwyz{|}xa235679:=>BDENPQTUVWYZ\hmnostvwyz +:/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.csJ 8j8 + &'()*?NQcdefrur  "#$+,-./012456789:<=@BDEFHIJLMORSTUVXYZ[\]^`aghijklmnpqstvwxz{|}~x [ "#.0124678<=@BDHIJORSTUVX\`jlmpsvwz{| +;/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs 8 j  r! +  "#$%&')*,-/02356789x %&*-35678 +=/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs 8j +  !")*+PQRYZ[ltrt #$%&',-./02345689:;<>?@ABDEFGHJKLMNSTUVW\]^_`bcdefghijkmnopqruvxy{|~x $%&./5AGMV_eghmnoqvy| +C/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs/ 83j  +  )123=r !"#$%'(*+,-./456789:;>?@ABCEFGHIKLMNOQRSTUWXYZ[\^_`abcdefghijklmnopqrsuvxyz|}~xO*+,-.6789:;>?@ABHTWXYZ[\acdefghlmnopqruz~ +7/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs 8jr@ +  !"$%&'()*+,-/012345678:;=>@ACDFGHIJKLMOPQRSx'()*+,234567;>AHIJKLMOPQR +A/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs 8Rj RSTUVWglsr + !"#$%&'()*+-./012345679:;<=>?@ABCEFGHIJKLMNOPXYZ[]^_`acdehijmnopqtuvwxz{}~xo%'(*1346=@BJLMO[]_acehijmnoptvwz} +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.csy +8"jj + 2345OPQ]^_jklmnopqr  !"#$%&'(*+,-./06789:;<=>@ABCDEFGIJKLMRSTUVWXYZ[`abcdefghrstuvwxyz{|}~x,"#$%&'(*,-.89:;<=>@BCDEKLUWXZbdfguwx|} +9/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs2 8jI !"+,-.789<=>ABCOPQRghijklyr + #$%&()/01245:?DEFGHIJKLMSTUVXYZ[\]^_`abdemnopqrstuvwz{|}~x E%&(124?GIJLVY[\]adprvz{|} \ No newline at end of file diff --git a/.sonarqube/out/1/output-cs/symrefs.pb b/.sonarqube/out/1/output-cs/symrefs.pb new file mode 100644 index 00000000..8b4ef4af --- /dev/null +++ b/.sonarqube/out/1/output-cs/symrefs.pb @@ -0,0 +1,1474 @@ + +4/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.cs + +  + +  + +  + +  + +  + +""  + +""  + +""% . + +""9 A +6/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs + +   v +   55 TT UU oo# 'ss9 =tt8 < +# ' +  +  + b + 66 nn %qq $yy  + % +  + ( + 4 + 77 kk (zz  +  + 99  + 8 + "::  +$ * +- 3 + ( + BB DD. 1EE! $* + "DD nn1 7 +1 7* + EE nn: > +: > + *>> kk+ ;8 + vv  + ! +  + * + hh $ww  +  +   QQ YY ( +!! NN PP ZZ  +,, 22: D66  +-- 99 DD < +.. 334 9:: DD "DD% *EE  +// "== ( +00 55 55* . +== >> $BB  +AA BB' 5* +LL mm ! ! + ! +TT VV/ 1 +UU WW' ) +VV YY \\  +WW YY" '\\ # +dd  +  +dd #hh  +kk vv# .zz # +mm nnA B +nn rr  +oo vvH N( +qq ss# 'tt" &vv0 42 +rr ss) .tt( -vvA Fyy  +ss vv6 : +tt vv< ? +  +A B + +  + # + +  +R X< + +  +& ) +% ( +# & +- 0< + +  +0 8 +. 6 +H P + ! + +  +7 > + +  +@ F + +  + +  +  + +  + + % +  +I N +$ ) + ! + % + % + % + % + % + ! + +, 5 + $$ + +@ H +  + $ + +  +  + $ + +  +  + $ + +  +  + $ + +  +  + $ + +  +  + $ + +  +  + $ + +  +  +" # + +  +, :$ + +  +7 9 +( * + +  +3 8 + +  +; >$ + +  + # +" *< + +  + ' + & +  + !0 + +  +  +  + l + +  +  +# $ +  +  +  +  +  +  + +  +A B$ + +  +  + 0 + +  +  +  + 0 + +  +  +" ' +" ' + +  +2 6 + +  +2 6 + +  +  +:/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.cs + +   b + %"" jj ss! &zz  + ! +  +% * + > + ## ss zz -{{  + * + ww "zz  + * + pp $||  + F + "& .T \ !  C K  O W"" $ +++ )""  +++1 9..- 5F +-- 88 << @@ BB$ -DD %FF ( +.. 00 44 66 ! +00 11  +66 77/ 388" & +BB XX `` < +DD DD DD- .FF! "JJH I\\F G +FF HH \\O SZ +HH II JJk pOO4 9RR+ 0SS+ 0TT* /UU, 1VV- 2 +OO XX $ +RR XX& * +SS XX, 0 +TT XX2 5 +UU XX7 < +VV XX> D +hh  + ( +hh #ll pp vv  + +  + +  +  + + < + + % +  +I N +$ ) +@ E$ + +, 5 +! * + %T + +@ H + % + ( +8 @ +- 5 +7 ? +$ ,0 + +  +  +  + 0 + +  +  +  + "< + +  +  +) * +  + ` + +  +0 < +  + , +( 4 +  +( 4 + 0 + +  +4 = +  + 0 + +  +! " +G H + T + +  +% ( +  +  +  +  + " + +  + $ + +  + % +J S + +  +! % +;/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.csd + + +  + ++ 1**+ 1--- 333 557 =77# )770 688# )880 6P + & * %% --B F33( ,336 :66: >P +  && **< A00O T33> C33M R66@ E + 00- 7 +   +$ )  +## %%  +##( -&&  +**2 4**9 ; +--4 6--? A + +00 #( +33 55G M77F L88G M +33 #330 533G L + +55  +55( +550 3 +55> C55N S + +66 # +77* .77A E +777 <77M R +88* .88B F +887 <88N S +=/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs + +   z +" $ +%% +.. +;; AA" $MM MM __) +gg nn  +$ & +$ & +&& +// +55 ;; AA AA* ,GG GG VV) +ee hh mm oo  +  ++ - + +  +! $qq  +## %% $&& & +,, "..  +,,1 7//  + +22  + +88  + +>>  + +DD  + +JJ  + +SS & + +\\ #4 +cc vv- 0yyC F||G J + < +cc# (gg hh nn oo qq  +cc/ 4ee  +" ' +mm nn oo  + +vv  +vv# (vv1 6 + +yy  +yy yyR V +yy& +yyX ] +yy2 7yy` e + +||  +|| !||V Z +||* /||b g +||6 ;||j o + +~~  +~~( . + $ + +  +  +  + + , +/ << + +  +  +& ' +' ( +. / + + ) +C/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs + +    +" $** ++ ,, -- .. 66 +>> ?? @@ AA BB NN TT" $WWU WWWd fcc mm  + + +" $| +$ &** !77 +>> !NN TT* ,XXW YXXf hdd nn  + + +) +| +$ &++ !88 +?? !NN) +TT2 4YYW YYYf hee oo  + + +0 2| +$ &,, 99 +@@ NN4 6TT: <ZZV XZZe gff pp  + + +7 9 +$ &-- ":: +AA "HH NN? ATT TTB D[[X Z[[g iaa gg ll qq  + + +  +> @| +$ &..! #;; +BB! #NNJ LTTJ L\\Y [\\h jhh rr  + + +E G + +  + "uu ( + !! ** >> ( + "" ++ ?? ( + ## ,, @@ ( + $$ -- AA ( + %% .. BB  + +!!  + +""  + +##  + +$$  + +%% F +44 "66 $77 &88 &99 &:: &;; & + +EE  + +KK  + +QQ  + +WW  + +XX  + +YY  + +ZZ  + +[[  + +\\  +__ zz ~~  +__ cc dd ee ff gg hh mm nn oo pp qq rr uu  +__# (aa F +ll mm nn oo pp qq rr  + +yy  +yy zz  +yy& *zz  +yy3 7zz! % +yy@ Czz' * +yyL Qzz, 1 +yyZ `zz3 9 +yyg lzz< A + +}}  +}} !~~  +}}* .~~! % +}}7 ;~~' + +}}D G~~- 0 +}}P U~~2 7 +}}^ d~~9 ? +}}k p~~B G + + $ + +& ' +  +" #$ + += > +  +$ %$ + +T U +  +$ %$ + +k l +  +$ %& +   +  +$ %& +   +  +$ %$ + +  +  + 0 + +  +  +* . + 0 + +  +9 = +  + 0 + +  +  +* . + 0 + +  +9 = +  + $ + +  +  +  + + * +/ <l + +  +  +& ' +% & +, - +3 4 +: ; +A B +H I + + ) +7/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.csn + + +  + +) -;;+ />>+ /AA- 1GG OO7 ;QQ# 'QQ. 2RR# 'RR. 2 +   & *T XT XT XT XT X'' 22 >>@ DAAB FHH HH PP: >n +   Z ^S WT X!!U Y(( 33 DDQ UII II PP@ D + Z ^S W[ _  T X!!\ `""U Y)) 44 DD^ bJJ JJ PPF J + Z ]Z ]b e  [ ^!!c f""\ _** 55 DDk nKK KK PPL O + Z _Z _  a f!!i n""b g""j o++ 66 ;;< A>>J ODDw |LL LL PPQ VR + !Z `,, 77  +DD MM MM PPX ^ + DD- 7 + +  + +  + +  + +  + +  + +  + +  + +  + +    + +!!  + +""  +%% ''  +%%" &((  +%%/ 3))  +%%< ?**  +%%H M++  +%%V \,,  +00 22  +00& *33  +003 744  +00@ C55  +00L Q66  +00Z `77  +;;0 3;;8 ; +>>0 3>>< ?>>F I +AA2 5AA> A + +DD #( +GG OOE KQQB HRRC IF +GG !HH II JJ KK LL MM  + +OO  +OO( +OO0 3 +OO< AOOL Q + +PP # +QQ( ,QQ= A +QQ3 8QQI N +RR( ,RR> B +RR3 8RRJ O$ +A/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs + + + + " + 0}} & +F J ! %( +  ) *& ' + $ +  +: >   +   ( +  ) *  +"" $ + 2 +"": >$$ %% '' (( ( +$$ '' (( ** 2 +%% %% %%) *'' ((  +.. $ + 2 +..: >00 11 33 44 ( +00 33 44 66 2 +11 11 11) *33 44  +:: ) + ( +::? C== ?? BB ! +::L P??$ ( +<< @@ BB ( +== == ==) *??  +?? @@ @@! % +FF- 9 + P +FFO SHH II JJ LL LL1 5MM MM1 5( +HH LL #LL% .OO ( +II MM #MM% .OO $F +JJ JJ JJ) *LL LL6 7MM MM6 7 + +YY (P +YYC G[[ ]], 0cc ee0 4tt vv% )}}' +( +__ cc& 0cc7 Aee> HF +`` cc cc2 3ee; <tt tt$ %vv* + +aa nn: B( +ee hh- 3hh5 ;mm( . +hh ii  +mm nn2 8 +nn oo  + + l + +; ? +  +  +, 0 +  +0 4 +  +  + $ + +  +  + < + +  +& 0 +7 A +> H + *T + +  +  +2 3 +; < +  +$ % +  + +  + 0 + +  +  +  + 0 + +  +  +, - +  + +  + +; ? +  +  +% ) +  +, 0 +, 0 +  +0 4 +  +  + ! + T + +  +: D +  +& 0 +7 A +> H + *H + +  +  +$ * + " +  + #` + +  +  +2 3 +; < +  +$ % +  +" # + +  +, 2H + +  + & +  + $ +  + < + +  +  +, - +  +$ % + +  + +; ? +  +  +% ) +  +, 0 +, 0 +  +0 4 +  +  + ! + T + +  +: D +  +& 0 +7 A +> H + *H + +  +  +$ * + " +  + #` + +  +  +2 3 +; < +  +$ % +  +" # + +  +, 2H + +  + & +  + $ +  + < + +  +  +, - +  +$ % + + $0 + +? C +  +  + $ + + % + +@ D +  +  +  +, 0 +  +0 4 +  + " + ! + " + +N R + < + +  +  +- . +( ) +$ % + +  +$ +$ + +  +  + < + +  +& 0 +7 A +> H + *T + +  +  +2 3 +; < +  +$ % +# $ + +  + !$ + +  +  + $0 + +  +  +  + 0 + +  +  +, - + !$ + +  +  +! % + + # + +> B +  + +L P ++ / + ++ 5 + +P T +  +  +& * +/ 3 +  +, 0 +, 0 +  +0 4 +  +  +) - +  +) - + T + +  +: D +  +& 0 +7 A +> H + *T + +  +  +  +$ * +  +  ++ 1H + +  +  +$ * +  +  ++ 1x + +  +  +2 3 +; < +  +$ % +  +. / +  +. /$ + +  +, 2 +, 2H + +  + # +% ( + ! +# & + H + +  + # +% ( + ! +# & + T + +  +  +, - +  +2 3 +  +2 3" +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.cs + +   b + %## -- 99 DD  +2 9 + " +6 = + & + #$$ :: KK ww || % +0 5 + # +  +' , + ! + " +4 9 +" ' +  ++ 0 + % +! & + !%% ;; LL xx }} ! +. 1 +  +  +  +  +/ 2 +2 5 + # +  +  +  +3 62 + %&& << ww %|| 2 + #'' == xx !}}  + "" ## #$$ !%% && #'' !(( "** "88 99 #:: !;; << #== !>> "@@ "bb "ww' -xx# )||' -}}# ) +, 2 +  +  +' - +$ * +& , + " +0 6 + " +  + "( + "WW ZZ ff X + (( >> gg  +  +  +  + ( +   """ ,,? F-- 'F +** ** **$ %,,G H-- --( ).. F +66 $88 BB BB" (CC= CCCF LDD Z +@@ @@ @@$ %BB BB) *CCM NDD DD !EE ( +II .. EE dd  +II "KK LL " +SS  + " + ( +SS( -UU !WW #XX  + +`` ( +bb bb bb$ %dd  + +ss . +ss" ' +# ( +/ 4 +# ( +ss. 3uu $ + +  +. 1 +! $< + +  +6 > +! ) +0 8 +$ , + +  +  ++ , +; < +7 8 +3 4 +% & +! " +  +  +  +# $ +  +- . +" # +  +  +  +# $ +3 4 +  + +  +& .$ + +  +  +/ 5 + +  += G$ + +  + " +" *H + +  +  +1 7 +% + +  + < + +  +  +8 < +7 ; +  + + " + " + +  +* 3 + +  +; D< + +  + ! +. / +  +E F$ + +  +  +! &$ + +  +  +/ 5 + +  + "0 + +' - +  + ! + ` + +  +' * +) , +3 6 +3 6 +  += @ += @$ + +  +  + T + +  +  +( . +2 8 +* 0 +* 0 +2 8T + +  +  +( . +2 8 +* 0 +5 ; +2 8T + +  +  +$ % +  +  +/ 0 +/ 0 + +  + % + +  + #< + +  +: B +% - +4 < +( 0$ + +  + # +3 9 + +  +A Kl + +  +  +! " +& ' +$ % +A B +A B +5 6 +5 6< + +  +  + # +. 1 +% ($ + +  +F J +: > + +  +* 2 + +  +  +/ 0 +? @ +; < +7 8 +) * +% & +9 : +9 : +  +  +' ( +  +1 2 +& ' +  +  +  +' ( +7 8 +1 2 +1 2$ + +  + & +& .H + +  +  +5 ; +) / +  + < + +  +  +< @ +; ? +  + + & + & + + ! +. 7 + + ! +F OH + +  +$ % +2 3 += > += > +P Q$ + +  + ! +% *$ + +  +  +: @l + +  +  +$ % +  +1 2 +< = +9 : +9 : +  + +  +# ( + +  +* / + + % + +. 4 +# ) + +< C +& - + +  +  +9/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs^ +      &  (TTC K +  + < +   , /VV VV, /]] aa 2 +     5 6[[ \\ !]]. /2 + + +   > C?? %YY \\ * +   ' *) , +  + + 4 + "(( 44 {{ ! + %b + ?? rr vv {{' - +  +  +  + 6 + rr vv  +  + * + "II LL  + ( +## %% &&P V(( 2 +// 11 11 22P U44 6 +:: || }}  +  +  + +??  +EE zz " + &( +EE( -GG !II #JJ  +TT "{{  +  +TT* /VV # +TT8 =VV [[ #d +TTL QVV VV& +YY [[ \\ \\ ]] ]]( -aa ( +XX ]] aa dd  + +nn  +nn %zz# (||  +nn, 1pp ( +zz {{ {{ ||' * + +  + 0 + +" ( +  + ! + ` + +  + " +! $ +' * +' * +  +! $ +1 40 + +  +$ % +. / + 0 + +  +$ % +. / + $ + +  +  + $ + +  +  ++ 0 + +  +' 3 + +  + "0 + +  ++ 0 +  + T + +  +  +! " +4 5 +  +# $ + 0 + +  +  +  +  + + # + +, 2 +  + +8 > +  + +  +  + +  \ No newline at end of file diff --git a/.sonarqube/out/1/output-cs/telemetry.pb b/.sonarqube/out/1/output-cs/telemetry.pb new file mode 100644 index 00000000..ce2a1101 --- /dev/null +++ b/.sonarqube/out/1/output-cs/telemetry.pb @@ -0,0 +1 @@ +MR6/Users/mihakralj/Github/QuanTAlib/lib/quantalib.csprojnet10.0CSharp14 \ No newline at end of file diff --git a/.sonarqube/out/1/output-cs/test-method-declarations.pb b/.sonarqube/out/1/output-cs/test-method-declarations.pb new file mode 100644 index 00000000..e69de29b diff --git a/.sonarqube/out/1/output-cs/token-cpd.pb b/.sonarqube/out/1/output-cs/token-cpd.pb new file mode 100644 index 00000000..6ed68ecf --- /dev/null +++ b/.sonarqube/out/1/output-cs/token-cpd.pb @@ -0,0 +1,13142 @@ + +4/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.cs + namespace  + QuanTAlib +  +;  +public  + interface  +IFeed  +{   +TBar  +Next  +(  +ref  +bool  +isNew  +)  +;  +TBar  +Next  +(  +bool  +isNew  +=  +true  +)  +; ! + +TBarSeries""  +Fetch""  +(""  +int""  +count""  +,""  +long"" $ + startTime""% . +,"". / +TimeSpan""0 8 +interval""9 A +)""A B +;""B C +}##  +6/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs + namespace  + QuanTAlib +  +;  +[ + +  +SkipLocalsInit + +  +] + +  +public   +class    +GBM    +:    +IFeed    +{   +private    +readonly    +Random    +_rnd    +;   ! +private  +double  + +_lastPrice  +;  +private  +long  + _lastTime  +;  +private  +readonly  +double  +_mu  +;  +private  +readonly  +double  +_sigma " +;" # +private  +readonly  +double  +_dt  +;  +private  +readonly  +double  +_drift " +;" # +private  +readonly  +double  +_vol  +; ! +private  +readonly  +long  +_defaultTimeStep * +;* + +private  +TBar  + _currentBar  +;  +private  +bool  +_hasCurrentBar  +;  +private    +double    +_cachedZ    +;    +private!!  +bool!!  + _hasCachedZ!!  +;!!  +public++ + +GBM++  +(++  +double,,  + +startPrice,,  +=,,  +$num,, ! +,,,! " +double--  +mu--  +=--  +$num--  +,--  +double..  +sigma..  +=..  +$num..  +,..  +TimeSpan//  +?//  +defaultTimeframe// " +=//# $ +null//% ) +,//) * +int00  +?00  +seed00  +=00  +null00  +)00  +{11 ' +ArgumentOutOfRangeException22 # +.22# $! +ThrowIfNegativeOrZero22$ 9 +(229 : + +startPrice22: D +)22D E +;22E F' +ArgumentOutOfRangeException33 # +.33# $ +ThrowIfNegative33$ 3 +(333 4 +sigma334 9 +)339 : +;33: ; +_rnd55  +=55  +seed55  +.55  +HasValue55  +?55  +new55 " +Random55# ) +(55) * +seed55* . +.55. / +Value55/ 4 +)554 5 +:556 7 +new558 ; +Random55< B +(55B C +)55C D +;55D E + +_lastPrice66  +=66  + +startPrice66  +;66  + _lastTime77  +=77  +DateTime77  +.77  +UtcNow77 # +.77# $ +Ticks77$ ) +;77) * +_mu99  +=99  +mu99  +;99  +_sigma::  +=::  +sigma::  +;::  +var==  + timeframe==  +===  +defaultTimeframe== ( +??==) + +TimeSpan==, 4 +.==4 5 + FromMinutes==5 @ +(==@ A +$num==A B +)==B C +;==C D +_defaultTimeStep>>  +=>>  + timeframe>> $ +.>>$ % +Ticks>>% * +;>>* + +doubleAA  +minutesPerYearAA  +=AA  +$numAA % +*AA& ' +$numAA( + +*AA, - +$numAA. 2 +;AA2 3 +_dtBB  +=BB  + timeframeBB  +.BB  + TotalMinutesBB $ +/BB% & +minutesPerYearBB' 5 +;BB5 6 +_driftDD  +=DD  +(DD  +muDD  +-DD  +$numDD  +*DD  +sigmaDD " +*DD# $ +sigmaDD% * +)DD* + +*DD, - +_dtDD. 1 +;DD1 2 +_volEE  +=EE  +sigmaEE  +*EE  +MathEE  +.EE  +SqrtEE  +(EE ! +_dtEE! $ +)EE$ % +;EE% & +}FF  +[KK  + +MethodImplKK  +(KK  +MethodImplOptionsKK ! +.KK! " +AggressiveInliningKK" 4 +)KK4 5 +]KK5 6 +privateLL  +doubleLL  + +NextNormalLL  +(LL  +)LL  +{MM  +ifNN + +(NN  + _hasCachedZNN  +)NN  +{OO  + _hasCachedZPP  +=PP  +falsePP  +;PP  +returnQQ  +_cachedZQQ  +;QQ  +}RR  +doubleTT  +u1TT  +=TT  +$numTT  +-TT  +_rndTT  +.TT  + +NextDoubleTT ) +(TT) * +)TT* + +;TT+ , +doubleUU  +u2UU  +=UU  +$numUU  +-UU  +_rndUU  +.UU  + +NextDoubleUU ) +(UU) * +)UU* + +;UU+ , +doubleVV  +magVV  +=VV  +MathVV  +.VV  +SqrtVV  +(VV  +-VV  +$numVV # +*VV$ % +MathVV& * +.VV* + +LogVV+ . +(VV. / +u1VV/ 1 +)VV1 2 +)VV2 3 +;VV3 4 +doubleWW  +angleWW  +=WW  +$numWW  +*WW  +MathWW ! +.WW! " +PIWW" $ +*WW% & +u2WW' ) +;WW) * +_cachedZYY  +=YY  +magYY  +*YY  +MathYY  +.YY  +SinYY ! +(YY! " +angleYY" ' +)YY' ( +;YY( ) + _hasCachedZZZ  +=ZZ  +trueZZ  +;ZZ  +return\\  +mag\\  +*\\  +Math\\  +.\\  +Cos\\  +(\\  +angle\\ # +)\\# $ +;\\$ % +}]]  +[cc  + +MethodImplcc  +(cc  +MethodImplOptionscc ! +.cc! " +AggressiveInliningcc" 4 +)cc4 5 +]cc5 6 +publicdd + +TBardd  +Nextdd  +(dd  +refdd  +booldd  +isNewdd # +)dd# $ +{ee  +ifhh + +(hh  +isNewhh  +||hh  +!hh  +_hasCurrentBarhh $ +)hh$ % +{ii  +longkk  + currentTimekk  +=kk  + _lastTimekk ( ++kk) * +_defaultTimeStepkk+ ; +;kk; < +doublemm  +zmm  +=mm  + +NextNormalmm ! +(mm! " +)mm" # +;mm# $ +doublenn  +pricenn  +=nn  + +_lastPricenn % +*nn& ' +Mathnn( , +.nn, - +Expnn- 0 +(nn0 1 +_driftnn1 7 ++nn8 9 +_volnn: > +*nn? @ +znnA B +)nnB C +;nnC D +doubleoo  +volumeoo  +=oo  +$numoo  ++oo! " +_rndoo# ' +.oo' ( + +NextDoubleoo( 2 +(oo2 3 +)oo3 4 +*oo5 6 +$numoo7 ; +;oo; < +doubleqq  +openqq  +=qq  + +_lastPriceqq $ +;qq$ % +doublerr  +closerr  +=rr  +pricerr  +;rr ! +doubless  +highss  +=ss  +Mathss  +.ss  +Maxss " +(ss" # +openss# ' +,ss' ( +closess) . +)ss. / +*ss0 1 +(ss2 3 +$numss3 6 ++ss7 8 +_rndss9 = +.ss= > + +NextDoubless> H +(ssH I +)ssI J +*ssK L +$numssM Q +)ssQ R +;ssR S +doublett  +lowtt  +=tt  +Mathtt  +.tt  +Mintt ! +(tt! " +opentt" & +,tt& ' +closett( - +)tt- . +*tt/ 0 +(tt1 2 +$numtt2 5 +-tt6 7 +_rndtt8 < +.tt< = + +NextDoublett= G +(ttG H +)ttH I +*ttJ K +$numttL P +)ttP Q +;ttQ R + _currentBarvv  +=vv  +newvv  +TBarvv " +(vv" # + currentTimevv# . +,vv. / +openvv0 4 +,vv4 5 +highvv6 : +,vv: ; +lowvv< ? +,vv? @ +closevvA F +,vvF G +volumevvH N +)vvN O +;vvO P +_hasCurrentBarww  +=ww  +trueww ! +;ww! " + +_lastPriceyy  +=yy  +closeyy  +;yy  + _lastTimezz  +=zz  + currentTimezz # +;zz# $ +}{{  +else||  +{}}  +double  +z  +=  + +NextNormal ! +(! " +)" # +;# $ +double +  +price +  += +  + +_lastPrice + % +* +& ' +Math +( , +. +, - +Exp +- 0 +( +0 1 +_drift +1 7 ++ +8 9 +_vol +: > +* +? @ +z +A B +) +B C +; +C D +double +  +volume +  += +  +$num +  ++ +! " +_rnd +# ' +. +' ( + +NextDouble +( 2 +( +2 3 +) +3 4 +* +5 6 +$num +7 ; +; +; < +var +  +bar +  += +  + _currentBar + ! +; +! " +double +  +newClose +  += +  +price + # +; +# $ +double +  +newHigh +  += +  +Math + ! +. +! " +Max +" % +( +% & +bar +& ) +. +) * +High +* . +, +. / +newClose +0 8 +) +8 9 +; +9 : +double +  +newLow +  += +  +Math +  +. + ! +Min +! $ +( +$ % +bar +% ( +. +( ) +Low +) , +, +, - +newClose +. 6 +) +6 7 +; +7 8 + _currentBar +  += +  +new +  +TBar + " +( +" # +bar +# & +. +& ' +Time +' + +, ++ , +bar +- 0 +. +0 1 +Open +1 5 +, +5 6 +newHigh +7 > +, +> ? +newLow +@ F +, +F G +newClose +H P +, +P Q +volume +R X +) +X Y +; +Y Z + +_lastPrice +  += +  +newClose + ! +; +! " +} +  +return +  + _currentBar +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +TBar +  +Next +  +( +  +bool +  +isNew +  += + ! +true +" & +) +& ' +{ +  +return +  +Next +  +( +  +ref +  +isNew +  +) +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + + +TBarSeries +  +Fetch +  +( +  +int +  +count + % +, +% & +long +' + + startTime +, 5 +, +5 6 +TimeSpan +7 ? +interval +@ H +) +H I +{ +  +if + + +( +  +count +  +<= +  +$num +  +) +  +throw +  +new +  +ArgumentException + ' +( +' ( +$str +( @ +, +@ A +nameof +B H +( +H I +count +I N +) +N O +) +O P +; +P Q +var +  +series +  += +  +new +  + +TBarSeries + # +( +# $ +count +$ ) +) +) * +; +* + +long +  +[ +  +] +  +t +  += +  +new +  +long +  +[ +  +count + ! +] +! " +; +" # +double +  +[ +  +] +  +o +  += +  +new +  +double +  +[ +  +count + % +] +% & +; +& ' +double +  +[ +  +] +  +h +  += +  +new +  +double +  +[ +  +count + % +] +% & +; +& ' +double +  +[ +  +] +  +l +  += +  +new +  +double +  +[ +  +count + % +] +% & +; +& ' +double +  +[ +  +] +  +c +  += +  +new +  +double +  +[ +  +count + % +] +% & +; +& ' +double +  +[ +  +] +  +v +  += +  +new +  +double +  +[ +  +count + % +] +% & +; +& ' +double +  +minutesPerYear +  += +  +$num + % +* +& ' +$num +( + +* +, - +$num +. 2 +; +2 3 +double +  +dt +  += +  +interval +  +. +  + TotalMinutes + ) +/ +* + +minutesPerYear +, : +; +: ; +double +  +drift +  += +  +( +  +_mu +  +- +  +$num + ! +* +" # +_sigma +$ * +* ++ , +_sigma +- 3 +) +3 4 +* +5 6 +dt +7 9 +; +9 : +double +  +vol +  += +  +_sigma +  +* +  +Math + " +. +" # +Sqrt +# ' +( +' ( +dt +( * +) +* + +; ++ , +long +  +timeStep +  += +  +interval +  +. + ! +Ticks +! & +; +& ' +double +  + currentPrice +  += +  + +_lastPrice + ( +; +( ) +long +  + currentTime +  += +  + startTime + $ +; +$ % +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +count + ! +; +! " +i +# $ +++ +$ & +) +& ' +{ +  +double +  +z +  += +  + +NextNormal + ! +( +! " +) +" # +; +# $ +double +  +price +  += +  + currentPrice + ' +* +( ) +Math +* . +. +. / +Exp +/ 2 +( +2 3 +drift +3 8 ++ +9 : +vol +; > +* +? @ +z +A B +) +B C +; +C D +double +  +open +  += +  + currentPrice + & +; +& ' +double +  +close +  += +  +price +  +; + ! +double +  +rnd1 +  += +  +_rnd +  +. +  + +NextDouble + ) +( +) * +) +* + +; ++ , +double +  +rnd2 +  += +  +_rnd +  +. +  + +NextDouble + ) +( +) * +) +* + +; ++ , +double +  +rnd3 +  += +  +_rnd +  +. +  + +NextDouble + ) +( +) * +) +* + +; ++ , +t +  +[ +  +i +  +] +  += +  + currentTime +  +; +  +o +  +[ +  +i +  +] +  += +  +open +  +; +  +c +  +[ +  +i +  +] +  += +  +close +  +; +  +h +  +[ +  +i +  +] +  += +  +Math +  +. +  +Max +  +( +  +open +  +, + ! +close +" ' +) +' ( +* +) * +( ++ , +$num +, / ++ +0 1 +rnd1 +2 6 +* +7 8 +$num +9 = +) += > +; +> ? +l +  +[ +  +i +  +] +  += +  +Math +  +. +  +Min +  +( +  +open +  +, + ! +close +" ' +) +' ( +* +) * +( ++ , +$num +, / +- +0 1 +rnd2 +2 6 +* +7 8 +$num +9 = +) += > +; +> ? +v +  +[ +  +i +  +] +  += +  +$num +  ++ +  +rnd3 +  +* +  +$num +! % +; +% & + currentPrice +  += +  +price +  +; + ! + currentTime +  ++= +  +timeStep + # +; +# $ +} +  + +_lastPrice +  += +  + currentPrice + ! +; +! " + _lastTime +  += +  + currentTime +  +- + ! +timeStep +" * +; +* + +series +  +. +  +Add +  +( +  +t +  +, +  +o +  +, +  +h +  +, +  +l +  +, +  +c +  +, + ! +v +" # +) +# $ +; +$ % +_hasCurrentBar +  += +  +false +  +; +  +return +  +series +  +; +  +} +  +} y +:/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.cs + namespace  + QuanTAlib +  +;  +public   +class    +CsvFeed    +:    +IFeed    +{   +private  +readonly  + +TBarSeries  +_data % +;% & +private  +int  + _currentIndex  +;  +private  +TBar  + _currentBar  +;  +private  +bool  +_hasCurrentBar  +;  +public + +CsvFeed  +(  +string  +filePath " +)" # +{  +if + +(  +string  +.  +IsNullOrWhiteSpace % +(% & +filePath& . +). / +)/ 0 +throw  +new  +ArgumentException ' +(' ( +$str( K +,K L +nameofM S +(S T +filePathT \ +)\ ] +)] ^ +;^ _ +if + +(  +!  +File  +.  +Exists  +(  +filePath ! +)! " +)" # +throw    +new   ! +FileNotFoundException   + +(  + , +$"  , . +$str  . B +{  B C +filePath  C K +}  K L +"  L M +,  M N +filePath  O W +)  W X +;  X Y +_data""  +=""  + LoadFromCsv""  +(""  +filePath"" $ +)""$ % +;""% & + _currentIndex##  +=##  +$num##  +;##  +}$$  +private++  +static++  + +TBarSeries++  + LoadFromCsv++ ) +(++) * +string++* 0 +filePath++1 9 +)++9 : +{,,  +var--  + dataLines--  +=--  +new--  +List--  +<-- ! +string--! ' +>--' ( +(--( ) +)--) * +;--* + +using..  +(..  +var..  +reader..  +=..  +new..  + StreamReader.. , +(.., - +filePath..- 5 +)..5 6 +)..6 7 +{//  +var00  +header00  +=00  +reader00  +.00  +ReadLine00 ( +(00( ) +)00) * +;00* + +if11  +(11  +header11  +is11  +null11  +)11  +throw22  +new22  +InvalidDataException22 . +(22. / +$str22/ B +)22B C +;22C D +while44  +(44  +!44  +reader44  +.44  + EndOfStream44 & +)44& ' +{55  +var66  +line66  +=66  +reader66 ! +.66! " +ReadLine66" * +(66* + +)66+ , +;66, - +if77  +(77  +!77  +string77  +.77  +IsNullOrWhiteSpace77 . +(77. / +line77/ 3 +)773 4 +)774 5 + dataLines88  +.88  +Add88 ! +(88! " +line88" & +)88& ' +;88' ( +}99  +}::  +if<< + +(<<  + dataLines<<  +.<<  +Count<<  +==<<  +$num<<  +)<< ! +throw==  +new==  +InvalidDataException== * +(==* + +$str==+ S +)==S T +;==T U + dataLines@@  +.@@  +Reverse@@  +(@@  +)@@  +;@@  +varBB  +seriesBB  +=BB  +newBB  + +TBarSeriesBB # +(BB# $ + dataLinesBB$ - +.BB- . +CountBB. 3 +)BB3 4 +;BB4 5 +forDD  +(DD  +intDD  +iDD  +=DD  +$numDD  +;DD  +iDD  +<DD  + dataLinesDD % +.DD% & +CountDD& + +;DD+ , +iDD- . +++DD. 0 +)DD0 1 +{EE  +varFF  +lineFF  +=FF  + dataLinesFF  +[FF ! +iFF! " +]FF" # +;FF# $ +varHH  +partsHH  +=HH  +lineHH  +.HH  +SplitHH " +(HH" # +$charHH# & +)HH& ' +;HH' ( +ifII  +(II  +partsII  +.II  +LengthII  +!=II  +$numII ! +)II! " +throwJJ  +newJJ  +FormatExceptionJJ ) +(JJ) * +$"JJ* , +$strJJ, G +{JJG H +iJJH I ++JJJ K +$numJJL M +}JJM N +$strJJN j +{JJj k +partsJJk p +.JJp q +LengthJJq w +}JJw x +"JJx y +)JJy z +;JJz { +tryLL  +{MM  +varOO  + timestampOO  +=OO  +DateTimeOO ( +.OO( ) + +ParseExactOO) 3 +(OO3 4 +partsOO4 9 +[OO9 : +$numOO: ; +]OO; < +.OO< = +TrimOO= A +(OOA B +)OOB C +,OOC D +$strOOE Q +,OOQ R + CultureInfoOOS ^ +.OO^ _ +InvariantCultureOO_ o +,OOo p +DateTimeStylesOOq  +. OO  +AssumeUniversal +OO  +| +OO  +DateTimeStyles +OO  +. +OO  +AdjustToUniversal +OO  +) +OO  +; +OO  +doubleRR  +openRR  +=RR  +doubleRR $ +.RR$ % +ParseRR% * +(RR* + +partsRR+ 0 +[RR0 1 +$numRR1 2 +]RR2 3 +.RR3 4 +TrimRR4 8 +(RR8 9 +)RR9 : +,RR: ; + CultureInfoRR< G +.RRG H +InvariantCultureRRH X +)RRX Y +;RRY Z +doubleSS  +highSS  +=SS  +doubleSS $ +.SS$ % +ParseSS% * +(SS* + +partsSS+ 0 +[SS0 1 +$numSS1 2 +]SS2 3 +.SS3 4 +TrimSS4 8 +(SS8 9 +)SS9 : +,SS: ; + CultureInfoSS< G +.SSG H +InvariantCultureSSH X +)SSX Y +;SSY Z +doubleTT  +lowTT  +=TT  +doubleTT # +.TT# $ +ParseTT$ ) +(TT) * +partsTT* / +[TT/ 0 +$numTT0 1 +]TT1 2 +.TT2 3 +TrimTT3 7 +(TT7 8 +)TT8 9 +,TT9 : + CultureInfoTT; F +.TTF G +InvariantCultureTTG W +)TTW X +;TTX Y +doubleUU  +closeUU  +=UU  +doubleUU % +.UU% & +ParseUU& + +(UU+ , +partsUU, 1 +[UU1 2 +$numUU2 3 +]UU3 4 +.UU4 5 +TrimUU5 9 +(UU9 : +)UU: ; +,UU; < + CultureInfoUU= H +.UUH I +InvariantCultureUUI Y +)UUY Z +;UUZ [ +doubleVV  +volumeVV  +=VV  +doubleVV & +.VV& ' +ParseVV' , +(VV, - +partsVV- 2 +[VV2 3 +$numVV3 4 +]VV4 5 +.VV5 6 +TrimVV6 : +(VV: ; +)VV; < +,VV< = + CultureInfoVV> I +.VVI J +InvariantCultureVVJ Z +)VVZ [ +;VV[ \ +seriesXX  +.XX  +AddXX  +(XX  + timestampXX $ +,XX$ % +openXX& * +,XX* + +highXX, 0 +,XX0 1 +lowXX2 5 +,XX5 6 +closeXX7 < +,XX< = +volumeXX> D +,XXD E +isNewXXF K +:XXK L +trueXXM Q +)XXQ R +;XXR S +}YY  +catchZZ  +(ZZ  + ExceptionZZ  +exZZ  +)ZZ  +whenZZ! % +(ZZ& ' +exZZ' ) +isZZ* , +FormatExceptionZZ- < +orZZ= ? +OverflowExceptionZZ@ Q +)ZZQ R +{[[  +throw\\  +new\\  +FormatException\\ ) +(\\) * +$"\\* , +$str\\, E +{\\E F +i\\F G ++\\H I +$num\\J K +}\\K L +$str\\L N +{\\N O +line\\O S +}\\S T +"\\T U +,\\U V +ex\\W Y +)\\Y Z +;\\Z [ +}]]  +}^^  +return``  +series``  +;``  +}aa  +[gg  + +MethodImplgg  +(gg  +MethodImplOptionsgg ! +.gg! " +AggressiveInlininggg" 4 +)gg4 5 +]gg5 6 +publichh + +TBarhh  +Nexthh  +(hh  +refhh  +boolhh  +isNewhh # +)hh# $ +{ii  +ifjj + +(jj  +_datajj  +.jj  +Countjj  +==jj  +$numjj  +)jj  +{kk  +isNewll  +=ll  +falsell  +;ll  +returnmm  +defaultmm  +;mm  +}nn  +ifpp + +(pp  +isNewpp  +||pp  +!pp  +_hasCurrentBarpp $ +)pp$ % +{qq  +ifss  +(ss  + _currentIndexss  +>=ss  +_datass! & +.ss& ' +Countss' , +)ss, - +{tt  +isNewvv  +=vv  +falsevv  +;vv  +returnww  + _currentBarww " +;ww" # +}xx  + _currentBarzz  +=zz  +_datazz  +[zz  + _currentIndexzz - +]zz- . +;zz. / + _currentIndex{{  +++{{  +;{{  +_hasCurrentBar||  +=||  +true|| ! +;||! " +}}}  +else~~  +{  +} +  +return +  + _currentBar +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +TBar +  +Next +  +( +  +bool +  +isNew +  += + ! +true +" & +) +& ' +{ +  +return +  +Next +  +( +  +ref +  +isNew +  +) +  +; +  +} +  +public + + + +TBarSeries +  +Fetch +  +( +  +int +  +count + % +, +% & +long +' + + startTime +, 5 +, +5 6 +TimeSpan +7 ? +interval +@ H +) +H I +{ +  +if + + +( +  +count +  +<= +  +$num +  +) +  +throw +  +new +  +ArgumentException + ' +( +' ( +$str +( @ +, +@ A +nameof +B H +( +H I +count +I N +) +N O +) +O P +; +P Q +var +  +result +  += +  +new +  + +TBarSeries + # +( +# $ +count +$ ) +) +) * +; +* + +int +  + +startIndex +  += +  +$num +  +; +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_data + ! +. +! " +Count +" ' +; +' ( +i +) * +++ +* , +) +, - +{ +  +if +  +( +  +_data +  +[ +  +i +  +] +  +. +  +Time +  +>= +  + startTime +! * +) +* + +{ +  + +startIndex +  += +  +i +  +; +  +break +  +; +  +} +  +} +  +long +  + expectedTime +  += +  + startTime + % +; +% & +int +  + collected +  += +  +$num +  +; +  +for +  +( +  +int +  +i +  += +  + +startIndex +  +; +  +i +! " +< +# $ +_data +% * +. +* + +Count ++ 0 +&& +1 3 + collected +4 = +< +> ? +count +@ E +; +E F +i +G H +++ +H J +) +J K +{ +  +var +  +bar +  += +  +_data +  +[ +  +i +  +] +  +; +  +long +  +timeDiff +  += +  +Math +  +. + ! +Abs +! $ +( +$ % +bar +% ( +. +( ) +Time +) - +- +. / + expectedTime +0 < +) +< = +; += > +long +  + tolerance +  += +  +interval + % +. +% & +Ticks +& + +/ +, - +$num +. / +; +/ 0 +if +  +( +  +timeDiff +  +<= +  + tolerance + % +) +% & +{ +  +result +  +. +  +Add +  +( +  +bar +  +, +  +isNew + % +: +% & +true +' + +) ++ , +; +, - + collected +  +++ +  +; +  + expectedTime +  ++= +  +interval + ( +. +( ) +Ticks +) . +; +. / +} +  +else +  +if +  +( +  +bar +  +. +  +Time +  +> +  + expectedTime + , +) +, - +{ +  +long +  +gaps +  += +  +( +  +bar +  +. + ! +Time +! % +- +& ' + expectedTime +( 4 +) +4 5 +/ +6 7 +interval +8 @ +. +@ A +Ticks +A F +; +F G + expectedTime +  ++= +  +( + ! +gaps +! % ++ +& ' +$num +( ) +) +) * +* ++ , +interval +- 5 +. +5 6 +Ticks +6 ; +; +; < +if +  +( +  +Math +  +. +  +Abs +  +( +  +bar +  +. + ! +Time +! % +- +& ' + expectedTime +( 4 ++ +5 6 +interval +7 ? +. +? @ +Ticks +@ E +) +E F +<= +G I + tolerance +J S +) +S T +{ +  +result +  +. +  +Add +  +( +  +bar + " +, +" # +isNew +$ ) +: +) * +true ++ / +) +/ 0 +; +0 1 + collected +  +++ +  +; +  + expectedTime +  ++= +! # +interval +$ , +. +, - +Ticks +- 2 +; +2 3 +} +  +} +  +} +  + _currentIndex +  += +  + +startIndex + " +; +" # +_hasCurrentBar +  += +  +false +  +; +  +return +  +result +  +; +  +} +  +} ( +;/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs + namespace  + QuanTAlib +  +;  +[   +SkipLocalsInit    +]    +public + +  +readonly + +  +struct + +  +TValue + +  +: + +  + +IEquatable + + * +< + +* + +TValue + ++ 1 +> + +1 2 +{   +public + +readonly  +long  +Time  +;  +public + +readonly  +double  +Value  +; ! +public + +DateTime  + +AsDateTime  +=> ! +new" % +(% & +Time& * +,* + + DateTimeKind, 8 +.8 9 +Utc9 < +)< = +;= > +[  + +MethodImpl  +(  +MethodImplOptions ! +.! " +AggressiveInlining" 4 +)4 5 +]5 6 +public + +TValue  +(  +long  +time  +,  +double # +value$ ) +)) * +{  +Time  +=  +time  +;  +Value  +=  +value  +;  +}    +[""  + +MethodImpl""  +(""  +MethodImplOptions"" ! +.""! " +AggressiveInlining""" 4 +)""4 5 +]""5 6 +public## + +TValue##  +(##  +DateTime##  +time##  +,##  +double##! ' +value##( - +)##- . +{$$  +Time%%  +=%%  +time%%  +.%%  +Ticks%%  +;%%  +Value&&  +=&&  +value&&  +;&&  +}''  +[))  + +MethodImpl))  +())  +MethodImplOptions)) ! +.))! " +AggressiveInlining))" 4 +)))4 5 +]))5 6 +public** + +static**  +implicit**  +operator** # +double**$ * +(*** + +TValue**+ 1 +tv**2 4 +)**4 5 +=>**6 8 +tv**9 ; +.**; < +Value**< A +;**A B +[,,  + +MethodImpl,,  +(,,  +MethodImplOptions,, ! +.,,! " +AggressiveInlining,," 4 +),,4 5 +],,5 6 +public-- + +static--  +implicit--  +operator-- # +DateTime--$ , +(--, - +TValue--- 3 +tv--4 6 +)--6 7 +=>--8 : +new--; > +(--> ? +tv--? A +.--A B +Time--B F +,--F G + DateTimeKind--H T +.--T U +Utc--U X +)--X Y +;--Y Z +[//  + +MethodImpl//  +(//  +MethodImplOptions// ! +.//! " +AggressiveInlining//" 4 +)//4 5 +]//5 6 +public00 + +override00  +string00  +ToString00 # +(00# $ +)00$ % +=>00& ( +$"00) + +$str00+ , +{00, - + +AsDateTime00- 7 +:007 8 +$str008 K +}00K L +$str00L N +{00N O +Value00O T +:00T U +$str00U W +}00W X +$str00X Y +"00Y Z +;00Z [ +[22  + +MethodImpl22  +(22  +MethodImplOptions22 ! +.22! " +AggressiveInlining22" 4 +)224 5 +]225 6 +public33 + +bool33  +Equals33  +(33  +TValue33  +other33 # +)33# $ +=>33% ' +Time33( , +==33- / +other330 5 +.335 6 +Time336 : +&&33; = +Value33> C +==33D F +other33G L +.33L M +Value33M R +;33R S +public55 + +override55  +bool55  +Equals55  +(55  +object55 & +?55& ' +obj55( + +)55+ , +=>55- / +obj550 3 +is554 6 +TValue557 = +other55> C +&&55D F +Equals55G M +(55M N +other55N S +)55S T +;55T U +public66 + +override66  +int66  + GetHashCode66 # +(66# $ +)66$ % +=>66& ( +HashCode66) 1 +.661 2 +Combine662 9 +(669 : +Time66: > +,66> ? +Value66@ E +)66E F +;66F G +public77 + +static77  +bool77  +operator77  +==77 " +(77" # +TValue77# ) +left77* . +,77. / +TValue770 6 +right777 < +)77< = +=>77> @ +left77A E +.77E F +Equals77F L +(77L M +right77M R +)77R S +;77S T +public88 + +static88  +bool88  +operator88  +!=88 " +(88" # +TValue88# ) +left88* . +,88. / +TValue880 6 +right887 < +)88< = +=>88> @ +!88A B +left88B F +.88F G +Equals88G M +(88M N +right88N S +)88S T +;88T U +}99 V +=/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs + namespace  + QuanTAlib +  +;  +public   +class    +TSeries    +:    + IReadOnlyList   $ +<  $ % +TValue  % + +>  + , +{   + protected  +readonly  +List  +<  +long  +> ! +_t" $ +;$ % + protected  +readonly  +List  +<  +double " +>" # +_v$ & +;& ' +public + +string  +Name  +{  +get  +;  +set ! +;! " +}# $ +=% & +$str' - +;- . +public + +event  +Action  +<  +TValue  +>  +?  +Pub! $ +;$ % +public + +TSeries  +(  +)  +{  +_t + +=  +new  +List  +<  +long  +>  +(  +)  +;  +_v + +=  +new  +List  +<  +double  +>  +(  +)  +;  +}  +public## + +TSeries##  +(##  +int##  +capacity##  +)##  +{$$  +_t%% + +=%%  +new%%  +List%%  +<%%  +long%%  +>%%  +(%%  +capacity%% $ +)%%$ % +;%%% & +_v&& + +=&&  +new&&  +List&&  +<&&  +double&&  +>&&  +(&&  +capacity&& & +)&&& ' +;&&' ( +}''  +public,, + +TSeries,,  +(,,  +List,,  +<,,  +long,,  +>,,  +time,, " +,,," # +List,,$ ( +<,,( ) +double,,) / +>,,/ 0 +values,,1 7 +),,7 8 +{--  +_t.. + +=..  +time..  +;..  +_v// + +=//  +values//  +;//  +}00  +public22 + +int22  +Count22  +{33  +[44  + +MethodImpl44  +(44  +MethodImplOptions44 % +.44% & +AggressiveInlining44& 8 +)448 9 +]449 : +get55  +=>55  +_v55  +.55  +Count55  +;55  +}66  +public88 + +TValue88  +this88  +[88  +int88  +index88  +]88 ! +{99  +[::  + +MethodImpl::  +(::  +MethodImplOptions:: % +.::% & +AggressiveInlining::& 8 +)::8 9 +]::9 : +get;;  +=>;;  +new;;  +(;;  +_t;;  +[;;  +index;;  +];;  +,;;  +_v;;  +[;; ! +index;;! & +];;& ' +);;' ( +;;;( ) +}<<  +public>> + +TValue>>  +Last>>  +{??  +[@@  + +MethodImpl@@  +(@@  +MethodImplOptions@@ % +.@@% & +AggressiveInlining@@& 8 +)@@8 9 +]@@9 : +getAA  +=>AA  +_vAA  +.AA  +CountAA  +>AA  +$numAA  +?AA  +newAA ! +(AA! " +_tAA" $ +[AA$ % +^AA% & +$numAA& ' +]AA' ( +,AA( ) +_vAA* , +[AA, - +^AA- . +$numAA. / +]AA/ 0 +)AA0 1 +:AA2 3 +defaultAA4 ; +;AA; < +}BB  +publicDD + +doubleDD  + LastValueDD  +{EE  +[FF  + +MethodImplFF  +(FF  +MethodImplOptionsFF % +.FF% & +AggressiveInliningFF& 8 +)FF8 9 +]FF9 : +getGG  +=>GG  +_vGG  +.GG  +CountGG  +>GG  +$numGG  +?GG  +_vGG  +[GG ! +^GG! " +$numGG" # +]GG# $ +:GG% & +doubleGG' - +.GG- . +NaNGG. 1 +;GG1 2 +}HH  +publicJJ + +longJJ  +LastTimeJJ  +{KK  +[LL  + +MethodImplLL  +(LL  +MethodImplOptionsLL % +.LL% & +AggressiveInliningLL& 8 +)LL8 9 +]LL9 : +getMM  +=>MM  +_tMM  +.MM  +CountMM  +>MM  +$numMM  +?MM  +_tMM  +[MM ! +^MM! " +$numMM" # +]MM# $ +:MM% & +$numMM' ( +;MM( ) +}NN  +publicSS + + ReadOnlySpanSS  +<SS  +doubleSS  +>SS  +ValuesSS & +{TT  +[UU  + +MethodImplUU  +(UU  +MethodImplOptionsUU % +.UU% & +AggressiveInliningUU& 8 +)UU8 9 +]UU9 : +getVV  +=>VV  +CollectionsMarshalVV ! +.VV! " +AsSpanVV" ( +(VV( ) +_vVV) + +)VV+ , +;VV, - +}WW  +public\\ + + ReadOnlySpan\\  +<\\  +long\\  +>\\  +Times\\ # +{]]  +[^^  + +MethodImpl^^  +(^^  +MethodImplOptions^^ % +.^^% & +AggressiveInlining^^& 8 +)^^8 9 +]^^9 : +get__  +=>__  +CollectionsMarshal__ ! +.__! " +AsSpan__" ( +(__( ) +_t__) + +)__+ , +;__, - +}``  +[bb  + +MethodImplbb  +(bb  +MethodImplOptionsbb ! +.bb! " +AggressiveInliningbb" 4 +)bb4 5 +]bb5 6 +publiccc + +virtualcc  +voidcc  +Addcc  +(cc  +TValuecc " +valuecc# ( +,cc( ) +boolcc* . +isNewcc/ 4 +)cc4 5 +{dd  +ifee + +(ee  +isNewee  +||ee  +_vee  +.ee  +Countee  +==ee  +$numee! " +)ee" # +{ff  +_tgg  +.gg  +Addgg  +(gg  +valuegg  +.gg  +Timegg  +)gg  +;gg  +_vhh  +.hh  +Addhh  +(hh  +valuehh  +.hh  +Valuehh  +)hh  +;hh  +}ii  +elsejj  +{kk  +intmm  +lastIdxmm  +=mm  +_vmm  +.mm  +Countmm " +-mm# $ +$nummm% & +;mm& ' +_tnn  +[nn  +lastIdxnn  +]nn  +=nn  +valuenn  +.nn  +Timenn $ +;nn$ % +_voo  +[oo  +lastIdxoo  +]oo  +=oo  +valueoo  +.oo  +Valueoo % +;oo% & +}pp  +Pubqq  +?qq  +.qq  +Invokeqq  +(qq  +valueqq  +)qq  +;qq  +}rr  +[uu  + +MethodImpluu  +(uu  +MethodImplOptionsuu ! +.uu! " +AggressiveInlininguu" 4 +)uu4 5 +]uu5 6 +publicvv + +virtualvv  +voidvv  +Addvv  +(vv  +TValuevv " +valuevv# ( +)vv( ) +=>vv* , +Addvv- 0 +(vv0 1 +valuevv1 6 +,vv6 7 +truevv8 < +)vv< = +;vv= > +[xx  + +MethodImplxx  +(xx  +MethodImplOptionsxx ! +.xx! " +AggressiveInliningxx" 4 +)xx4 5 +]xx5 6 +publicyy + +voidyy  +Addyy  +(yy  +longyy  +timeyy  +,yy  +doubleyy % +valueyy& + +,yy+ , +boolyy- 1 +isNewyy2 7 +=yy8 9 +trueyy: > +)yy> ? +=>yy@ B +AddyyC F +(yyF G +newyyG J +TValueyyK Q +(yyQ R +timeyyR V +,yyV W +valueyyX ] +)yy] ^ +,yy^ _ +isNewyy` e +)yye f +;yyf g +[{{  + +MethodImpl{{  +({{  +MethodImplOptions{{ ! +.{{! " +AggressiveInlining{{" 4 +){{4 5 +]{{5 6 +public|| + +void||  +Add||  +(||  +DateTime||  +time|| ! +,||! " +double||# ) +value||* / +,||/ 0 +bool||1 5 +isNew||6 ; +=||< = +true||> B +)||B C +=>||D F +Add||G J +(||J K +new||K N +TValue||O U +(||U V +time||V Z +.||Z [ +Ticks||[ ` +,||` a +value||b g +)||g h +,||h i +isNew||j o +)||o p +;||p q +public~~ + +void~~  +Add~~  +(~~  + IEnumerable~~  +<~~  +double~~ & +>~~& ' +values~~( . +)~~. / +{  +long +  +t +  += +  +DateTime +  +. +  +UtcNow +  +. + ! +Ticks +! & +; +& ' +foreach +  +( +  +var +  +v +  +in +  +values +  +) + ! +{ +  +Add +  +( +  +new +  +TValue +  +( +  +t +  +, +  +v +  +) +  +, + ! +isNew +" ' +: +' ( +true +) - +) +- . +; +. / +t +  ++= +  +TimeSpan +  +. +  +TicksPerMinute + ( +; +( ) +} +  +} +  +public + + + IEnumerator +  +< +  +TValue +  +> +  + GetEnumerator + , +( +, - +) +- . +{ +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_v +  +. +  +Count + $ +; +$ % +i +& ' +++ +' ) +) +) * +{ +  +yield +  +return +  +new +  +TValue + # +( +# $ +_t +$ & +[ +& ' +i +' ( +] +( ) +, +) * +_v ++ - +[ +- . +i +. / +] +/ 0 +) +0 1 +; +1 2 +} +  +} +  + IEnumerator +  + IEnumerable +  +. +  + GetEnumerator + ) +( +) * +) +* + +=> +, . + GetEnumerator +/ < +( +< = +) += > +; +> ? +} ԰ +C/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs + namespace  + QuanTAlib +  +;  +public   +class    + +TBarSeries    +:    + IReadOnlyList   ' +<  ' ( +TBar  ( , +>  , - +{   + protected  +readonly  +List  +<  +long  +> ! +_t" $ +=% & +new' * +(* + +)+ , +;, - + protected  +readonly  +List  +<  +double " +>" # +_o$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_h$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_l$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_c$ & +=' ( +new) , +(, - +)- . +;. / + protected  +readonly  +List  +<  +double " +>" # +_v$ & +=' ( +new) , +(, - +)- . +;. / +public + +string  +Name  +{  +get  +;  +set ! +;! " +}# $ +=% & +$str' , +;, - +public + +event  +Action  +<  +TBar  +>  +?  +Pub " +;" # +public + +TSeries  +Open  +{  +get  +;  +}  +public + +TSeries  +High  +{  +get  +;  +}  +public + +TSeries  +Low  +{  +get  +;  +}  +public + +TSeries  +Close  +{  +get  +;  +} ! +public + +TSeries  +Volume  +{  +get  +;  +}! " +public!! + +TSeries!!  +O!!  +=>!!  +Open!!  +;!!  +public"" + +TSeries""  +H""  +=>""  +High""  +;""  +public## + +TSeries##  +L##  +=>##  +Low##  +;##  +public$$ + +TSeries$$  +C$$  +=>$$  +Close$$  +;$$  +public%% + +TSeries%%  +V%%  +=>%%  +Volume%%  +;%%  +public'' + + +TBarSeries''  +(''  +)''  +{((  +Open**  +=**  +new**  +TSeries**  +(**  +_t**  +,**  +_o** ! +)**! " +{**# $ +Name**% ) +=*** + +$str**, 2 +}**3 4 +;**4 5 +High++  +=++  +new++  +TSeries++  +(++  +_t++  +,++  +_h++ ! +)++! " +{++# $ +Name++% ) +=++* + +$str++, 2 +}++3 4 +;++4 5 +Low,,  +=,,  +new,,  +TSeries,,  +(,,  +_t,,  +,,,  +_l,,  +),, ! +{,," # +Name,,$ ( +=,,) * +$str,,+ 0 +},,1 2 +;,,2 3 +Close--  +=--  +new--  +TSeries--  +(--  +_t--  +,--  +_c-- " +)--" # +{--$ % +Name--& * +=--+ , +$str--- 4 +}--5 6 +;--6 7 +Volume..  +=..  +new..  +TSeries..  +(..  +_t..  +,..  +_v..! # +)..# $ +{..% & +Name..' + +=.., - +$str... 6 +}..7 8 +;..8 9 +}//  +public44 + + +TBarSeries44  +(44  +int44  +capacity44 " +)44" # +{55  +_t66 + +=66  +new66  +List66  +<66  +long66  +>66  +(66  +capacity66 $ +)66$ % +;66% & +_o77 + +=77  +new77  +List77  +<77  +double77  +>77  +(77  +capacity77 & +)77& ' +;77' ( +_h88 + +=88  +new88  +List88  +<88  +double88  +>88  +(88  +capacity88 & +)88& ' +;88' ( +_l99 + +=99  +new99  +List99  +<99  +double99  +>99  +(99  +capacity99 & +)99& ' +;99' ( +_c:: + +=::  +new::  +List::  +<::  +double::  +>::  +(::  +capacity:: & +)::& ' +;::' ( +_v;; + +=;;  +new;;  +List;;  +<;;  +double;;  +>;;  +(;;  +capacity;; & +);;& ' +;;;' ( +Open>>  +=>>  +new>>  +TSeries>>  +(>>  +_t>>  +,>>  +_o>> ! +)>>! " +{>># $ +Name>>% ) +=>>* + +$str>>, 2 +}>>3 4 +;>>4 5 +High??  +=??  +new??  +TSeries??  +(??  +_t??  +,??  +_h?? ! +)??! " +{??# $ +Name??% ) +=??* + +$str??, 2 +}??3 4 +;??4 5 +Low@@  +=@@  +new@@  +TSeries@@  +(@@  +_t@@  +,@@  +_l@@  +)@@ ! +{@@" # +Name@@$ ( +=@@) * +$str@@+ 0 +}@@1 2 +;@@2 3 +CloseAA  +=AA  +newAA  +TSeriesAA  +(AA  +_tAA  +,AA  +_cAA " +)AA" # +{AA$ % +NameAA& * +=AA+ , +$strAA- 4 +}AA5 6 +;AA6 7 +VolumeBB  +=BB  +newBB  +TSeriesBB  +(BB  +_tBB  +,BB  +_vBB! # +)BB# $ +{BB% & +NameBB' + +=BB, - +$strBB. 6 +}BB7 8 +;BB8 9 +}CC  +publicEE + +intEE  +CountEE  +{FF  +[GG  + +MethodImplGG  +(GG  +MethodImplOptionsGG % +.GG% & +AggressiveInliningGG& 8 +)GG8 9 +]GG9 : +getHH  +=>HH  +_cHH  +.HH  +CountHH  +;HH  +}II  +publicKK + +TBarKK  +thisKK  +[KK  +intKK  +indexKK  +]KK  +{LL  +[MM  + +MethodImplMM  +(MM  +MethodImplOptionsMM % +.MM% & +AggressiveInliningMM& 8 +)MM8 9 +]MM9 : +getNN  +=>NN  +newNN  +(NN  +_tNN  +[NN  +indexNN  +]NN  +,NN  +_oNN  +[NN ! +indexNN! & +]NN& ' +,NN' ( +_hNN) + +[NN+ , +indexNN, 1 +]NN1 2 +,NN2 3 +_lNN4 6 +[NN6 7 +indexNN7 < +]NN< = +,NN= > +_cNN? A +[NNA B +indexNNB G +]NNG H +,NNH I +_vNNJ L +[NNL M +indexNNM R +]NNR S +)NNS T +;NNT U +}OO  +publicQQ + +TBarQQ  +LastQQ  +{RR  +[SS  + +MethodImplSS  +(SS  +MethodImplOptionsSS % +.SS% & +AggressiveInliningSS& 8 +)SS8 9 +]SS9 : +getTT  +=>TT  +_cTT  +.TT  +CountTT  +>TT  +$numTT  +?TT  +newTT ! +(TT! " +_tTT" $ +[TT$ % +^TT% & +$numTT& ' +]TT' ( +,TT( ) +_oTT* , +[TT, - +^TT- . +$numTT. / +]TT/ 0 +,TT0 1 +_hTT2 4 +[TT4 5 +^TT5 6 +$numTT6 7 +]TT7 8 +,TT8 9 +_lTT: < +[TT< = +^TT= > +$numTT> ? +]TT? @ +,TT@ A +_cTTB D +[TTD E +^TTE F +$numTTF G +]TTG H +,TTH I +_vTTJ L +[TTL M +^TTM N +$numTTN O +]TTO P +)TTP Q +:TTR S +defaultTTT [ +;TT[ \ +}UU  +publicWW + +longWW  +LastTimeWW  +{WW  +[WW  + +MethodImplWW & +(WW& ' +MethodImplOptionsWW' 8 +.WW8 9 +AggressiveInliningWW9 K +)WWK L +]WWL M +getWWN Q +=>WWR T +_tWWU W +.WWW X +CountWWX ] +>WW^ _ +$numWW` a +?WWb c +_tWWd f +[WWf g +^WWg h +$numWWh i +]WWi j +:WWk l +$numWWm n +;WWn o +}WWp q +publicXX + +doubleXX  +LastOpenXX  +{XX  +[XX  + +MethodImplXX ( +(XX( ) +MethodImplOptionsXX) : +.XX: ; +AggressiveInliningXX; M +)XXM N +]XXN O +getXXP S +=>XXT V +_oXXW Y +.XXY Z +CountXXZ _ +>XX` a +$numXXb c +?XXd e +_oXXf h +[XXh i +^XXi j +$numXXj k +]XXk l +:XXm n +doubleXXo u +.XXu v +NaNXXv y +;XXy z +}XX{ | +publicYY + +doubleYY  +LastHighYY  +{YY  +[YY  + +MethodImplYY ( +(YY( ) +MethodImplOptionsYY) : +.YY: ; +AggressiveInliningYY; M +)YYM N +]YYN O +getYYP S +=>YYT V +_hYYW Y +.YYY Z +CountYYZ _ +>YY` a +$numYYb c +?YYd e +_hYYf h +[YYh i +^YYi j +$numYYj k +]YYk l +:YYm n +doubleYYo u +.YYu v +NaNYYv y +;YYy z +}YY{ | +publicZZ + +doubleZZ  +LastLowZZ  +{ZZ  +[ZZ  + +MethodImplZZ ' +(ZZ' ( +MethodImplOptionsZZ( 9 +.ZZ9 : +AggressiveInliningZZ: L +)ZZL M +]ZZM N +getZZO R +=>ZZS U +_lZZV X +.ZZX Y +CountZZY ^ +>ZZ_ ` +$numZZa b +?ZZc d +_lZZe g +[ZZg h +^ZZh i +$numZZi j +]ZZj k +:ZZl m +doubleZZn t +.ZZt u +NaNZZu x +;ZZx y +}ZZz { +public[[ + +double[[  + LastClose[[  +{[[  +[[[  + +MethodImpl[[ ) +([[) * +MethodImplOptions[[* ; +.[[; < +AggressiveInlining[[< N +)[[N O +][[O P +get[[Q T +=>[[U W +_c[[X Z +.[[Z [ +Count[[[ ` +>[[a b +$num[[c d +?[[e f +_c[[g i +[[[i j +^[[j k +$num[[k l +][[l m +:[[n o +double[[p v +.[[v w +NaN[[w z +;[[z { +}[[| } +public\\ + +double\\  + +LastVolume\\  +{\\  +[\\  + +MethodImpl\\ * +(\\* + +MethodImplOptions\\+ < +.\\< = +AggressiveInlining\\= O +)\\O P +]\\P Q +get\\R U +=>\\V X +_v\\Y [ +.\\[ \ +Count\\\ a +>\\b c +$num\\d e +?\\f g +_v\\h j +[\\j k +^\\k l +$num\\l m +]\\m n +:\\o p +double\\q w +.\\w x +NaN\\x { +;\\{ | +}\\} ~ +[^^  + +MethodImpl^^  +(^^  +MethodImplOptions^^ ! +.^^! " +AggressiveInlining^^" 4 +)^^4 5 +]^^5 6 +public__ + +void__  +Add__  +(__  +TBar__  +bar__  +,__  +bool__ " +isNew__# ( +=__) * +true__+ / +)__/ 0 +{``  +ifaa + +(aa  +isNewaa  +||aa  +_caa  +.aa  +Countaa  +==aa  +$numaa! " +)aa" # +{bb  +_tcc  +.cc  +Addcc  +(cc  +barcc  +.cc  +Timecc  +)cc  +;cc  +_odd  +.dd  +Adddd  +(dd  +bardd  +.dd  +Opendd  +)dd  +;dd  +_hee  +.ee  +Addee  +(ee  +baree  +.ee  +Highee  +)ee  +;ee  +_lff  +.ff  +Addff  +(ff  +barff  +.ff  +Lowff  +)ff  +;ff  +_cgg  +.gg  +Addgg  +(gg  +bargg  +.gg  +Closegg  +)gg  +;gg  +_vhh  +.hh  +Addhh  +(hh  +barhh  +.hh  +Volumehh  +)hh  +;hh  +}ii  +elsejj  +{kk  +intll  +lastIdxll  +=ll  +_cll  +.ll  +Countll " +-ll# $ +$numll% & +;ll& ' +_tmm  +[mm  +lastIdxmm  +]mm  +=mm  +barmm  +.mm  +Timemm " +;mm" # +_onn  +[nn  +lastIdxnn  +]nn  +=nn  +barnn  +.nn  +Opennn " +;nn" # +_hoo  +[oo  +lastIdxoo  +]oo  +=oo  +baroo  +.oo  +Highoo " +;oo" # +_lpp  +[pp  +lastIdxpp  +]pp  +=pp  +barpp  +.pp  +Lowpp ! +;pp! " +_cqq  +[qq  +lastIdxqq  +]qq  +=qq  +barqq  +.qq  +Closeqq # +;qq# $ +_vrr  +[rr  +lastIdxrr  +]rr  +=rr  +barrr  +.rr  +Volumerr $ +;rr$ % +}ss  +Pubuu  +?uu  +.uu  +Invokeuu  +(uu  +baruu  +)uu  +;uu  +}vv  +[xx  + +MethodImplxx  +(xx  +MethodImplOptionsxx ! +.xx! " +AggressiveInliningxx" 4 +)xx4 5 +]xx5 6 +publicyy + +voidyy  +Addyy  +(yy  +longyy  +timeyy  +,yy  +doubleyy % +openyy& * +,yy* + +doubleyy, 2 +highyy3 7 +,yy7 8 +doubleyy9 ? +lowyy@ C +,yyC D +doubleyyE K +closeyyL Q +,yyQ R +doubleyyS Y +volumeyyZ ` +,yy` a +boolyyb f +isNewyyg l +=yym n +trueyyo s +)yys t +=>yyu w +Addzz  +(zz  +newzz  +TBarzz  +(zz  +timezz  +,zz  +openzz  +,zz  +highzz! % +,zz% & +lowzz' * +,zz* + +closezz, 1 +,zz1 2 +volumezz3 9 +)zz9 : +,zz: ; +isNewzz< A +)zzA B +;zzB C +[||  + +MethodImpl||  +(||  +MethodImplOptions|| ! +.||! " +AggressiveInlining||" 4 +)||4 5 +]||5 6 +public}} + +void}}  +Add}}  +(}}  +DateTime}}  +time}} ! +,}}! " +double}}# ) +open}}* . +,}}. / +double}}0 6 +high}}7 ; +,}}; < +double}}= C +low}}D G +,}}G H +double}}I O +close}}P U +,}}U V +double}}W ] +volume}}^ d +,}}d e +bool}}f j +isNew}}k p +=}}q r +true}}s w +)}}w x +=>}}y { +Add~~  +(~~  +new~~  +TBar~~  +(~~  +time~~  +.~~  +Ticks~~  +,~~  +open~~! % +,~~% & +high~~' + +,~~+ , +low~~- 0 +,~~0 1 +close~~2 7 +,~~7 8 +volume~~9 ? +)~~? @ +,~~@ A +isNew~~B G +)~~G H +;~~H I +public + + +void +  +Add +  +( +  + IEnumerable +  +< +  +long + $ +> +$ % +t +& ' +, +' ( + IEnumerable +) 4 +< +4 5 +double +5 ; +> +; < +o += > +, +> ? + IEnumerable +@ K +< +K L +double +L R +> +R S +h +T U +, +U V + IEnumerable +W b +< +b c +double +c i +> +i j +l +k l +, +l m + IEnumerable +n y +< +y z +double z  +>   +c   +,   + IEnumerable   +<   +double   +>   +v   +)   +{ +  +var +  +tArr +  += +  +t +  +as +  +long +  +[ +  +] +  +?? + ! +t +" # +. +# $ +ToArray +$ + +( ++ , +) +, - +; +- . +var +  +oArr +  += +  +o +  +as +  +double +  +[ +  +] +  +?? +! # +o +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +hArr +  += +  +h +  +as +  +double +  +[ +  +] +  +?? +! # +h +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +lArr +  += +  +l +  +as +  +double +  +[ +  +] +  +?? +! # +l +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +cArr +  += +  +c +  +as +  +double +  +[ +  +] +  +?? +! # +c +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +var +  +vArr +  += +  +v +  +as +  +double +  +[ +  +] +  +?? +! # +v +$ % +. +% & +ToArray +& - +( +- . +) +. / +; +/ 0 +if + + +( +  +tArr +  +. +  +Length +  +!= +  +oArr +  +. +  +Length + & +|| +' ) +oArr +* . +. +. / +Length +/ 5 +!= +6 8 +hArr +9 = +. += > +Length +> D +|| +E G +hArr +  +. +  +Length +  +!= +  +lArr +  +. +  +Length + & +|| +' ) +lArr +* . +. +. / +Length +/ 5 +!= +6 8 +cArr +9 = +. += > +Length +> D +|| +E G +cArr +  +. +  +Length +  +!= +  +vArr +  +. +  +Length + & +) +& ' +{ +  +throw +  +new +  +ArgumentException + ' +( +' ( +$str +( N +) +N O +; +O P +} +  +_t + + +. + +  +AddRange +  +( +  +tArr +  +) +  +; +  +_o + + +. + +  +AddRange +  +( +  +oArr +  +) +  +; +  +_h + + +. + +  +AddRange +  +( +  +hArr +  +) +  +; +  +_l + + +. + +  +AddRange +  +( +  +lArr +  +) +  +; +  +_c + + +. + +  +AddRange +  +( +  +cArr +  +) +  +; +  +_v + + +. + +  +AddRange +  +( +  +vArr +  +) +  +; +  +} +  +public + + + IEnumerator +  +< +  +TBar +  +> +  + GetEnumerator + * +( +* + +) ++ , +{ +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_c +  +. +  +Count + $ +; +$ % +i +& ' +++ +' ) +) +) * +{ +  +yield +  +return +  +new +  +TBar + ! +( +! " +_t +" $ +[ +$ % +i +% & +] +& ' +, +' ( +_o +) + +[ ++ , +i +, - +] +- . +, +. / +_h +0 2 +[ +2 3 +i +3 4 +] +4 5 +, +5 6 +_l +7 9 +[ +9 : +i +: ; +] +; < +, +< = +_c +> @ +[ +@ A +i +A B +] +B C +, +C D +_v +E G +[ +G H +i +H I +] +I J +) +J K +; +K L +} +  +} +  + IEnumerator +  + IEnumerable +  +. +  + GetEnumerator + ) +( +) * +) +* + +=> +, . + GetEnumerator +/ < +( +< = +) += > +; +> ? +} b +7/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs + namespace  + QuanTAlib +  +;  +[   +SkipLocalsInit    +]    +public + +  +readonly + +  +struct + +  +TBar + +  +: + +  + +IEquatable + + ( +< + +( ) +TBar + +) - +> + +- . +{   +public   + +readonly    +long    +Time    +;    +public   + +readonly    +double    +Open    +;    +public + +readonly  +double  +High  +;  +public + +readonly  +double  +Low  +;  +public + +readonly  +double  +Close  +; ! +public + +readonly  +double  +Volume ! +;! " +public + +DateTime  + +AsDateTime  +=> ! +new" % +(% & +Time& * +,* + + DateTimeKind, 8 +.8 9 +Utc9 < +)< = +;= > +public + +TValue  +O  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +OpenZ ^ +)^ _ +;_ ` +}a b +public + +TValue  +H  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +HighZ ^ +)^ _ +;_ ` +}a b +public + +TValue  +L  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +LowZ ] +)] ^ +;^ _ +}` a +public + +TValue  +C  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +CloseZ _ +)_ ` +;` a +}b c +public + +TValue  +V  +{  +[  + +MethodImpl ! +(! " +MethodImplOptions" 3 +.3 4 +AggressiveInlining4 F +)F G +]G H +getI L +=>M O +newP S +(S T +TimeT X +,X Y +VolumeZ ` +)` a +;a b +}c d +public + +double  +HL2  +{  +[  + +MethodImpl # +(# $ +MethodImplOptions$ 5 +.5 6 +AggressiveInlining6 H +)H I +]I J +getK N +=>O Q +(R S +HighS W ++X Y +LowZ ] +)] ^ +*_ ` +$numa d +;d e +}f g +public + +double  +OC2  +{  +[  + +MethodImpl # +(# $ +MethodImplOptions$ 5 +.5 6 +AggressiveInlining6 H +)H I +]I J +getK N +=>O Q +(R S +OpenS W ++X Y +CloseZ _ +)_ ` +*a b +$numc f +;f g +}h i +public + +double  +OHL3  +{  +[  + +MethodImpl $ +($ % +MethodImplOptions% 6 +.6 7 +AggressiveInlining7 I +)I J +]J K +getL O +=>P R +(S T +OpenT X ++Y Z +High[ _ ++` a +Lowb e +)e f +/g h +$numi l +;l m +}n o +public   + +double    +HLC3    +{    +[    + +MethodImpl   $ +(  $ % +MethodImplOptions  % 6 +.  6 7 +AggressiveInlining  7 I +)  I J +]  J K +get  L O +=>  P R +(  S T +High  T X ++  Y Z +Low  [ ^ ++  _ ` +Close  a f +)  f g +/  h i +$num  j m +;  m n +}  o p +public!! + +double!!  +OHLC4!!  +{!!  +[!!  + +MethodImpl!! % +(!!% & +MethodImplOptions!!& 7 +.!!7 8 +AggressiveInlining!!8 J +)!!J K +]!!K L +get!!M P +=>!!Q S +(!!T U +Open!!U Y ++!!Z [ +High!!\ ` ++!!a b +Low!!c f ++!!g h +Close!!i n +)!!n o +*!!p q +$num!!r v +;!!v w +}!!x y +public"" + +double""  +HLCC4""  +{""  +[""  + +MethodImpl"" % +(""% & +MethodImplOptions""& 7 +.""7 8 +AggressiveInlining""8 J +)""J K +]""K L +get""M P +=>""Q S +(""T U +High""U Y ++""Z [ +Low""\ _ ++""` a +Close""b g ++""h i +Close""j o +)""o p +*""q r +$num""s w +;""w x +}""y z +[$$  + +MethodImpl$$  +($$  +MethodImplOptions$$ ! +.$$! " +AggressiveInlining$$" 4 +)$$4 5 +]$$5 6 +public%% + +TBar%%  +(%%  +long%%  +time%%  +,%%  +double%% ! +open%%" & +,%%& ' +double%%( . +high%%/ 3 +,%%3 4 +double%%5 ; +low%%< ? +,%%? @ +double%%A G +close%%H M +,%%M N +double%%O U +volume%%V \ +)%%\ ] +{&&  +Time''  +=''  +time''  +;''  +Open((  +=((  +open((  +;((  +High))  +=))  +high))  +;))  +Low**  +=**  +low**  +;**  +Close++  +=++  +close++  +;++  +Volume,,  +=,,  +volume,,  +;,,  +}--  +[//  + +MethodImpl//  +(//  +MethodImplOptions// ! +.//! " +AggressiveInlining//" 4 +)//4 5 +]//5 6 +public00 + +TBar00  +(00  +DateTime00  +time00  +,00  +double00 % +open00& * +,00* + +double00, 2 +high003 7 +,007 8 +double009 ? +low00@ C +,00C D +double00E K +close00L Q +,00Q R +double00S Y +volume00Z ` +)00` a +{11  +Time22  +=22  +time22  +.22  +Ticks22  +;22  +Open33  +=33  +open33  +;33  +High44  +=44  +high44  +;44  +Low55  +=55  +low55  +;55  +Close66  +=66  +close66  +;66  +Volume77  +=77  +volume77  +;77  +}88  +[::  + +MethodImpl::  +(::  +MethodImplOptions:: ! +.::! " +AggressiveInlining::" 4 +)::4 5 +]::5 6 +public;; + +static;;  +implicit;;  +operator;; # +double;;$ * +(;;* + +TBar;;+ / +bar;;0 3 +);;3 4 +=>;;5 7 +bar;;8 ; +.;;; < +Close;;< A +;;;A B +[==  + +MethodImpl==  +(==  +MethodImplOptions== ! +.==! " +AggressiveInlining==" 4 +)==4 5 +]==5 6 +public>> + +static>>  +implicit>>  +operator>> # +TValue>>$ * +(>>* + +TBar>>+ / +bar>>0 3 +)>>3 4 +=>>>5 7 +new>>8 ; +(>>; < +bar>>< ? +.>>? @ +Time>>@ D +,>>D E +bar>>F I +.>>I J +Close>>J O +)>>O P +;>>P Q +[@@  + +MethodImpl@@  +(@@  +MethodImplOptions@@ ! +.@@! " +AggressiveInlining@@" 4 +)@@4 5 +]@@5 6 +publicAA + +staticAA  +implicitAA  +operatorAA # +DateTimeAA$ , +(AA, - +TBarAA- 1 +barAA2 5 +)AA5 6 +=>AA7 9 +newAA: = +(AA= > +barAA> A +.AAA B +TimeAAB F +,AAF G + DateTimeKindAAH T +.AAT U +UtcAAU X +)AAX Y +;AAY Z +[CC  + +MethodImplCC  +(CC  +MethodImplOptionsCC ! +.CC! " +AggressiveInliningCC" 4 +)CC4 5 +]CC5 6 +publicDD + +overrideDD  +stringDD  +ToStringDD # +(DD# $ +)DD$ % +=>DD& ( +$"DD) + +$strDD+ , +{DD, - + +AsDateTimeDD- 7 +:DD7 8 +$strDD8 K +}DDK L +$strDDL P +{DDP Q +OpenDDQ U +:DDU V +$strDDV X +}DDX Y +$strDDY ] +{DD] ^ +HighDD^ b +:DDb c +$strDDc e +}DDe f +$strDDf j +{DDj k +LowDDk n +:DDn o +$strDDo q +}DDq r +$strDDr v +{DDv w +CloseDDw | +:DD| } +$strDD}  +} DD  +$str +DD  +{ +DD  +Volume +DD  +: +DD  +$str +DD  +} +DD  +$str +DD  +" +DD  +; +DD  +[FF  + +MethodImplFF  +(FF  +MethodImplOptionsFF ! +.FF! " +AggressiveInliningFF" 4 +)FF4 5 +]FF5 6 +publicGG + +boolGG  +EqualsGG  +(GG  +TBarGG  +otherGG ! +)GG! " +=>GG# % +TimeHH  +==HH  +otherHH  +.HH  +TimeHH  +&&HH  +OpenII  +==II  +otherII  +.II  +OpenII  +&&II  +HighJJ  +==JJ  +otherJJ  +.JJ  +HighJJ  +&&JJ  +LowKK  +==KK  +otherKK  +.KK  +LowKK  +&&KK  +CloseLL  +==LL  +otherLL  +.LL  +CloseLL  +&&LL  +VolumeMM  +==MM  +otherMM  +.MM  +VolumeMM  +;MM  +publicOO + +overrideOO  +boolOO  +EqualsOO  +(OO  +objectOO & +?OO& ' +objOO( + +)OO+ , +=>OO- / +objOO0 3 +isOO4 6 +TBarOO7 ; +otherOO< A +&&OOB D +EqualsOOE K +(OOK L +otherOOL Q +)OOQ R +;OOR S +publicPP + +overridePP  +intPP  + GetHashCodePP # +(PP# $ +)PP$ % +=>PP& ( +HashCodePP) 1 +.PP1 2 +CombinePP2 9 +(PP9 : +TimePP: > +,PP> ? +OpenPP@ D +,PPD E +HighPPF J +,PPJ K +LowPPL O +,PPO P +ClosePPQ V +,PPV W +VolumePPX ^ +)PP^ _ +;PP_ ` +publicQQ + +staticQQ  +boolQQ  +operatorQQ  +==QQ " +(QQ" # +TBarQQ# ' +leftQQ( , +,QQ, - +TBarQQ. 2 +rightQQ3 8 +)QQ8 9 +=>QQ: < +leftQQ= A +.QQA B +EqualsQQB H +(QQH I +rightQQI N +)QQN O +;QQO P +publicRR + +staticRR  +boolRR  +operatorRR  +!=RR " +(RR" # +TBarRR# ' +leftRR( , +,RR, - +TBarRR. 2 +rightRR3 8 +)RR8 9 +=>RR: < +!RR= > +leftRR> B +.RRB C +EqualsRRC I +(RRI J +rightRRJ O +)RRO P +;RRP Q +}SS  +A/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs + namespace  + QuanTAlib +  +;  +public + +  +static + +  +class + +  +SimdExtensions + + " +{   +[    + +MethodImpl    +(    +MethodImplOptions   ! +.  ! " +AggressiveInlining  " 4 +)  4 5 +]  5 6 +internal  +static  +bool # +ContainsNonFiniteScalar 0 +(0 1 + ReadOnlySpan1 = +<= > +double> D +>D E +spanF J +)J K +{  +for  +(  +int  +i  +=  +$num  +;  +i  +<  +span  +. ! +Length! ' +;' ( +i) * +++* , +), - +{  +if  +(  +!  +double  +.  +IsFinite  +( ! +span! % +[% & +i& ' +]' ( +)( ) +)) * +return  +true  +;  +}  +return  +false  +;  +}  +[  + +MethodImpl  +(  +MethodImplOptions ! +.! " +AggressiveInlining" 4 +)4 5 +]5 6 +internal  +static  +double  + SumScalar $ +($ % + ReadOnlySpan% 1 +<1 2 +double2 8 +>8 9 +span: > +)> ? +{  +double  +scalar  +=  +$num  +;  +for  +(  +int  +i  +=  +$num  +;  +i  +<  +span  +. ! +Length! ' +;' ( +i) * +++* , +), - +scalar  ++=  +span  +[  +i  +]  +;  +return  +scalar  +;  +}  +[!!  + +MethodImpl!!  +(!!  +MethodImplOptions!! ! +.!!! " +AggressiveInlining!!" 4 +)!!4 5 +]!!5 6 +internal""  +static""  +double""  + MinScalar"" $ +(""$ % + ReadOnlySpan""% 1 +<""1 2 +double""2 8 +>""8 9 +span"": > +)""> ? +{##  +double$$  +min$$  +=$$  +span$$  +[$$  +$num$$  +]$$  +;$$  +for%%  +(%%  +int%%  +i%%  +=%%  +$num%%  +;%%  +i%%  +<%%  +span%%  +.%% ! +Length%%! ' +;%%' ( +i%%) * +++%%* , +)%%, - +{&&  +if''  +(''  +span''  +[''  +i''  +]''  +<''  +min''  +)''  +min((  +=((  +span((  +[((  +i((  +]((  +;((  +}))  +return**  +min**  +;**  +}++  +[--  + +MethodImpl--  +(--  +MethodImplOptions-- ! +.--! " +AggressiveInlining--" 4 +)--4 5 +]--5 6 +internal..  +static..  +double..  + MaxScalar.. $ +(..$ % + ReadOnlySpan..% 1 +<..1 2 +double..2 8 +>..8 9 +span..: > +)..> ? +{//  +double00  +max00  +=00  +span00  +[00  +$num00  +]00  +;00  +for11  +(11  +int11  +i11  +=11  +$num11  +;11  +i11  +<11  +span11  +.11 ! +Length11! ' +;11' ( +i11) * +++11* , +)11, - +{22  +if33  +(33  +span33  +[33  +i33  +]33  +>33  +max33  +)33  +max44  +=44  +span44  +[44  +i44  +]44  +;44  +}55  +return66  +max66  +;66  +}77  +[99  + +MethodImpl99  +(99  +MethodImplOptions99 ! +.99! " +AggressiveInlining99" 4 +)994 5 +]995 6 +internal::  +static::  +double::  +VarianceScalar:: ) +(::) * + ReadOnlySpan::* 6 +<::6 7 +double::7 = +>::= > +span::? C +,::C D +double::E K +mean::L P +)::P Q +{;;  +double<<  + +sumSquares<<  +=<<  +$num<<  +;<<  +for==  +(==  +int==  +i==  +===  +$num==  +;==  +i==  +<==  +span==  +.== ! +Length==! ' +;==' ( +i==) * +++==* , +)==, - +{>>  +double??  +diff??  +=??  +span??  +[??  +i??  +]?? ! +-??" # +mean??$ ( +;??( ) + +sumSquares@@  ++=@@  +diff@@  +*@@  +diff@@! % +;@@% & +}AA  +returnBB  + +sumSquaresBB  +/BB  +(BB  +spanBB ! +.BB! " +LengthBB" ( +-BB) * +$numBB+ , +)BB, - +;BB- . +}CC  +[EE  + +MethodImplEE  +(EE  +MethodImplOptionsEE ! +.EE! " +AggressiveInliningEE" 4 +)EE4 5 +]EE5 6 +internalFF  +staticFF  +(FF  +doubleFF  +MinFF  +,FF  +doubleFF! ' +MaxFF( + +)FF+ , + MinMaxScalarFF- 9 +(FF9 : + ReadOnlySpanFF: F +<FFF G +doubleFFG M +>FFM N +spanFFO S +)FFS T +{GG  +doubleHH  + scalarMinHH  +=HH  +spanHH  +[HH  +$numHH ! +]HH! " +;HH" # +doubleII  + scalarMaxII  +=II  +spanII  +[II  +$numII ! +]II! " +;II" # +forJJ  +(JJ  +intJJ  +iJJ  +=JJ  +$numJJ  +;JJ  +iJJ  +<JJ  +spanJJ  +.JJ ! +LengthJJ! ' +;JJ' ( +iJJ) * +++JJ* , +)JJ, - +{KK  +ifLL  +(LL  +spanLL  +[LL  +iLL  +]LL  +<LL  + scalarMinLL # +)LL# $ + scalarMinLL% . +=LL/ 0 +spanLL1 5 +[LL5 6 +iLL6 7 +]LL7 8 +;LL8 9 +ifMM  +(MM  +spanMM  +[MM  +iMM  +]MM  +>MM  + scalarMaxMM # +)MM# $ + scalarMaxMM% . +=MM/ 0 +spanMM1 5 +[MM5 6 +iMM6 7 +]MM7 8 +;MM8 9 +}NN  +returnOO  +(OO  + scalarMinOO  +,OO  + scalarMaxOO $ +)OO$ % +;OO% & +}PP  +[XX  + +MethodImplXX  +(XX  +MethodImplOptionsXX ! +.XX! " +AggressiveInliningXX" 4 +)XX4 5 +]XX5 6 +publicYY + +staticYY  +boolYY  +ContainsNonFiniteYY ( +(YY( ) +thisYY) - + ReadOnlySpanYY. : +<YY: ; +doubleYY; A +>YYA B +spanYYC G +)YYG H +{ZZ  +if[[ + +([[  +span[[  +.[[  +IsEmpty[[  +)[[  +return[[  +false[[! & +;[[& ' +if]] + +(]]  +Vector]]  +.]] ! +IsHardwareAccelerated]] ( +&&]]) + +span]], 0 +.]]0 1 +Length]]1 7 +>=]]8 : +Vector]]; A +<]]A B +double]]B H +>]]H I +.]]I J +Count]]J O +)]]O P +{^^  +int__  + +vectorSize__  +=__  +Vector__ # +<__# $ +double__$ * +>__* + +.__+ , +Count__, 1 +;__1 2 +int``  +i``  +=``  +$num``  +;``  +varaa  +maxValueaa  +=aa  +newaa  +Vectoraa % +<aa% & +doubleaa& , +>aa, - +(aa- . +doubleaa. 4 +.aa4 5 +MaxValueaa5 = +)aa= > +;aa> ? +forcc  +(cc  +;cc  +icc  +<=cc  +spancc  +.cc  +Lengthcc # +-cc$ % + +vectorSizecc& 0 +;cc0 1 +icc2 3 ++=cc4 6 + +vectorSizecc7 A +)ccA B +{dd  +varee  +vectoree  +=ee  +newee  +Vectoree! ' +<ee' ( +doubleee( . +>ee. / +(ee/ 0 +spanee0 4 +.ee4 5 +Sliceee5 : +(ee: ; +iee; < +,ee< = + +vectorSizeee> H +)eeH I +)eeI J +;eeJ K +varhh  +nanCheckhh  +=hh  +Vectorhh % +.hh% & +Equalshh& , +(hh, - +vectorhh- 3 +,hh3 4 +vectorhh5 ; +)hh; < +;hh< = +ifii  +(ii  +!ii  +nanCheckii  +.ii  +Equalsii $ +(ii$ % +Vectorii% + +<ii+ , +longii, 0 +>ii0 1 +.ii1 2 + +AllBitsSetii2 < +)ii< = +)ii= > +returnjj  +truejj  +;jj  +varmm  +absVecmm  +=mm  +Vectormm # +.mm# $ +Absmm$ ' +(mm' ( +vectormm( . +)mm. / +;mm/ 0 +varnn  +infChecknn  +=nn  +Vectornn % +.nn% & + GreaterThannn& 1 +(nn1 2 +absVecnn2 8 +,nn8 9 +maxValuenn: B +)nnB C +;nnC D +ifoo  +(oo  +!oo  +infCheckoo  +.oo  +Equalsoo $ +(oo$ % +Vectoroo% + +<oo+ , +longoo, 0 +>oo0 1 +.oo1 2 +Zerooo2 6 +)oo6 7 +)oo7 8 +returnpp  +truepp  +;pp  +}qq  +fortt  +(tt  +;tt  +itt  +<tt  +spantt  +.tt  +Lengthtt " +;tt" # +itt$ % +++tt% ' +)tt' ( +{uu  +ifvv  +(vv  +!vv  +doublevv  +.vv  +IsFinitevv $ +(vv$ % +spanvv% ) +[vv) * +ivv* + +]vv+ , +)vv, - +)vv- . +returnww  +trueww  +;ww  +}xx  +returnzz  +falsezz  +;zz  +}{{  +return}} # +ContainsNonFiniteScalar}} & +(}}& ' +span}}' + +)}}+ , +;}}, - +}~~  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  +SumSIMD +  +( + ! +this +! % + ReadOnlySpan +& 2 +< +2 3 +double +3 9 +> +9 : +span +; ? +) +? @ +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +$num +! $ +; +$ % +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +Vector +  +< +  +double +  +> +  +sum +  += +  +Vector +! ' +< +' ( +double +( . +> +. / +. +/ 0 +Zero +0 4 +; +4 5 +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +int +  +i +  += +  +$num +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +sum +  ++= +  +vector +  +; +  +} +  +double +  +result +  += +  +$num +  +; +  +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +result +  ++= +  +sum +  +[ +  +j +  +] +  +; + ! +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +result +  ++= +  +span +  +[ +  +i +  +] + ! +; +! " +return +  +result +  +; +  +} +  +return +  + SumScalar +  +( +  +span +  +) +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  +MinSIMD +  +( + ! +this +! % + ReadOnlySpan +& 2 +< +2 3 +double +3 9 +> +9 : +span +; ? +) +? @ +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +double +! ' +. +' ( +NaN +( + +; ++ , +if + + +( +  +span +  +. +  +Length +  +== +  +$num +  +) +  +return + $ +span +% ) +[ +) * +$num +* + +] ++ , +; +, - +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +var +  +minVec +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +span +, 0 +. +0 1 +Slice +1 6 +( +6 7 +$num +7 8 +, +8 9 + +vectorSize +: D +) +D E +) +E F +; +F G +int +  +i +  += +  + +vectorSize +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +minVec +  += +  +Vector +  +. +  +Min + # +( +# $ +minVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +} +  +double +  +result +  += +  +minVec + " +[ +" # +$num +# $ +] +$ % +; +% & +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +{ +  +if +  +( +  +minVec +  +[ +  +j +  +] +  +< +  +result + & +) +& ' +result +  += +  +minVec + # +[ +# $ +j +$ % +] +% & +; +& ' +} +  +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +if +  +( +  +span +  +[ +  +i +  +] +  +< +  +result + $ +) +$ % +result +  += +  +span + ! +[ +! " +i +" # +] +# $ +; +$ % +} +  +return +  +result +  +; +  +} +  +return +  + MinScalar +  +( +  +span +  +) +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  +MaxSIMD +  +( + ! +this +! % + ReadOnlySpan +& 2 +< +2 3 +double +3 9 +> +9 : +span +; ? +) +? @ +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +double +! ' +. +' ( +NaN +( + +; ++ , +if + + +( +  +span +  +. +  +Length +  +== +  +$num +  +) +  +return + $ +span +% ) +[ +) * +$num +* + +] ++ , +; +, - +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +var +  +maxVec +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +span +, 0 +. +0 1 +Slice +1 6 +( +6 7 +$num +7 8 +, +8 9 + +vectorSize +: D +) +D E +) +E F +; +F G +int +  +i +  += +  + +vectorSize +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +maxVec +  += +  +Vector +  +. +  +Max + # +( +# $ +maxVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +} +  +double +  +result +  += +  +maxVec + " +[ +" # +$num +# $ +] +$ % +; +% & +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +{ +  +if +  +( +  +maxVec +  +[ +  +j +  +] +  +> +  +result + & +) +& ' +result +  += +  +maxVec + # +[ +# $ +j +$ % +] +% & +; +& ' +} +  +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +if +  +( +  +span +  +[ +  +i +  +] +  +> +  +result + $ +) +$ % +result +  += +  +span + ! +[ +! " +i +" # +] +# $ +; +$ % +} +  +return +  +result +  +; +  +} +  +return +  + MaxScalar +  +( +  +span +  +) +  +; +  +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  + AverageSIMD + $ +( +$ % +this +% ) + ReadOnlySpan +* 6 +< +6 7 +double +7 = +> += > +span +? C +) +C D +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +double +! ' +. +' ( +NaN +( + +; ++ , +return +  +span +  +. +  +SumSIMD +  +( +  +) +  +/ +  +span + $ +. +$ % +Length +% + +; ++ , +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  + VarianceSIMD + % +( +% & +this +& * + ReadOnlySpan ++ 7 +< +7 8 +double +8 > +> +> ? +span +@ D +, +D E +double +F L +? +L M +mean +N R += +S T +null +U Y +) +Y Z +{ +  +if + + +( +  +span +  +. +  +Length +  +< +  +$num +  +) +  +return + # +double +$ * +. +* + +NaN ++ . +; +. / +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +double +- 3 +. +3 4 +NaN +4 7 +; +7 8 +double +  +m +  += +  +mean +  +?? +  +span +  +. +  + AverageSIMD + + +( ++ , +) +, - +; +- . +if + + +( +  +! +  +double +  +. +  +IsFinite +  +( +  +m +  +) +  +) +  +return +! ' +double +( . +. +. / +NaN +/ 2 +; +2 3 +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +var +  +meanVec +  += +  +new +  +Vector + $ +< +$ % +double +% + +> ++ , +( +, - +m +- . +) +. / +; +/ 0 +Vector +  +< +  +double +  +> +  +sumSq +  += +! " +Vector +# ) +< +) * +double +* 0 +> +0 1 +. +1 2 +Zero +2 6 +; +6 7 +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +int +  +i +  += +  +$num +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +var +  +diff +  += +  +vector + ! +- +" # +meanVec +$ + +; ++ , +sumSq +  ++= +  +diff +  +* +  +diff + $ +; +$ % +} +  +double +  +result +  += +  +$num +  +; +  +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +result +  ++= +  +sumSq +  +[ +  +j + ! +] +! " +; +" # +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +double +  +diff +  += +  +span + " +[ +" # +i +# $ +] +$ % +- +& ' +m +( ) +; +) * +result +  ++= +  +diff +  +* +  +diff +! % +; +% & +} +  +return +  +result +  +/ +  +( +  +span + ! +. +! " +Length +" ( +- +) * +$num ++ , +) +, - +; +- . +} +  +return +  +VarianceScalar +  +( +  +span + " +, +" # +m +$ % +) +% & +; +& ' +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +double +  + +StdDevSIMD + # +( +# $ +this +$ ( + ReadOnlySpan +) 5 +< +5 6 +double +6 < +> +< = +span +> B +, +B C +double +D J +? +J K +mean +L P += +Q R +null +S W +) +W X +{ +  +return +  +Math +  +. +  +Sqrt +  +( +  +span +  +. +  + VarianceSIMD + * +( +* + +mean ++ / +) +/ 0 +) +0 1 +; +1 2 +} +  +[ +  + +MethodImpl +  +( +  +MethodImplOptions + ! +. +! " +AggressiveInlining +" 4 +) +4 5 +] +5 6 +public + + +static +  +( +  +double +  +Min +  +, +  +double + % +Max +& ) +) +) * + +MinMaxSIMD ++ 5 +( +5 6 +this +6 : + ReadOnlySpan +; G +< +G H +double +H N +> +N O +span +P T +) +T U +{ +  +if + + +( +  +span +  +. +  +IsEmpty +  +) +  +return +  +( +! " +double +" ( +. +( ) +NaN +) , +, +, - +double +. 4 +. +4 5 +NaN +5 8 +) +8 9 +; +9 : +if + + +( +  +span +  +. +  +Length +  +== +  +$num +  +) +  +return + $ +( +% & +span +& * +[ +* + +$num ++ , +] +, - +, +- . +span +/ 3 +[ +3 4 +$num +4 5 +] +5 6 +) +6 7 +; +7 8 +if + + +( +  +span +  +. +  +ContainsNonFinite + " +( +" # +) +# $ +) +$ % +return +& , +( +- . +double +. 4 +. +4 5 +NaN +5 8 +, +8 9 +double +: @ +. +@ A +NaN +A D +) +D E +; +E F +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +span +, 0 +. +0 1 +Length +1 7 +>= +8 : +Vector +; A +< +A B +double +B H +> +H I +. +I J +Count +J O +) +O P +{ +  +int +  + +vectorSize +  += +  +Vector + # +< +# $ +double +$ * +> +* + +. ++ , +Count +, 1 +; +1 2 +var +  +minVec +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +span +, 0 +. +0 1 +Slice +1 6 +( +6 7 +$num +7 8 +, +8 9 + +vectorSize +: D +) +D E +) +E F +; +F G +var +  +maxVec +  += +  +minVec +  +; +  +int +  +i +  += +  + +vectorSize +  +; +  +for +  +( +  +; +  +i +  +<= +  +span +  +. +  +Length + # +- +$ % + +vectorSize +& 0 +; +0 1 +i +2 3 ++= +4 6 + +vectorSize +7 A +) +A B +{ +  +var +  +vector +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +span +0 4 +. +4 5 +Slice +5 : +( +: ; +i +; < +, +< = + +vectorSize +> H +) +H I +) +I J +; +J K +minVec +  += +  +Vector +  +. +  +Min + # +( +# $ +minVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +maxVec +  += +  +Vector +  +. +  +Max + # +( +# $ +maxVec +$ * +, +* + +vector +, 2 +) +2 3 +; +3 4 +} +  +double +  +min +  += +  +minVec +  +[ +  +$num + ! +] +! " +; +" # +double +  +max +  += +  +maxVec +  +[ +  +$num + ! +] +! " +; +" # +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j +  +< +  + +vectorSize + * +; +* + +j +, - +++ +- / +) +/ 0 +{ +  +if +  +( +  +minVec +  +[ +  +j +  +] +  +< +  +min + # +) +# $ +min +% ( += +) * +minVec ++ 1 +[ +1 2 +j +2 3 +] +3 4 +; +4 5 +if +  +( +  +maxVec +  +[ +  +j +  +] +  +> +  +max + # +) +# $ +max +% ( += +) * +maxVec ++ 1 +[ +1 2 +j +2 3 +] +3 4 +; +4 5 +} +  +for +  +( +  +; +  +i +  +< +  +span +  +. +  +Length + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +if +  +( +  +span +  +[ +  +i +  +] +  +< +  +min + ! +) +! " +min +# & += +' ( +span +) - +[ +- . +i +. / +] +/ 0 +; +0 1 +if +  +( +  +span +  +[ +  +i +  +] +  +> +  +max + ! +) +! " +max +# & += +' ( +span +) - +[ +- . +i +. / +] +/ 0 +; +0 1 +} +  +return +  +( +  +min +  +, +  +max +  +) +  +; +  +} +  +return +  + MinMaxScalar +  +( +  +span +  +) + ! +; +! " +} +  +}  +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.cs + namespace  + QuanTAlib +  +;  +[   +SkipLocalsInit    +]    +public   +class    + EmaVector    +{  +private  +readonly  +double  +[  +]  +_alphas % +;% & +private  +readonly  +double  +[  +]  +_emas # +;# $ +private  +readonly  +double  +[  +]  +_Es ! +;! " +private  +readonly  +double  +[  +]  +_p_emas % +;% & +private  +readonly  +double  +[  +]  +_p_Es # +;# $ +private  +readonly  +int  +_count  +;  +private  +double  +_lastValidValue " +;" # +public + +TValue  +[  +]  +Values  +{  +get  +; ! +private" ) +set* - +;- . +}/ 0 +public   + + EmaVector    +(    +int    +[    +]    +periods   " +)  " # +{!!  +_count""  +=""  +periods""  +.""  +Length""  +;""  +_alphas##  +=##  +new##  +double##  +[##  +_count## # +]### $ +;##$ % +_emas$$  +=$$  +new$$  +double$$  +[$$  +_count$$ ! +]$$! " +;$$" # +_Es%%  +=%%  +new%%  +double%%  +[%%  +_count%%  +]%%  +;%% ! +_p_emas&&  +=&&  +new&&  +double&&  +[&&  +_count&& # +]&&# $ +;&&$ % +_p_Es''  +=''  +new''  +double''  +[''  +_count'' ! +]''! " +;''" # +Values((  +=((  +new((  +TValue((  +[((  +_count(( " +]((" # +;((# $ +for**  +(**  +int**  +i**  +=**  +$num**  +;**  +i**  +<**  +_count** " +;**" # +i**$ % +++**% ' +)**' ( +{++ ' +ArgumentOutOfRangeException,, ' +.,,' (" +ThrowIfLessThanOrEqual,,( > +(,,> ? +periods,,? F +[,,F G +i,,G H +],,H I +,,,I J +$num,,K L +),,L M +;,,M N +_alphas--  +[--  +i--  +]--  +=--  +$num--  +/--  +(--  +periods-- ' +[--' ( +i--( ) +]--) * ++--+ , +$num--- . +)--. / +;--/ 0 +ResetAt..  +(..  +i..  +)..  +;..  +}//  +}00  +public66 + + EmaVector66  +(66  +double66  +[66  +]66  +alphas66 $ +)66$ % +{77  +_count88  +=88  +alphas88  +.88  +Length88  +;88  +_alphas99  +=99  +new99  +double99  +[99  +_count99 # +]99# $ +;99$ % +_emas::  +=::  +new::  +double::  +[::  +_count:: ! +]::! " +;::" # +_Es;;  +=;;  +new;;  +double;;  +[;;  +_count;;  +];;  +;;; ! +_p_emas<<  +=<<  +new<<  +double<<  +[<<  +_count<< # +]<<# $ +;<<$ % +_p_Es==  +===  +new==  +double==  +[==  +_count== ! +]==! " +;==" # +Values>>  +=>>  +new>>  +TValue>>  +[>>  +_count>> " +]>>" # +;>># $ +for@@  +(@@  +int@@  +i@@  +=@@  +$num@@  +;@@  +i@@  +<@@  +_count@@ " +;@@" # +i@@$ % +++@@% ' +)@@' ( +{AA  +ifBB  +(BB  +alphasBB  +[BB  +iBB  +]BB  +<=BB  +$numBB  +||BB ! +alphasBB" ( +[BB( ) +iBB) * +]BB* + +>BB, - +$numBB. / +)BB/ 0 +throwCC  +newCC ' +ArgumentOutOfRangeExceptionCC 5 +(CC5 6 +nameofCC6 < +(CC< = +alphasCC= C +)CCC D +,CCD E +alphasCCF L +[CCL M +iCCM N +]CCN O +,CCO P +$str CCQ  +) +CC  +; +CC  +_alphasDD  +[DD  +iDD  +]DD  +=DD  +alphasDD  +[DD  +iDD ! +]DD! " +;DD" # +ResetAtEE  +(EE  +iEE  +)EE  +;EE  +}FF  +}GG  +privateII  +voidII  +ResetAtII  +(II  +intII  +indexII " +)II" # +{JJ  +_emasKK  +[KK  +indexKK  +]KK  +=KK  +$numKK  +;KK  +_EsLL  +[LL  +indexLL  +]LL  +=LL  +$numLL  +;LL  +}MM  +[RR  + +MethodImplRR  +(RR  +MethodImplOptionsRR ! +.RR! " +AggressiveInliningRR" 4 +)RR4 5 +]RR5 6 +privateSS  +doubleSS  + GetValidValueSS  +(SS ! +doubleSS! ' +inputSS( - +)SS- . +{TT  +ifUU + +(UU  +doubleUU  +.UU  +IsFiniteUU  +(UU  +inputUU ! +)UU! " +)UU" # +{VV  +_lastValidValueWW  +=WW  +inputWW # +;WW# $ +returnXX  +inputXX  +;XX  +}YY  +returnZZ  +_lastValidValueZZ  +;ZZ  +}[[  +public`` + +void``  +Reset``  +(``  +)``  +{aa  +forbb  +(bb  +intbb  +ibb  +=bb  +$numbb  +;bb  +ibb  +<bb  +_countbb " +;bb" # +ibb$ % +++bb% ' +)bb' ( +{cc  +ResetAtdd  +(dd  +idd  +)dd  +;dd  +}ee  +_lastValidValueff  +=ff  +$numff  +;ff  +Arraygg  +.gg  +Cleargg  +(gg  +Valuesgg  +)gg  +;gg  +}hh  +[rr  + +MethodImplrr  +(rr  +MethodImplOptionsrr ! +.rr! " +AggressiveInliningrr" 4 +)rr4 5 +]rr5 6 +publicss + +TValuess  +[ss  +]ss  +Updatess  +(ss  +TValuess ! +inputss" ' +,ss' ( +boolss) - +isNewss. 3 +=ss4 5 +truess6 : +)ss: ; +{tt  +ifuu + +(uu  +isNewuu  +)uu  +{vv  +Arrayww  +.ww  +Copyww  +(ww  +_emasww  +,ww  +_p_emasww % +,ww% & +_countww' - +)ww- . +;ww. / +Arrayxx  +.xx  +Copyxx  +(xx  +_Esxx  +,xx  +_p_Esxx ! +,xx! " +_countxx# ) +)xx) * +;xx* + +}yy  +elsezz  +{{{  +Array||  +.||  +Copy||  +(||  +_p_emas||  +,||  +_emas|| % +,||% & +_count||' - +)||- . +;||. / +Array}}  +.}}  +Copy}}  +(}}  +_p_Es}}  +,}}  +_Es}} ! +,}}! " +_count}}# ) +)}}) * +;}}* + +}~~  +double +  +val +  += +  + GetValidValue + " +( +" # +input +# ( +. +( ) +Value +) . +) +. / +; +/ 0 +int +  +vecCount +  += +  +Vector +  +< +  +double + $ +> +$ % +. +% & +Count +& + +; ++ , +int +  +i +  += +  +$num +  +; +  +if + + +( +  +Vector +  +. + # +IsHardwareAccelerated + ( +&& +) + +_count +, 2 +>= +3 5 +vecCount +6 > +) +> ? +{ +  +var +  +vecInput +  += +  +new +  +Vector + % +< +% & +double +& , +> +, - +( +- . +val +. 1 +) +1 2 +; +2 3 +var +  +vecOne +  += +  +Vector +  +< +  +double + & +> +& ' +. +' ( +One +( + +; ++ , +var +  + +vecEpsilon +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +$num +0 5 +) +5 6 +; +6 7 +for +  +( +  +; +  +i +  +<= +  +_count +  +- +  +vecCount +! ) +; +) * +i ++ , ++= +- / +vecCount +0 8 +) +8 9 +{ +  +var +  +vecAlpha +  += +  +new + " +Vector +# ) +< +) * +double +* 0 +> +0 1 +( +1 2 +_alphas +2 9 +, +9 : +i +; < +) +< = +; += > +var +  +vecEma +  += +  +new +  +Vector +! ' +< +' ( +double +( . +> +. / +( +/ 0 +_emas +0 5 +, +5 6 +i +7 8 +) +8 9 +; +9 : +var +  +vecE +  += +  +new +  +Vector + % +< +% & +double +& , +> +, - +( +- . +_Es +. 1 +, +1 2 +i +3 4 +) +4 5 +; +5 6 +vecEma +  ++= +  +vecAlpha + " +* +# $ +( +% & +vecInput +& . +- +/ 0 +vecEma +1 7 +) +7 8 +; +8 9 +vecE +  +*= +  +( +  +vecOne +  +- + ! +vecAlpha +" * +) +* + +; ++ , +var +  +vecCompensated + " += +# $ +vecEma +% + +/ +, - +( +. / +vecOne +/ 5 +- +6 7 +vecE +8 < +) +< = +; += > +var +  + isHotMask +  += +  +Vector + & +. +& ' +LessThanOrEqual +' 6 +( +6 7 +vecE +7 ; +, +; < + +vecEpsilon += G +) +G H +; +H I +var +  + vecResult +  += +  +Vector + & +. +& ' +ConditionalSelect +' 8 +( +8 9 +Vector +  +. +  +AsVectorDouble + ) +( +) * + isHotMask +* 3 +) +3 4 +, +4 5 +vecEma +  +, +  +vecCompensated + " +) +  +; +  +vecEma +  +. +  +CopyTo +  +( +  +_emas + # +, +# $ +i +% & +) +& ' +; +' ( +vecE +  +. +  +CopyTo +  +( +  +_Es +  +, +  +i +! " +) +" # +; +# $ +for +  +( +  +int +  +j +  += +  +$num +  +; +  +j + ! +< +" # +vecCount +$ , +; +, - +j +. / +++ +/ 1 +) +1 2 +{ +  +Values +  +[ +  +i +  ++ +  +j +  +] + ! += +" # +new +$ ' +TValue +( . +( +. / +input +/ 4 +. +4 5 +Time +5 9 +, +9 : + vecResult +; D +[ +D E +j +E F +] +F G +) +G H +; +H I +} +  +} +  +} +  +for +  +( +  +; +  +i +  +< +  +_count +  +; +  +i +  +++ +  +) +  +{ +  +double +  +alpha +  += +  +_alphas + " +[ +" # +i +# $ +] +$ % +; +% & +_emas +  +[ +  +i +  +] +  ++= +  +alpha +  +* +  +( + ! +val +! $ +- +% & +_emas +' , +[ +, - +i +- . +] +. / +) +/ 0 +; +0 1 +double +  +result +  += +  +_emas + ! +[ +! " +i +" # +] +# $ +; +$ % +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num +  +) +  +{ +  +_Es +  +[ +  +i +  +] +  +*= +  +( +  +$num +  +- +  +alpha +! & +) +& ' +; +' ( +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num + " +) +" # +{ +  +result +  += +  +_emas + " +[ +" # +i +# $ +] +$ % +/ +& ' +( +( ) +$num +) , +- +- . +_Es +/ 2 +[ +2 3 +i +3 4 +] +4 5 +) +5 6 +; +6 7 +} +  +} +  +Values +  +[ +  +i +  +] +  += +  +new +  +TValue + " +( +" # +input +# ( +. +( ) +Time +) - +, +- . +result +/ 5 +) +5 6 +; +6 7 +} +  +return +  +Values +  +; +  +} +  +public + + +TSeries +  +[ +  +] +  + Calculate +  +( +  +TSeries + & +source +' - +) +- . +{ +  +int +  +len +  += +  +source +  +. +  +Count +  +; +  +var +  + resultSeries +  += +  +new +  +TSeries + & +[ +& ' +_count +' - +] +- . +; +. / +var +  +tLists +  += +  +new +  +List +  +< +  +long + " +> +" # +[ +# $ +_count +$ * +] +* + +; ++ , +var +  +vLists +  += +  +new +  +List +  +< +  +double + $ +> +$ % +[ +% & +_count +& , +] +, - +; +- . +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_count + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  +tLists +  +[ +  +i +  +] +  += +  +new +  +List +  +< + ! +long +! % +> +% & +( +& ' +len +' * +) +* + +; ++ , +vLists +  +[ +  +i +  +] +  += +  +new +  +List +  +< + ! +double +! ' +> +' ( +( +( ) +len +) , +) +, - +; +- . +CollectionsMarshal +  +. +  +SetCount + ' +( +' ( +tLists +( . +[ +. / +i +/ 0 +] +0 1 +, +1 2 +len +3 6 +) +6 7 +; +7 8 +CollectionsMarshal +  +. +  +SetCount + ' +( +' ( +vLists +( . +[ +. / +i +/ 0 +] +0 1 +, +1 2 +len +3 6 +) +6 7 +; +7 8 +} +  +var +  + sourceValues +  += +  +source + ! +. +! " +Values +" ( +; +( ) +var +  + sourceTimes +  += +  +source +  +. + ! +Times +! & +; +& ' +int +  +vecCount +  += +  +Vector +  +< +  +double + $ +> +$ % +. +% & +Count +& + +; ++ , +var +  +vecOne +  += +  +Vector +  +< +  +double + " +> +" # +. +# $ +One +$ ' +; +' ( +var +  + +vecEpsilon +  += +  +new +  +Vector + # +< +# $ +double +$ * +> +* + +( ++ , +$num +, 1 +) +1 2 +; +2 3 +for +  +( +  +int +  +t +  += +  +$num +  +; +  +t +  +< +  +len +  +; +  +t +! " +++ +" $ +) +$ % +{ +  +double +  +val +  += +  + sourceValues + % +[ +% & +t +& ' +] +' ( +; +( ) +long +  +time +  += +  + sourceTimes + # +[ +# $ +t +$ % +] +% & +; +& ' +val +  += +  + GetValidValue +  +( +  +val + # +) +# $ +; +$ % +var +  +vecInput +  += +  +new +  +Vector + % +< +% & +double +& , +> +, - +( +- . +val +. 1 +) +1 2 +; +2 3 +int +  +i +  += +  +$num +  +; +  +if +  +( +  +Vector +  +. + # +IsHardwareAccelerated + , +&& +- / +_count +0 6 +>= +7 9 +vecCount +: B +) +B C +{ +  +for +  +( +  +; +  +i +  +<= +  +_count + " +- +# $ +vecCount +% - +; +- . +i +/ 0 ++= +1 3 +vecCount +4 < +) +< = +{ +  +var +  +vecAlpha +  += +! " +new +# & +Vector +' - +< +- . +double +. 4 +> +4 5 +( +5 6 +_alphas +6 = +, += > +i +? @ +) +@ A +; +A B +var +  +vecEma +  += +  +new +! $ +Vector +% + +< ++ , +double +, 2 +> +2 3 +( +3 4 +_emas +4 9 +, +9 : +i +; < +) +< = +; += > +var +  +vecE +  += +  +new + " +Vector +# ) +< +) * +double +* 0 +> +0 1 +( +1 2 +_Es +2 5 +, +5 6 +i +7 8 +) +8 9 +; +9 : +vecEma +  ++= +  +vecAlpha + & +* +' ( +( +) * +vecInput +* 2 +- +3 4 +vecEma +5 ; +) +; < +; +< = +vecE +  +*= +  +( +  +vecOne + # +- +$ % +vecAlpha +& . +) +. / +; +/ 0 +var +  +vecCompensated + & += +' ( +vecEma +) / +/ +0 1 +( +2 3 +vecOne +3 9 +- +: ; +vecE +< @ +) +@ A +; +A B +var +  + isHotMask + ! += +" # +Vector +$ * +. +* + +LessThanOrEqual ++ : +( +: ; +vecE +; ? +, +? @ + +vecEpsilon +A K +) +K L +; +L M +var +  + vecResult + ! += +" # +Vector +$ * +. +* + +ConditionalSelect ++ < +( +< = +Vector +  +. +  +AsVectorDouble + - +( +- . + isHotMask +. 7 +) +7 8 +, +8 9 +vecEma +  +, +  +vecCompensated + & +) +  +; +  +vecEma +  +. +  +CopyTo + ! +( +! " +_emas +" ' +, +' ( +i +) * +) +* + +; ++ , +vecE +  +. +  +CopyTo +  +( +  +_Es + # +, +# $ +i +% & +) +& ' +; +' ( +for +  +( +  +int +  +j +  += +  +$num +! " +; +" # +j +$ % +< +& ' +vecCount +( 0 +; +0 1 +j +2 3 +++ +3 5 +) +5 6 +{ +  +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +tLists +2 8 +[ +8 9 +i +9 : ++ +; < +j += > +] +> ? +) +? @ +[ +@ A +t +A B +] +B C += +D E +time +F J +; +J K +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +vLists +2 8 +[ +8 9 +i +9 : ++ +; < +j += > +] +> ? +) +? @ +[ +@ A +t +A B +] +B C += +D E + vecResult +F O +[ +O P +j +P Q +] +Q R +; +R S +} +  +} +  +} +  +for +  +( +  +; +  +i +  +< +  +_count +  +; +  +i +  +++ + " +) +" # +{ +  +double +  +alpha +  += +  +_alphas + & +[ +& ' +i +' ( +] +( ) +; +) * +_emas +  +[ +  +i +  +] +  ++= +  +alpha + ! +* +" # +( +$ % +val +% ( +- +) * +_emas ++ 0 +[ +0 1 +i +1 2 +] +2 3 +) +3 4 +; +4 5 +double +  +result +  += +  +_emas + % +[ +% & +i +& ' +] +' ( +; +( ) +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num + " +) +" # +{ +  +_Es +  +[ +  +i +  +] +  +*= +  +( +  +$num + " +- +# $ +alpha +% * +) +* + +; ++ , +if +  +( +  +_Es +  +[ +  +i +  +] +  +> +  +$num +! & +) +& ' +{ +  +result +  += +  +_emas +! & +[ +& ' +i +' ( +] +( ) +/ +* + +( +, - +$num +- 0 +- +1 2 +_Es +3 6 +[ +6 7 +i +7 8 +] +8 9 +) +9 : +; +: ; +} +  +} +  +CollectionsMarshal + " +. +" # +AsSpan +# ) +( +) * +tLists +* 0 +[ +0 1 +i +1 2 +] +2 3 +) +3 4 +[ +4 5 +t +5 6 +] +6 7 += +8 9 +time +: > +; +> ? +CollectionsMarshal + " +. +" # +AsSpan +# ) +( +) * +vLists +* 0 +[ +0 1 +i +1 2 +] +2 3 +) +3 4 +[ +4 5 +t +5 6 +] +6 7 += +8 9 +result +: @ +; +@ A +} +  +} +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +_count + " +; +" # +i +$ % +++ +% ' +) +' ( +{ +  + resultSeries +  +[ +  +i +  +] +  += +  +new + ! +TSeries +" ) +( +) * +tLists +* 0 +[ +0 1 +i +1 2 +] +2 3 +, +3 4 +vLists +5 ; +[ +; < +i +< = +] += > +) +> ? +; +? @ +var +  +lastT +  += +  +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +tLists +2 8 +[ +8 9 +i +9 : +] +: ; +) +; < +[ +< = +len += @ +- +A B +$num +C D +] +D E +; +E F +var +  +lastV +  += +  +CollectionsMarshal + * +. +* + +AsSpan ++ 1 +( +1 2 +vLists +2 8 +[ +8 9 +i +9 : +] +: ; +) +; < +[ +< = +len += @ +- +A B +$num +C D +] +D E +; +E F +Values +  +[ +  +i +  +] +  += +  +new +  +TValue + " +( +" # +lastT +# ( +, +( ) +lastV +* / +) +/ 0 +; +0 1 +} +  +return +  + resultSeries +  +; +  +} +  +public + + +static +  +TSeries +  +[ +  +] +  + Calculate + % +( +% & +TSeries +& - +source +. 4 +, +4 5 +int +6 9 +[ +9 : +] +: ; +periods +< C +) +C D +{ +  +var +  + emaVector +  += +  +new +  + EmaVector + % +( +% & +periods +& - +) +- . +; +. / +return +  + emaVector +  +. +  + Calculate + " +( +" # +source +# ) +) +) * +; +* + +} +  +} Z +9/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs + namespace  + QuanTAlib +  +;  +internal  +struct  +EmaState  +{  +public + +double  +Ema  +{  +get  +;  +set  +; ! +}" # +public   + +double    +E    +{    +get    +;    +set    +;    +}   ! +public + + + +bool + +  +IsHot + +  +{ + +  +get + +  +; + +  +set + +  +; + + ! +} + +" # +public   + +static    +EmaState    +New    +(    +)    +=>  ! # +new  $ ' +(  ' ( +)  ( ) +{  * + +Ema  , / +=  0 1 +$num  2 3 +,  3 4 +E  5 6 +=  7 8 +$num  9 < +,  < = +IsHot  > C +=  D E +false  F K +}  L M +;  M N +}   +public  +class  +Ema  +{  +private  +readonly  +double  +_alpha " +;" # +private  +EmaState  +_state  +=  +EmaState & +.& ' +New' * +(* + +)+ , +;, - +private  +EmaState  +_p_state  +=  +EmaState ( +.( ) +New) , +(, - +)- . +;. / +private  +double  +_lastValidValue " +;" # +public## + +Ema##  +(##  +int##  +period##  +)##  +{$$  +if%% + +(%%  +period%%  +<=%%  +$num%%  +)%%  +throw&&  +new&&  +ArgumentException&& ' +(&&' ( +$str&&( G +,&&G H +nameof&&I O +(&&O P +period&&P V +)&&V W +)&&W X +;&&X Y +_alpha((  +=((  +$num((  +/((  +(((  +period((  ++((  +$num((! " +)((" # +;((# $ +}))  +public// + +Ema//  +(//  +double//  +alpha//  +)//  +{00  +if11 + +(11  +alpha11  +<=11  +$num11  +||11  +alpha11  +>11 ! +$num11" # +)11# $ +throw22  +new22  +ArgumentException22 ' +(22' ( +$str22( G +,22G H +nameof22I O +(22O P +alpha22P U +)22U V +)22V W +;22W X +_alpha44  +=44  +alpha44  +;44  +}55  +public:: + +TValue::  +Value::  +{::  +get::  +;::  +private:: & +set::' * +;::* + +}::, - +public?? + +bool??  +IsHot??  +=>??  +_state??  +.??  +IsHot?? % +;??% & +[DD  + +MethodImplDD  +(DD  +MethodImplOptionsDD ! +.DD! " +AggressiveInliningDD" 4 +)DD4 5 +]DD5 6 +privateEE  +doubleEE  + GetValidValueEE  +(EE ! +doubleEE! ' +inputEE( - +)EE- . +{FF  +ifGG + +(GG  +doubleGG  +.GG  +IsFiniteGG  +(GG  +inputGG ! +)GG! " +)GG" # +{HH  +_lastValidValueII  +=II  +inputII # +;II# $ +returnJJ  +inputJJ  +;JJ  +}KK  +returnLL  +_lastValidValueLL  +;LL  +}MM  +[SS  + +MethodImplSS  +(SS  +MethodImplOptionsSS ! +.SS! " +AggressiveInliningSS" 4 +)SS4 5 +]SS5 6 +internalTT  +staticTT  +doubleTT  +ComputeTT " +(TT" # +doubleTT# ) +inputTT* / +,TT/ 0 +doubleTT1 7 +alphaTT8 = +,TT= > +refTT? B +EmaStateTTC K +stateTTL Q +)TTQ R +{UU  +stateVV  +.VV  +EmaVV  ++=VV  +alphaVV  +*VV  +(VV  +inputVV # +-VV$ % +stateVV& + +.VV+ , +EmaVV, / +)VV/ 0 +;VV0 1 +doubleXX  +resultXX  +;XX  +ifYY + +(YY  +!YY  +stateYY  +.YY  +IsHotYY  +)YY  +{ZZ  +state[[  +.[[  +E[[  +*=[[  +([[  +$num[[  +-[[  +alpha[[ # +)[[# $ +;[[$ % +state\\  +.\\  +IsHot\\  +=\\  +state\\  +.\\  +E\\ ! +<=\\" $ +$num\\% * +;\\* + +result]]  +=]]  +state]]  +.]]  +Ema]]  +/]]  +(]]! " +$num]]" % +-]]& ' +state]]( - +.]]- . +E]]. / +)]]/ 0 +;]]0 1 +}^^  +else__  +{``  +resultaa  +=aa  +stateaa  +.aa  +Emaaa  +;aa  +}bb  +returndd  +resultdd  +;dd  +}ee  +[mm  + +MethodImplmm  +(mm  +MethodImplOptionsmm ! +.mm! " +AggressiveInliningmm" 4 +)mm4 5 +]mm5 6 +publicnn + +TValuenn  +Updatenn  +(nn  +TValuenn  +inputnn % +,nn% & +boolnn' + +isNewnn, 1 +=nn2 3 +truenn4 8 +)nn8 9 +{oo  +ifpp + +(pp  +isNewpp  +)pp  +{qq  +_p_staterr  +=rr  +_staterr  +;rr  +}ss  +elsett  +{uu  +_statevv  +=vv  +_p_statevv  +;vv  +}ww  +doublezz  +valzz  +=zz  + GetValidValuezz " +(zz" # +inputzz# ( +.zz( ) +Valuezz) . +)zz. / +;zz/ 0 +val{{  +={{  +Compute{{  +({{  +val{{  +,{{  +_alpha{{ ! +,{{! " +ref{{# & +_state{{' - +){{- . +;{{. / +Value||  +=||  +new||  +TValue||  +(||  +input||  +.|| ! +Time||! % +,||% & +val||' * +)||* + +;||+ , +return}}  +Value}}  +;}}  +}~~  +public + + +TSeries +  +Update +  +( +  +TSeries + ! +source +" ( +) +( ) +{ +  +int +  +len +  += +  +source +  +. +  +Count +  +; +  +var +  +t +  += +  +new +  +List +  +< +  +long +  +> +  +( +  +len + " +) +" # +; +# $ +var +  +v +  += +  +new +  +List +  +< +  +double +  +> +  +( + ! +len +! $ +) +$ % +; +% & +CollectionsMarshal +  +. +  +SetCount + # +( +# $ +t +$ % +, +% & +len +' * +) +* + +; ++ , +CollectionsMarshal +  +. +  +SetCount + # +( +# $ +v +$ % +, +% & +len +' * +) +* + +; ++ , +var +  +tSpan +  += +  +CollectionsMarshal + & +. +& ' +AsSpan +' - +( +- . +t +. / +) +/ 0 +; +0 1 +var +  +vSpan +  += +  +CollectionsMarshal + & +. +& ' +AsSpan +' - +( +- . +v +. / +) +/ 0 +; +0 1 +var +  + sourceValues +  += +  +source + ! +. +! " +Values +" ( +; +( ) +var +  + sourceTimes +  += +  +source +  +. + ! +Times +! & +; +& ' +EmaState +  +state +  += +  +_state +  +; +  +for +  +( +  +int +  +i +  += +  +$num +  +; +  +i +  +< +  +len +  +; +  +i +! " +++ +" $ +) +$ % +{ +  +double +  +val +  += +  + GetValidValue + & +( +& ' + sourceValues +' 3 +[ +3 4 +i +4 5 +] +5 6 +) +6 7 +; +7 8 +val +  += +  +Compute +  +( +  +val +  +, +  +_alpha + % +, +% & +ref +' * +state ++ 0 +) +0 1 +; +1 2 +tSpan +  +[ +  +i +  +] +  += +  + sourceTimes + " +[ +" # +i +# $ +] +$ % +; +% & +vSpan +  +[ +  +i +  +] +  += +  +val +  +; +  +} +  +_state +  += +  +state +  +; +  +_p_state +  += +  +state +  +; +  +Value +  += +  +new +  +TValue +  +( +  +tSpan +  +[ + ! +len +! $ +- +% & +$num +' ( +] +( ) +, +) * +vSpan ++ 0 +[ +0 1 +len +1 4 +- +5 6 +$num +7 8 +] +8 9 +) +9 : +; +: ; +return +  +new +  +TSeries +  +( +  +t +  +, +  +v +  +) +  +; + ! +} +  +public + + +static +  +TSeries +  + Calculate + # +( +# $ +TSeries +$ + +source +, 2 +, +2 3 +int +4 7 +period +8 > +) +> ? +{ +  +var +  +ema +  += +  +new +  +Ema +  +( +  +period +  +) + ! +; +! " +return +  +ema +  +. +  +Update +  +( +  +source +  +) + ! +; +! " +} +  +public + + +void +  +Reset +  +( +  +) +  +{ +  +_state +  += +  +EmaState +  +. +  +New +  +( +  +) +  +; +  +_p_state +  += +  +_state +  +; +  +_lastValidValue +  += +  +$num +  +; +  +Value +  += +  +default +  +; +  +} +  +}  \ No newline at end of file diff --git a/.sonarqube/out/1/output-cs/token-type.pb b/.sonarqube/out/1/output-cs/token-type.pb new file mode 100644 index 00000000..7afd824d --- /dev/null +++ b/.sonarqube/out/1/output-cs/token-type.pb @@ -0,0 +1,1156 @@ + +4/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.cs +  +  + < + W + : +  +       + +     H          H  ^    3          <    o  3          B    >  S    A !! ? ""  ""  "" $ ""0 8 +6/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs +  +  +  + H + I + P +    + +  +                                                                          @          3         !!  !!  ##  $$ $ %%  && Y '' N (( ` )) ] ** q ++ + ++  ,,  ,, ! --  --  ..  ..  //  //% ) 00  00  22 # 33 # 55 " 55# ) 558 ; 55< B 77  << 8 ==  ==, 4 ==A B @@ Z AA  AA % AA( + AA. 2 DD  EE  HH  II O JJ  KK  KK ! LL  LL  NN + PP  QQ  TT  TT  UU  UU  VV  VV  VV # VV& * WW  WW  WW ! YY  ZZ  \\  \\  __  `` : aa L bb  cc  cc ! dd + dd  dd  dd  ff : hh + jj  kk  mm  nn  nn( , oo  oo  oo7 ; qq  rr  ss  ss  ss3 6 ssM Q tt  tt  tt2 5 ttL P vv  vv " ww ! ||  ~~ 2   +  +( , +  +  +7 ; +  +  +  + ! +  +  +  + " +  +  + . +  +  + ! + + +  +  +" & + " +  +  +  + a +  +  + ! + + +  +  +' + +7 ? + + +  +  +  + ' +( @ +  +  + # + - +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 2 +  + % +( + +. 2 +  +  + ! +  + " +  +  +  +  +  +  +  +  +* . +  +  +  +  +  +  +, / +9 = +  +, / +9 = +  +! % + > +, O +  + , +  +  +:/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.cs +  +  +  +  + 4 + a +  F + + + 7 +   +                                      7  ?    7  +      +        ' ( K  +              +   , .   . B   L M ##  &&  '' ( (( = )) Y **  ++  ++  ++  ++* 0 --  --  --  --! ' ..  ..  ..  .. , 00  11  11  11  22  22  22 . 22/ B 44  66  77  77  << + <<  ==  ==  == * ==+ S ?? A BB  BB  BB # DD  DD  DD  FF  HH  HH# & II  II ! JJ  JJ  JJ ) JJ* , JJ, G JJL M JJN j JJx y LL  NN K OO  OO ( OO: ; OOE Q OOS ^ OOq  +OO  QQ % RR  RR $ RR1 2 RR< G SS  SS $ SS1 2 SS< G TT  TT # TT0 1 TT; F UU  UU % UU2 3 UU= H VV  VV & VV3 4 VV> I XXM Q ZZ  ZZ  ZZ! % ZZ* , ZZ- < ZZ= ? ZZ@ Q \\  \\  \\ ) \\* , \\, E \\J K \\L N \\T U ``  cc  dd : ee H ff  gg  gg ! hh + hh  hh  hh  jj + jj  ll  mm  mm  pp + rr " ss  uu H vv  ww  || ! ~~  + Q + 8 +  +  + . +  +  + ! + + +  +  +" & +  +  +  + @ + < +  + + +  +  +' + +7 ? + + +  +  +  + ' +( @ +  +  + # +  +  +  +  +  +  +  +  + ) +  +  +  +  +  +  + I +  +  +  +. / +1 G +  +' + +  +  + - +  +( ) +  +  ++ / + 4 +  +  +;/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs +  +  +  + 8 + - +      + + +   + +   + +   + +   + + *  + ++ 1            +            +        8    +   " % , 8    !  +      # ""  "" ! ## + ##  ##  ##! ' ))  )) ! ** + **  **  ** # **$ * **+ 1 ,,  ,, ! -- + --  --  -- # --$ , --- 3 --; > --H T //  // ! 00 + 00  00  00) + 00+ , 008 K 00L N 00U W 00X Y 00Y Z 22  22 ! 33 + 33  33  55 + 55  55  55 & 554 6 557 = 66 + 66  66  66) 1 77 + 77  77  77  77# ) 770 6 88 + 88  88  88  88# ) 880 6 +=/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs +  +  +  +  +  + Y +  \ + + + < +   +              $   % +  #  d                "  +      ! ' -  K  X  +  +        +                   !! E ""  ## + ##  ##  %%  %%  %%  &&  &&  &&  ))  ** G ++  ,, + ,,  ,,  ,,  ,,$ ( ,,) / 22 + 22  44  44 % 55  88 + 88  88  88  ::  :: % ;;  ;;  >> + >>  @@  @@ % AA  AA  AA ! AA& ' AA. / AA4 ; DD + DD  FF  FF % GG  GG  GG" # GG' - JJ + JJ  LL  LL % MM  MM  MM" # MM' ( PP  QQ R RR  SS + SS  SS  UU  UU % VV  VV ! YY  ZZ = [[  \\ + \\  \\  ^^  ^^ % __  __ ! bb  bb ! cc + cc  cc  cc " cc* . ee + ee! " jj  ll  mm  mm% & tt ? uu  uu ! vv + vv  vv  vv " vv8 < xx  xx ! yy + yy  yy  yy % yy- 1 yy: > yyG J yyK Q {{  {{ ! || + ||  ||  ||# ) ||1 5 ||> B ||K N ||O U ~~ + ~~  ~~  ~~ & +  +  +  +  +  +  +  +) - +  +* A + ! + + +  +  +  +  +  +  +  +  + # +  + " +C/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs +  +  +  +  +  + _ +  b + + + R +   +              '   ( ,  #         ' *        " ) ,        " ) ,        " ) ,        " ) ,        " ) ,  +      ! ' ,  +        5  +      +      +      +      +         !! + !!  "" + ""  ## + ##  $$ + $$  %% + %%  '' + ''  )) P **  **  **, 2 ++  ++  ++, 2 ,,  ,,  ,,+ 0 --  --  --- 4 ..  ..  ... 6 11  22 E 33  44 + 44  44  66  66  66  77  77  77  88  88  88  99  99  99  ::  ::  ::  ;;  ;;  ;;  == P >>  >>  >>, 2 ??  ??  ??, 2 @@  @@  @@+ 0 AA  AA  AA- 4 BB  BB  BB. 6 EE + EE  GG  GG % HH  KK + KK  KK  KK  MM  MM % NN  NN  QQ + QQ  SS  SS % TT  TT  TT ! TT& ' TT. / TT6 7 TT> ? TTF G TTN O TTT [ WW + WW  WW & WW' 8 WWN Q WW` a WWh i WWm n XX + XX  XX ( XX) : XXP S XXb c XXj k XXo u YY + YY  YY ( YY) : YYP S YYb c YYj k YYo u ZZ + ZZ  ZZ ' ZZ( 9 ZZO R ZZa b ZZi j ZZn t [[ + [[  [[ ) [[* ; [[Q T [[c d [[k l [[p v \\ + \\  \\ * \\+ < \\R U \\d e \\l m \\q w ^^  ^^ ! __ + __  __  __ " __+ / aa + aa! " jj  ll  ll% & xx  xx ! yy + yy  yy  yy % yy, 2 yy9 ? yyE K yyS Y yyb f yyo s zz  zz  ||  || ! }} + }}  }}  }}# ) }}0 6 }}= C }}I O }}W ] }}f j }}s w ~~  ~~  + + +  +  + $ +) 4 +5 ; +@ K +L R +W b +c i +n y z      +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + + +  +  + ' +( N + + +  +  +  +  +  +  +  +  + ! +  +  +7/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs +  +  +  + 3 + 0 +      + + +   + +   + +   + +   + + (  + +) -    +            +          +      +      +      +      +   " % , 8  <  +    ! " 3 I L P S  +    ! " 3 I L P S  +    ! " 3 I L P S  +    ! " 3 I L P S  +    ! " 3 I L P S  F  +    # $ 5 K N a d  +    # $ 5 K N c f  +    $ % 6 L O i l    +        $   % 6   L O   j m !! + !!  !! % !!& 7 !!M P !!r v "" + ""  "" % ""& 7 ""M P ""s w $$  $$ ! %% + %%  %%  %% ! %%( . %%5 ; %%A G %%O U //  // ! 00 + 00  00  00 % 00, 2 009 ? 00E K 00S Y ::  :: ! ;; + ;;  ;;  ;; # ;;$ * ;;+ / ==  == ! >> + >>  >>  >> # >>$ * >>+ / >>8 ; @@  @@ ! AA + AA  AA  AA # AA$ , AA- 1 AA: = AAH T CC  CC ! DD + DD  DD  DD) + DD+ , DD8 K DDL P DDV X DDY ] DDc e DDf j DDo q DDr v DD}  +DD  +DD  +DD  +DD  FF  FF ! GG + GG  GG  OO + OO  OO  OO & OO4 6 OO7 ; PP + PP  PP  PP) 1 QQ + QQ  QQ  QQ  QQ# ' QQ. 2 RR + RR  RR  RR  RR# ' RR. 2; +A/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs +  +  +  +  + M + Y +   + + +   + +   + +   + + "    6        !       1 = > D                      !       % 1 2 8             !!  !! ! ""  ""  ""  ""% 1 ""2 8 $$  $$  %%  %%  %%  ''  **  --  -- ! ..  ..  ..  ..% 1 ..2 8 00  00  11  11  11  33  66  99  99 ! ::  ::  ::  ::* 6 ::7 = ::E K <<  <<  ==  ==  ==  ??  BB  BB+ , EE  EE ! FF  FF  FF  FF! ' FF: F FFG M HH  HH ! II  II ! JJ  JJ  JJ  LL  MM  OO  RR  SS H TT 6 UU V VV 8 WW  XX  XX ! YY + YY  YY  YY) - YY. : YY; A [[ + [[  [[! & ]] + ]]  ]]; A ]]B H __  __ # __$ * ``  ``  aa  aa  aa % aa& , aa. 4 cc  ee  ee  ee! ' ee( . gg \ hh  hh % ii  ii% + ii, 0 jj  jj  ll U mm  mm # nn  nn % oo  oo% + oo, 0 pp  pp  ss 3 tt  vv  vv  ww  ww  zz  zz  }}  +  + ? + > + 5 +  +  + ! + + +  +  +! % +& 2 +3 9 + + +  +! $ + * + + +& , +- 3 + + +  +; A +B H +  +  +! ' +( . +  + # +$ * +  +  + ' +  +  +  +! ' +( . + ' +  +  +  +  +  + ) +  +  +  +  + I + > + 5 +  +  + ! + + +  +  +! % +& 2 +3 9 + + +  +! ' + + +  + $ +* + + * + + +& , +- 3 + + +  +; A +B H +  + # +$ * +  +  + # +$ * +7 8 +  + ' +  +  +  +! ' +( . +  + ) +  +# $ +  +  +  +  + ) +  +  +  +  +  + I + > + 5 +  +  + ! + + +  +  +! % +& 2 +3 9 + + +  +! ' + + +  + $ +* + + * + + +& , +- 3 + + +  +; A +B H +  + # +$ * +  +  + # +$ * +7 8 +  + ' +  +  +  +! ' +( . +  + ) +  +# $ +  +  +  +  + ) +  +  +  +  +  + C + > + 5 +  +  + ! + + +  +  +% ) +* 6 +7 = + + +  +! ' + N +  +  + Z + > + N +  +  + ! + + +  +  +& * ++ 7 +8 > +F L +U Y + + +  + # +$ * + * + + +& , +- 3 +  + ` + + +  +! ' +( . + + +  +; A +B H +  +  + $ +% + +  +  +# ) +* 0 +  + # +$ * +  +  + ' +  +  +  +! ' +( . +  + ' +  +  +  +  +  + ) +  +  +  ++ , +  +  + ? + N +  +  + ! + + +  +  +$ ( +) 5 +6 < +D J +S W + ` +  +  +  + I + C + < +  +  + ! + + +  +  + % +6 : +; G +H N + + +  +" ( +. 4 + + +  + $ ++ , +4 5 + * + + +& , +. 4 +: @ + + +  +; A +B H +  + # +$ * +  +  + # +$ * +7 8 +  +  + ' +  +  +  +! ' +( . +  +  + * +  + ! +  + ! +  +  +  +  +  + ) +  +  +  +  + ) +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.cs +  +  +  +  +  + B +  a + + + C +       +                                                      +    +     " ) * -    5    6    +         ##  ##  $$  $$  %%  %%  &&  &&  ''  ''  ((  ((  **  **  **  ,, ' ,,K L --  --- . 22  33 4 44  55 4 66 + 66  66  99  99  ::  ::  ;;  ;;  <<  <<  ==  ==  >>  >>  @@  @@  @@  BB  BB  BB. / CC  CC  CC 5  CCQ  II  II  II  KK  LL  OO  PP V QQ  RR  RR ! SS  SS  SS! ' UU + UU  XX  ZZ  ]]  ^^  __  `` + ``  bb  bb  bb  ff  gg  jj  kk * ll U mm M nn  oo / pp e qq : rr  rr ! ss + ss  ss ! ss) - ss6 : uu + ww  xx  zz  ||  }}  + S +  +  +  +  + $ +  +  + + +  +  +  + % +& , +  +  + & +  +  +! ' +( . +0 5 +  +  +  + " +# ) +* 0 +  +  +! ' +( . +  +  + % +& , +  + / + + + # + / + & +  + O + e + R +  + & + _ + V +  + & +  +% 8 +% = +  +  +  +  +  +$ ' +( . + . +  +  +  +  +  +  +  + " +) , +  + " +  +  + . +  + 1 + . + + +  + & +  +  +  + & +  +  +  +  + " +  +  +  + $ +  +  +  +  +  +! % +  +  +! ' +  +  +  +  +  +  + $ +  +  + " +  +  + # +$ * +, 1 +  +  +  +  +  + W +  +  + % +& , +  +  +  +  +  +  +# & +' - +. 4 +  +! $ +% + +, 2 +  + " +# ) +* 0 +  + S +  +$ * + T +  +$ * +  +) < +) A + / +  +  +! " + * + * +  +  +  +  + " + " +  +! & +- 0 + " + " + + +  +  +  + ! +" ) +  + * +C D +  + * +C D +  + " +  +  + F +  + 1 + 6 + . + + +  +  +& - +6 9 +  +  + % +  +9/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs +  +  +  +       +          +              + + +  + +   + +   + +     +           $ '   2 3   9 <   F K +  + V + > +  +  + V + ] +  +                 &      (        *     !!  "" M ## + ##  ##  %% + %%  &&  &&  && ' &&( G ((  ((! " ++  ,, : --  .. E // + //  //  11 + 11  11" # 22  22  22 ' 22( G 77  88  99  :: + ::  ::  :: & ::' * <<  == E >>  ?? + ??  AA  BB V CC  DD  DD ! EE  EE  EE! ' GG + GG  JJ  LL  OO  PP $ QQ E RR  SS  SS ! TT  TT  TT  TT# ) TT1 7 TT? B TTC K XX  YY + [[  \\% * ]]" % __  dd  gg  hh ) ii  jj / kk e ll 0 mm  mm ! nn + nn  nn  nn' + nn4 8 pp + tt  yy S zz  {{# & ||  ||  }}  +  + + +  + 1 + % + + +  + ! +  +  +  +  +  +  +  +  +  +  +  +  + & +  + & +  +  + + +  +  +  +  + W +  +' * + 3 + ; +  +  +' ( +7 8 +  +  +  +  + B +  + 1 + / + % + + +  +  +$ + +4 7 +  +  +  +  +  +  +  + + +  +  +  +  \ No newline at end of file diff --git a/.sonarqube/out/2/Issues.json b/.sonarqube/out/2/Issues.json new file mode 100644 index 00000000..b07a2f18 --- /dev/null +++ b/.sonarqube/out/2/Issues.json @@ -0,0 +1,207 @@ +{ + "$schema": "http://json.schemastore.org/sarif-1.0.0", + "version": "1.0.0", + "runs": [ + { + "tool": { + "name": "Microsoft (R) Visual C# Compiler", + "version": "5.0.0.0", + "fileVersion": "5.0.0-2.25523.111 (b0f34d51)", + "semanticVersion": "5.0.0", + "language": "en-US" + }, + "results": [ + { + "ruleId": "CA1816", + "level": "note", + "message": "Change EmaValidationTests.Dispose() to call GC.SuppressFinalize(object). This will prevent derived types that introduce a finalizer from needing to re-implement 'IDisposable' to call it.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs", + "region": { + "startLine": 48, + "startColumn": 17, + "endLine": 48, + "endColumn": 24 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1822", + "level": "note", + "message": "Member 'VerifyData' does not access instance data and can be marked as static", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs", + "region": { + "startLine": 150, + "startColumn": 18, + "endLine": 150, + "endColumn": 28 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1822", + "level": "note", + "message": "Member 'VerifyData' does not access instance data and can be marked as static", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs", + "region": { + "startLine": 132, + "startColumn": 18, + "endLine": 132, + "endColumn": 28 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "CA1822", + "level": "note", + "message": "Member 'VerifyData_Talib' does not access instance data and can be marked as static", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs", + "region": { + "startLine": 171, + "startColumn": 18, + "endLine": 171, + "endColumn": 34 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + }, + { + "ruleId": "xUnit2024", + "level": "note", + "message": "Do not use Assert.True to test equality against null, numeric, string, or enum literals. Use Assert.Equal instead.", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Tests.cs", + "region": { + "startLine": 252, + "startColumn": 9, + "endLine": 252, + "endColumn": 39 + } + } + } + ], + "properties": { + "warningLevel": 1, + "customProperties": { + "LiteralValue": "False", + "MethodName": "True", + "Replacement": "Equal" + } + } + }, + { + "ruleId": "CA1859", + "level": "note", + "message": "Change type of variable 'feed' from 'QuanTAlib.IFeed' to 'QuanTAlib.CsvFeed' for improved performance", + "locations": [ + { + "resultFile": { + "uri": "file:///Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Tests.cs", + "region": { + "startLine": 201, + "startColumn": 15, + "endLine": 201, + "endColumn": 19 + } + } + } + ], + "properties": { + "warningLevel": 1 + } + } + ], + "rules": { + "CA1816": { + "id": "CA1816", + "shortDescription": "Dispose methods should call SuppressFinalize", + "fullDescription": "A method that is an implementation of Dispose does not call GC.SuppressFinalize; or a method that is not an implementation of Dispose calls GC.SuppressFinalize; or a method calls GC.SuppressFinalize and passes something other than this (Me in Visual Basic).", + "defaultLevel": "note", + "helpUri": "https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1816", + "properties": { + "category": "Usage", + "isEnabledByDefault": true, + "tags": [ + "PortedFromFxCop", + "Telemetry", + "EnabledRuleInAggressiveMode" + ] + } + }, + "CA1822": { + "id": "CA1822", + "shortDescription": "Mark members as static", + "fullDescription": "Members that do not access instance data or call instance methods can be marked as static. After you mark the methods as static, the compiler will emit nonvirtual call sites to these members. This can give you a measurable performance gain for performance-sensitive code.", + "defaultLevel": "note", + "helpUri": "https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1822", + "properties": { + "category": "Performance", + "isEnabledByDefault": true, + "tags": [ + "PortedFromFxCop", + "Telemetry", + "EnabledRuleInAggressiveMode" + ] + } + }, + "CA1859": { + "id": "CA1859", + "shortDescription": "Use concrete types when possible for improved performance", + "fullDescription": "Using concrete types avoids virtual or interface call overhead and enables inlining.", + "defaultLevel": "note", + "helpUri": "https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1859", + "properties": { + "category": "Performance", + "isEnabledByDefault": true, + "tags": [ + "Telemetry", + "EnabledRuleInAggressiveMode" + ] + } + }, + "xUnit2024": { + "id": "xUnit2024", + "shortDescription": "Do not use boolean asserts for simple equality tests", + "defaultLevel": "note", + "helpUri": "https://xunit.net/xunit.analyzers/rules/xUnit2024", + "properties": { + "category": "Assertions", + "isEnabledByDefault": true + } + } + } + } + ] +} \ No newline at end of file diff --git a/.sonarqube/out/2/ProjectInfo.xml b/.sonarqube/out/2/ProjectInfo.xml new file mode 100644 index 00000000..a6d6bb0b --- /dev/null +++ b/.sonarqube/out/2/ProjectInfo.xml @@ -0,0 +1,20 @@ + + + QuanTAlib.Tests + C# + Test + 953f0406-dd9b-406e-993d-6d988d5f5423 + /Users/mihakralj/Github/QuanTAlib/lib/QuanTAlib.Tests.csproj + false + + + + + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2/Issues.json + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2 + /Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2/Telemetry.json + + Debug + AnyCPU + net10.0 + \ No newline at end of file diff --git a/.sonarqube/out/2/Telemetry.json b/.sonarqube/out/2/Telemetry.json new file mode 100644 index 00000000..83e13cb1 --- /dev/null +++ b/.sonarqube/out/2/Telemetry.json @@ -0,0 +1 @@ +{"dotnetenterprise.s4net.build.target_framework_moniker":".NETCoreApp,Version=v10.0"} diff --git a/.sonarqube/out/2/output-cs/file-metadata.pb b/.sonarqube/out/2/output-cs/file-metadata.pb new file mode 100644 index 00000000..0087286c --- /dev/null +++ b/.sonarqube/out/2/output-cs/file-metadata.pb @@ -0,0 +1,15 @@ +h +]/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/Debug/net10.0/QuanTAlib.Tests.AssemblyInfo.csutf-8x +m/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.csutf-8j +_/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/Debug/net10.0/QuanTAlib.Tests.GlobalUsings.g.csutf-8y +n/Users/mihakralj/.nuget/packages/microsoft.net.test.sdk/17.14.1/build/net8.0/Microsoft.NET.Test.Sdk.Program.csutf-8E +> CC  +<< >>  +@@ AA &BB  +AA CC # + +GG + +II NN  +JJ NN $PP  +KK NN& / +LL NN1 9 +NN PP " + +TT - +VV ZZ  +WW ZZ" + +XX ZZ- 5( +ZZ ]] "__ __) /2 +]] ]] ]]* +__ __0 1 + +dd & +ff jj  +gg jj- 5oo ( +hh jj" +( +jj mm "pp $pp/ 52 +mm mm mm* +pp% &pp6 7 +oo qq % +pp qq' 1 + +vv + +xx || 4 +yy ||" +~~   + * +zz ||- 5! ) +% -* +|| ~~ &1 7 +5 ; + + ; + +  +  + +  +& / + +  +! *0 + +  + & +" ( +3 9< + +  +  +. / +) * +: ; + + ! + ) + +  ++ 5 + + ' + +  +  + +  +# , + +  +. 6$ + +  + " + 0 + +  +  +* + +  + +  +  +- 0 +7 : +  +, / +6 9 +  +  +  +  +  + + 0$ + +  +  + $ + +  +  + " + +  + $ + +  +% 1$ + +  +  + $ + +  +  + !$ + +  +& ) +  + + 5< + +  +  +  +  +  + + $ + +  +  +% ) + +  +" + + +  +- 50 + +  +  +  + & + +  +  + + 6 + +  + ! + +  + #$ + +  +- 6 +/ 8$ + +  +8 @ +: B$ + +  + # +0 9$ + +  + % +2 < + +  +3 ; + +  + & + + 3$ + +  +  +  + +  +  + +  +! % + + *$ + +  +  + $ + +  +  +! " + +  +  + +  +  +@/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Tests.cs + +  + $   *%% *77 *GG *YY *tt * + * + * + * + * +! , + * + * + * + + + + / +       + + G + + < + + = + +## /( +%% (( ,, 00  +(( )) -- $ +,, -- 11 $ +00 11  + +55 6 +77 :: ?? < +99 ::! &;; >> ??! &@@  +:: << AA $ +?? AA  + +EE 4( +GG JJ MM RR ( +JJ NN OO SS $ +MM NN $OO! % +RR SS  + +WW 0 +YY bb ll ( +\\ bb hh nn F +]] `` bb$ )gg kk ll% *mm  +^^ `` cc  +ll nn# + + +rr 0 +tt yy  +vv yy$ - +ww yy/ 7 +yy {{ ||  + + :$ + +  +/ 3 +/ 3$ + +  += F +> G$ + +  +H P +I Q + + -H + +  +  +  +  +  + $ + +  +# , + ) + +  + +  +  + + 1 + +  +  + +  +  +  + # +  + # +  + " +  + " +  +  + + 4 + +  + T + +  +  +  +  +' + +! % +W [$ + +  +" ' +# ($ + +  +  +) *l + +  +  +( ) +  +, - +  +& ' +K L +\ ] + + /$ + +  +  + $ + +  +  + $ + +  +  + + 5H + +  +  +  +  +  + $ + +  +  + $ + +  + *0 + +  +  +  + $ + +  + * + +  +  + + 4 + +  +  + +  +# , + +  +  + + 6 + +  +  + +  +# , + +  +  + +A/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Tests.cs + +  + + + + D +   $ (  +   * /  +  % & + + D + $ , ! + . 3  + ) / & + +"" 5 +$$ %%$ &''  +%% '' #((+ 1 + +,, - +.. //$ & +// 11 "( +11 33* 044( .55& , + +99 < +;; ==  +== ?? " + +CC H +EE FF$ ,JJ ! +FF HH $ +HH JJ# )KK+ 1 + +OO 8 +QQ TT  +RR TT# & + +XX < +ZZ ]]  +[[ ]]$ ' + +aa = +cc ff  +dd ff$ ' + +jj 8 +ll oo  +mm oo# & + +ss < +uu xx  +vv xx# ( + +|| 3 +~~  +  + + > + +  +  + +  +, / + + H + +  +  + +  +/ 2 + + ; + +  +  + +  + " + + A + +  +  + +  + # + + > + +  +  + +  + # + + B + +  +  + +  + " +C/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Tests.cs + + + +  + +   : +   + + ? +   + + ; + ""% * +   "", 22 +"" $$ "%% $&& $'' $ + +++ , +-- //! ' + +33 ! +55 77' - + +;; /( +== @@ BB CC % +>> @@  + +GG 82 +II LL MM OO PP % +JJ LL MM  + +TT 5< +VV ZZ [[ ]] "^^ %__ % +WW XX ZZ  +XX [[  + +cc *( +ee hh jj kk % +ff hh  + +oo 52 +qq uu vv xx yy % +rr uu  +ss vv  + +}} .: +  +  +  +# ) + &$ + +  +  +  + + 7< + +  +  + " + $ + $ + +  +  + + 70 + +  +  +  + % + +  +  + + 3 + +  + $ + +  +  + " + + 80 + +  +  +  + $ + +  + " + # + + 4 + +  +% + + + =0 + +  +  +  + % + + 4 + +  + " + + ;0 + +  +  +  + $ + + 6< + +  +  +  +  +* 0< + +! ' + " + $ + $ + $ + + 4< + +  +  +  +  +' -< + + $ + ! + # + # + # + + 0x + +  +  +  +  + $ + % + $ + % + $ + % + + 3< + +  +  +  +  + < + +  +  + " + " + " + + 20 + +  +  +  +% + + + " +! +$ + +  +  +  + + +$ + +  +  + < + +  + ( + # + & + ' + +  ++ - + + .0 + +  +  +  + 0 + +  + ( + # + ' + +  ++ - + + -H + +  +  +  +  +  + " +I/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Tests.cs + + + +  + +   : +   + + ? +   + + + + !! & + +%% ! +'' ))% + + +-- -( +// 22 44 55 & +00 22  + +99 6< +;; @@ AA CC DD &EE & +<< == $>> $ +== @@  +>> AA  + +II 6 +KK NN PP  +LL NN  + +TT ,( +VV YY [[ \\ % +WW YY \\  + +`` ,( +bb ee gg hh# ) +cc ee hh  + +ll 82 +nn vv xx "yy #zz # +oo vv  +pp vv # +qq vv% * +rr vv, 0 +ss vv2 8 +tt vv: A + +~~ ( + +  +  +  +  +  +  +  + & + & + % + & +! ' + +  +  + + * + +  +  +  +% + +  +% + +  +$ * +  +& , +  +' - + +  +  + + .H + +  +! ' +! ' + & +" ( +# ) + + 3 + +  + 0 + +  +  + " + " + + 60 + +  +  +  + $ + +  + " + # + + 4 + +  + " + + ;0 + +  +  +  + $ + + 3 + +  +% + + + ;0 + +  +  +  + % + + 3 + +  +% + + + ;0 + +  +  +  + % + + 2 + +  +% + + + 90 + +  +  +  + % + + 4 + +  +% + + + =0 + +  +  +  + % + + 5 + +  +% + + + ?0 + +  +  +  + & + + -x + +  +  +  +  + $ + % + $ + % + $ + % + + -H + +  +  +  +  +  + " + + 1< + +  +  +  +  + < + +  +  + # + # + # + + 20 + +  +  +  +% + + + " +! +$ + +  +  +  + + +$ + +  +  + < + +  +! ) + # + & + ' + +  +, / + +  +  + + .0 + +  +  +  + < + +  +! ) + # + ' + ' + +  +, / + + 0T + +  +  +  +  +/ 5 +  +/ 5 + + 3` + +  +  +  +  + " + $ + $ + $ +=/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Tests.cs + +  + + + + 7 +    #  +   % )  + + /  + 1 4  + 6 ;  + = C F +  " " " ! #! $ + + D +   '' ')) ! +!! '') -**  +"" ''/ 3++  +## ''5 8,,  +$$ '': ?--  +%% ''A G.. F +'' ))) ,** "++ ",, !-- #..! $ + +22 5 +44 55 '77 ! +55 77# &88+ . + +<< 9 +>> ?? #CC  +?? AA  +AA CC DD ! + +HH 9 +JJ KK #OO  +KK MM  +MM OO PP ! + +TT 8 +VV WW #[[  +WW YY  +YY [[ \\  + +`` : +bb cc #gg  +cc ee  +ee gg hh ! + +ll 6 +nn oo #ss  +oo qq  +qq ss tt! " + +xx + +zz {{ # + + + + +  + # + + , + +  + # + + , + +  + # + + - + +  + # + + - + +  + # + + A + +  + # + +  + * + + I$ + +  + # +  + +  + $ + +  + ! + " + + H$ + +  + ' + ! + +  + !$ + +  +# ) ++ 1 + + 3 + +  + ' + +  + ` + +  +* 0 +( . +( . +( . +' - +( . +) / + + 4 + +  +  + +  +$ ( + + : + +  +  + +  +% ) + + : + +  +  + +  +% ) + + : + +  +  + +  +% ) + + 9 + +  +  + +  +% ) + + ; + +  +  + +  +% ) + + < + +  +  + +  +% ) + + 6 + +  +  + +  +$ ( + + < + +  +  + +  +$ ) + + 3 + +  +  + + < + +  +  + +  +- 1 + + F + +  +  + +  +0 4 + + 9 + +  +  + +  + $ + + ? + +  +  + +  +! % + + < + +  +  + +  +! % + + @ + +  +  + +  + $ +J/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs + +   d + %  "" !&&$ )'' %(( %)) $**! &++" 'F + " >>% *OO VV% *mm ss% *( +! /!! $$ AA ( + + 4 +' . FF dd  +  +0 6  +  Z +"" "" "") *&&5 6''+ ,((+ ,))) ***- .++/ 0 + +00  + +66  +88 :: & +== >>  +>> DD  +AA DD ' + +JJ  +LL RR & +OO PP% *YY6 ; +OO& 'OO+ , +PP YYD Jbb& , +UU VV  +VV bb $ +YY \\/ 6 +YYT \bb. 6 +__ bb8 @ + +hh  +jj oo & +mm ww" 'yy. 3 +mm& 'mm+ , +rr ss  +ss   +vv {{  +ww {{ # +xx {{% , +yy {{. 5|| ! +||  ' + +  0 + +$ + +  +  + #$ + +: A +$ + + # + +G M$ + +  +  + $ + +  + < + +  +  +& ' +$ % +$ % + +  +! '$ + +  +  +  + + DD 0 + +$ + +  +  + #$ + += D +$ + + $ + +J P$ + +  +  + $ + +  + < + +  +  +& ' +$ % +% & + +  +' -$ + +  +  +  + + !bb $ + +* 1 +  + # + +< C + #$ + +K S + ! +. 6$ + +Y a +  + % + +g m$ + +  +  + $ + +  +  + +  + $H + +  +  +& ' +$ % +  +  + +  +! '$ + +  +  +$ * + +  + " +E/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.Tests.cs + +  + +   < +   & - +   +    + + / + & , +  2 +      !!  + +%% E +'' ))= D + +-- I +// 11= D + +55 D +77 99= C + +== H +?? AA= C + +EE N +GG II= C + +MM 8 +OO PP& , +PP RR  +RR TT  + +XX /( +ZZ [[& -\\ ff ' +[[ dd $ +\\ hh * +\\( )\\5 6 +^^ aa "( +__ cc" &mm mm  +cc dd, 0hh5 9 +dd ii. 6jj- 5< +ff ff ff0 1hh+ ,ii7 8jj6 7 +hh ii &jj & + +rr ,* +tt uu& -vv  + # +uu  +  +vv  + & +vv( )vv5 64 +xx yy: =zz< ?}}  + # +yy   +! "" +zz  +  +$ % +{{  4 +}} }} }}! "! " + $ + +  ++ 1 +1 7$ + +  +* 2 +2 :H + +  +  +, - +' ( +3 4 +; <$ + +  + " + &< + +  +  +% & +. / +E F + + ,0 + +  ++ 2 +, 3 + ' + +  + % + +  + +< + +  +: = +< ? +  + 0 + +  +  +! " +/ 00 + +  +  +$ % +6 7 + +  + < + +  +  +! " +! " +  + +  +0 6 + +  + %H + +  +  +! " +1 2 +8 9 +0 1 + +  +3 7 + +  +4 =< + +  +  +0 1 +& ' +> ? + + 60 + +  +( / +4 ; + #< + +  +: = +< ? +  + #$ + +  +  +! "$ + +  +  +$ % + +  + < + +  +  +! " +! " + $ + +  +0 6 +, 2 + +  + %$ + +  + $ + ($ + +  +/ 8 +7 @T + +  +  +, - +% & +9 : +) * +A B< + +  +  +% & +3 4 +K L + + ! + +  +& -0 + +  +  +  +  + +  +  + + 3 + +  +& -0 + +  +  +  + & + +  + - + + 8 + +  +& -< + +  +  +  + ) + ) + +  + 0 + +  + 0 + + 9 + +  +& -T + +  +  +  +  +  +  +  + +  + ! + +  + ! + +  + ! + + + + +  +& - + +  + ` + +  +  +  +  +  +  +  +! "` + +  +  +( ) +( ) +( ) +( ) +( ) +$ %T + +  +  +  +  +  +  +  + +  +* 0 + +  +& - + + * + +  +& -< + +  +  +  +  +  + +  + ! + + -0 + +  +& - +  + ' + +  + $ + +  + * + +( ) +5 6 + +  + "0 + +  +" & +  + $ + +  +, 0 +5 9 + +  +. 6< + +  +  +0 1 ++ , +7 8 + +  + & + + 2 + +  +& -0 + +  +  +& / +& /$ + +  +  +  + + 5 + +  +& -0 + +  +  +, 5 +, 5 + +  +! " + +  +$ % + +  +* 0$ + +  +  + 4 +G/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Tests.cs + +  + +   8 +     + + 8 + , 0 +   + + 9 + , 0 +   + +"" F +$$ %%, 0 +%% &&  + +** F +,, --, 0 +-- ..  + +22 B +44 55, 0 +55 66  + +:: 7 +<< ==, 0 +== >>  + +BB D +DD EE, 0 +EE FF  + +JJ @ +LL MM, 0 +MM NN  + +SS - +UU VV  + +ZZ 4 +\\ ]], 0 +]] ^^  + +bb . +dd ee, 0 +ee ff  + +jj : +ll mm, 0 +mm nn  + +rr 4( +tt uu vv xx, 02 +uu uu uu) *vv vv  +xx zz # +yy zz  + +~~ . + +  +, 0 + +  +! % + + 3 + +  +, 0 + +  +! % + + 8 + +  +, 0 + +  +  + + , + +  +! % + + 4 + +  +, 0 + +  +  + + 2 + +  +, 0 + +  +  + + 7 + +  +, 0 + +  +  + + . + +  +, 0 + +  +! % + + 8 + +  +, 0 + +  +  + + 5 + +  +, 0 + +  +  + + , + +  +! % + + 4 + +  +, 0 + +  +  + + 2 + +  +, 0 + +  +  + + 7 + +  +, 0 + +  +  + + . + +  +, 0 + +  +! % + + 8 + +  +, 0 + +  +  + + 5 + +  +, 0 + +  +  + + 0 + +  +! % + + 6 + +  +, 0 + +  +  + + B + +  +, 0 + +  +  + + 2 + +  +, 0 + +  +! % + + ; + +  +, 0 + +  +! % + + 1 + +  +! % + + 7 + +  +, 0 + +  +  + + 9 + +  +, 0 + +  +  + + D + +  +, 0 + +  +  + +  + % + + > + +  +, 0 + +  +  + +  +, 0 + +  +  + + 3 + +  +, 0 + +  +! % + + 3 + +  +, 0 + +  +! % + + 8 + +  +, 0 + +  +! % + + 5 + +  +, 0 + +  + ! + + @ + +  +, 0 + +  +  + +  + # + + 1 + +  +, 0 + +  +  + +  +  + + 1 + +  +, 0 + +  +! % + + 3 + +  +  + +  +! $ + +  +! $ + + 9 + +  +, 0 + +  +  + +  +  + +  +  + + 5 + +  +, 0 + +  +  + +  +  + +  +  + + @ + +  +, 0 + +  +  + +  +  + +  +  + + 5 + +  +, 0 + +  +  + +  +! $ + +  +! $ + + ; + +  +, 0 + +  +  + +  +  + +  +  + + 8 + +  +, 0 + +  +  + +  +  + +  +  + + +$ + +  +  + < + +  +  +! " +/ 0 +2 3H + +  +  +  +  +  + % + +  +  + +  + $ + +  +  + $ + +  +  +  + +  +  + +  +  + + - + +  +  + +  +# , + +  +. 6 + +  + < + +  +  +  +  +  + +  +  + +  + $ + +  +  +  + +  +  + + 1 + +  +  + +  +$ - + +  +/ 7 + +  + l + +  +  +  +  +  +  + * + % + #0 + +  + + +  +$ & + +  +  + +  + $ + +  +  +  + +  +  + +  + +  + +  +  + +  +  + + . + +  +, 0H + +  +  +  +  +  +  + +  +  + +  +  + + $ + + > + +  +, 0 + +  +< @ + + ? + +  +, 0 + +  +; ? + + D + +  +, 0 + +  +; ? + + : + +  +< @ + + < + +  +, 0 + +  +4 8 + + : + +  +, 0 + +  +3 7 + + + + +  +3 7 + + 9 + +  +, 0 + +  +3 7 + + 7 + +  +, 0 + +  +4 8 + + 6 + +  +, 0 + +  +4 8 + + 9 + +  +, 0 + +  +3 7 + + 7 + +  +, 0 + +  +4 8 + + 6 + +  +, 0 + +  +4 8 + + F + +  +, 0 + +  +8 < + +  +> B + +  + % + + A + +  +, 0 + +  +8 < + +  +> B + + B + +  +, 0 + +  +5 9 + +  +  + +  +  + + @ + +  +, 0 + +  +5 9 + +  +  + +  +  + + ; + +  +, 0 + +  +5 9 + +  +  + +  +  +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Tests.cs + +  + + + + 5 +   + + 4 +   + + %( +!! ## %% ((# & +%% '' ((  + +,, /2 +.. 00 11 33 44  +11 77  +44 77 & + +;; 1< +== ?? @@ AA !CC DD  +AA GG $ +DD GG& 1 + +KK %Z +MM OO PP QQ SS UU XX YY ZZ% ( +QQ ZZ # + +^^ )2 +`` bb cc ee gg  + +kk 04 +mm pp }}   + , +|| }} " +  +  + + :$ + +  + $ + & + +  + $ + +  + " + +  + ! + +  +  + +  +$ + + + ?< + +  +  +  +  + $ + +  +  + 0 + +  +  + ! +% /$ + +  +  + !$ + +  +$ ' +. 1 + +  + $ + +  +  + $ + +  +" % +, / + +  +" * + + 2 + +  +! - + +  + # + +  + 0 + +  +  + # ++ 1$ + +  +  +! "$ + +  +  +! $H + +  +  + % + , + ) + )0 + +  +- 9 +4 @ +3 ?T + +  +  +4 5 +* + +A B +* + +@ A + + 5$ + +  +  +  + +  + " + + 0< + +  +  +  + # +  + + $ + +  +$ 2 + ) + + 5< + +  +  +  + # + # + +  +$ 5 + +  +$ 5 + + 6T + +  +  +  +  +  +  + 0 + +  +$ & + ! +O Q + +  +$ &0 + +  +$ & +  +4 6 + + ( + +  + ` + +  +  +  +  +  +  +  +! ' + +  + & + + .< + +  +  +  +  +  + +  + ! \ No newline at end of file diff --git a/.sonarqube/out/2/output-cs/telemetry.pb b/.sonarqube/out/2/output-cs/telemetry.pb new file mode 100644 index 00000000..a0859887 --- /dev/null +++ b/.sonarqube/out/2/output-cs/telemetry.pb @@ -0,0 +1 @@ +RR +QuanTAlib.Tests.TValueTestsEquals_Object_Null_ReturnsFalseI +QuanTAlib.Tests.TValueTests*GetHashCode_SameValues_ReturnsSameHashCodeS +QuanTAlib.Tests.TValueTests4GetHashCode_DifferentValues_ReturnsDifferentHashCodeF +QuanTAlib.Tests.TValueTests'EqualityOperator_SameValues_ReturnsTrueL +QuanTAlib.Tests.TValueTests-EqualityOperator_DifferentValues_ReturnsFalseI +QuanTAlib.Tests.TValueTests*InequalityOperator_SameValues_ReturnsFalseM +QuanTAlib.Tests.TValueTests.InequalityOperator_DifferentValues_ReturnsTrue +C/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Tests.csQuanTAlib.TestsF +QuanTAlib.Tests.TSeriesTests&Constructor_Default_CreatesEmptySeriesK +QuanTAlib.Tests.TSeriesTests+Constructor_WithCapacity_CreatesEmptySeriesG +QuanTAlib.Tests.TSeriesTests'Constructor_WithLists_WrapsExistingData8 +QuanTAlib.Tests.TSeriesTestsName_DefaultValue_IsData- +QuanTAlib.Tests.TSeriesTests Name_CanBeSet; +QuanTAlib.Tests.TSeriesTestsAdd_NewValue_IncreasesCountD +QuanTAlib.Tests.TSeriesTests$Add_UpdateValue_DoesNotIncreaseCountA +QuanTAlib.Tests.TSeriesTests!Add_MultipleValues_MaintainsOrder6 +QuanTAlib.Tests.TSeriesTestsAdd_TValue_AddsNewItemA +QuanTAlib.Tests.TSeriesTests!Add_TValueWithIsNew_AddsOrUpdates: +QuanTAlib.Tests.TSeriesTestsAdd_WithDateTime_AddsValueC +QuanTAlib.Tests.TSeriesTests#Add_EnumerableDoubles_AddsAllValuesC +QuanTAlib.Tests.TSeriesTests#Add_UpdateOnEmptySeries_AddsNewItem? +QuanTAlib.Tests.TSeriesTestsLast_EmptySeries_ReturnsDefaultD +QuanTAlib.Tests.TSeriesTests$Last_NonEmptySeries_ReturnsLastValue@ +QuanTAlib.Tests.TSeriesTests LastValue_EmptySeries_ReturnsNaNI +QuanTAlib.Tests.TSeriesTests)LastValue_NonEmptySeries_ReturnsLastValue@ +QuanTAlib.Tests.TSeriesTests LastTime_EmptySeries_ReturnsZeroG +QuanTAlib.Tests.TSeriesTests'LastTime_NonEmptySeries_ReturnsLastTimeB +QuanTAlib.Tests.TSeriesTests"Values_ReturnsReadOnlySpanOfValues@ +QuanTAlib.Tests.TSeriesTests Times_ReturnsReadOnlySpanOfTimes< +QuanTAlib.Tests.TSeriesTestsIndexer_ReturnsCorrectTValue? +QuanTAlib.Tests.TSeriesTestsGetEnumerator_IteratesAllValues> +QuanTAlib.Tests.TSeriesTestsGetEnumerator_NonGeneric_Works7 +QuanTAlib.Tests.TSeriesTestsPub_Event_IsRaisedOnAdd: +QuanTAlib.Tests.TSeriesTestsPub_Event_IsRaisedOnUpdate9 +QuanTAlib.Tests.TSeriesTestsCount_ReturnsCorrectValue +I/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Tests.csQuanTAlib.TestsI +QuanTAlib.Tests.TBarSeriesTests&Constructor_Default_CreatesEmptySeriesN +QuanTAlib.Tests.TBarSeriesTests+Constructor_WithCapacity_CreatesEmptySeries: +QuanTAlib.Tests.TBarSeriesTestsName_DefaultValue_IsBar0 +QuanTAlib.Tests.TBarSeriesTests Name_CanBeSet< +QuanTAlib.Tests.TBarSeriesTestsAdd_NewBar_IncreasesCountE +QuanTAlib.Tests.TBarSeriesTests"Add_UpdateBar_DoesNotIncreaseCountE +QuanTAlib.Tests.TBarSeriesTests"Add_UpdateOnEmptySeries_AddsNewBar; +QuanTAlib.Tests.TBarSeriesTestsAdd_WithLongTime_AddsBar; +QuanTAlib.Tests.TBarSeriesTestsAdd_WithDateTime_AddsBarG +QuanTAlib.Tests.TBarSeriesTests$Add_WithEnumerables_AddsMultipleBars7 +QuanTAlib.Tests.TBarSeriesTestsSubSeries_AreUpdated9 +QuanTAlib.Tests.TBarSeriesTestsSubSeries_Aliases_Work= +QuanTAlib.Tests.TBarSeriesTestsSubSeries_HaveCorrectNamesB +QuanTAlib.Tests.TBarSeriesTestsLast_EmptySeries_ReturnsDefaultE +QuanTAlib.Tests.TBarSeriesTests"Last_NonEmptySeries_ReturnsLastBarC +QuanTAlib.Tests.TBarSeriesTests LastTime_EmptySeries_ReturnsZeroJ +QuanTAlib.Tests.TBarSeriesTests'LastTime_NonEmptySeries_ReturnsLastTimeB +QuanTAlib.Tests.TBarSeriesTestsLastOpen_EmptySeries_ReturnsNaNJ +QuanTAlib.Tests.TBarSeriesTests'LastOpen_NonEmptySeries_ReturnsLastOpenB +QuanTAlib.Tests.TBarSeriesTestsLastHigh_EmptySeries_ReturnsNaNJ +QuanTAlib.Tests.TBarSeriesTests'LastHigh_NonEmptySeries_ReturnsLastHighA +QuanTAlib.Tests.TBarSeriesTestsLastLow_EmptySeries_ReturnsNaNH +QuanTAlib.Tests.TBarSeriesTests%LastLow_NonEmptySeries_ReturnsLastLowC +QuanTAlib.Tests.TBarSeriesTests LastClose_EmptySeries_ReturnsNaNL +QuanTAlib.Tests.TBarSeriesTests)LastClose_NonEmptySeries_ReturnsLastCloseD +QuanTAlib.Tests.TBarSeriesTests!LastVolume_EmptySeries_ReturnsNaNN +QuanTAlib.Tests.TBarSeriesTests+LastVolume_NonEmptySeries_ReturnsLastVolume< +QuanTAlib.Tests.TBarSeriesTestsIndexer_ReturnsCorrectBar< +QuanTAlib.Tests.TBarSeriesTestsCount_ReturnsCorrectValue@ +QuanTAlib.Tests.TBarSeriesTestsGetEnumerator_IteratesAllBarsA +QuanTAlib.Tests.TBarSeriesTestsGetEnumerator_NonGeneric_Works: +QuanTAlib.Tests.TBarSeriesTestsPub_Event_IsRaisedOnAdd= +QuanTAlib.Tests.TBarSeriesTestsPub_Event_IsRaisedOnUpdate? +QuanTAlib.Tests.TBarSeriesTestsSubSeries_ShareSameTimeArrayB +QuanTAlib.Tests.TBarSeriesTestsAdd_MultipleBars_MaintainsOrder +=/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Tests.csQuanTAlib.Tests@ +QuanTAlib.Tests.TBarTests#Constructor_SetsPropertiesCorrectlyM +QuanTAlib.Tests.TBarTests0Constructor_WithDateTime_SetsPropertiesCorrectly> +QuanTAlib.Tests.TBarTests!AsDateTime_ReturnsCorrectDateTimeB +QuanTAlib.Tests.TBarTests%O_Property_ReturnsTValueWithOpenPriceB +QuanTAlib.Tests.TBarTests%H_Property_ReturnsTValueWithHighPriceA +QuanTAlib.Tests.TBarTests$L_Property_ReturnsTValueWithLowPriceC +QuanTAlib.Tests.TBarTests&C_Property_ReturnsTValueWithClosePrice? +QuanTAlib.Tests.TBarTests"V_Property_ReturnsTValueWithVolume4 +QuanTAlib.Tests.TBarTestsHL2_CalculatesCorrectly4 +QuanTAlib.Tests.TBarTestsOC2_CalculatesCorrectly5 +QuanTAlib.Tests.TBarTestsOHL3_CalculatesCorrectly5 +QuanTAlib.Tests.TBarTestsHLC3_CalculatesCorrectly6 +QuanTAlib.Tests.TBarTestsOHLC4_CalculatesCorrectly6 +QuanTAlib.Tests.TBarTestsHLCC4_CalculatesCorrectlyJ +QuanTAlib.Tests.TBarTests-ImplicitConversion_ToDouble_ReturnsClosePriceR +QuanTAlib.Tests.TBarTests5ImplicitConversion_ToTValue_ReturnsClosePriceWithTimeQ +QuanTAlib.Tests.TBarTests4ImplicitConversion_ToDateTime_ReturnsCorrectDateTime< +QuanTAlib.Tests.TBarTestsToString_ReturnsFormattedString= +QuanTAlib.Tests.TBarTests Equals_TBar_SameBars_ReturnsTrueC +QuanTAlib.Tests.TBarTests&Equals_TBar_DifferentTime_ReturnsFalseC +QuanTAlib.Tests.TBarTests&Equals_TBar_DifferentOpen_ReturnsFalseC +QuanTAlib.Tests.TBarTests&Equals_TBar_DifferentHigh_ReturnsFalseB +QuanTAlib.Tests.TBarTests%Equals_TBar_DifferentLow_ReturnsFalseD +QuanTAlib.Tests.TBarTests'Equals_TBar_DifferentClose_ReturnsFalseE +QuanTAlib.Tests.TBarTests(Equals_TBar_DifferentVolume_ReturnsFalse? +QuanTAlib.Tests.TBarTests"Equals_Object_SameTBar_ReturnsTrueE +QuanTAlib.Tests.TBarTests(Equals_Object_DifferentType_ReturnsFalse< +QuanTAlib.Tests.TBarTestsEquals_Object_Null_ReturnsFalseE +QuanTAlib.Tests.TBarTests(GetHashCode_SameBars_ReturnsSameHashCodeO +QuanTAlib.Tests.TBarTests2GetHashCode_DifferentBars_ReturnsDifferentHashCodeB +QuanTAlib.Tests.TBarTests%EqualityOperator_SameBars_ReturnsTrueH +QuanTAlib.Tests.TBarTests+EqualityOperator_DifferentBars_ReturnsFalseE +QuanTAlib.Tests.TBarTests(InequalityOperator_SameBars_ReturnsFalseI +QuanTAlib.Tests.TBarTests,InequalityOperator_DifferentBars_ReturnsTrue +J/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.csQuanTAlib.Tests6 +"QuanTAlib.Tests.EmaValidationTestsValidate_Skender4 +"QuanTAlib.Tests.EmaValidationTestsValidate_Talib4 +"QuanTAlib.Tests.EmaValidationTestsValidate_Tulip +E/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.Tests.csQuanTAlib.TestsN +QuanTAlib.Tests.EmaVectorTests,Initialization_WithPeriods_SetsCorrectAlphasA +QuanTAlib.Tests.EmaVectorTestsInitialization_WithAlphas_WorksW +QuanTAlib.Tests.EmaVectorTests5Initialization_WithZeroPeriod_ThrowsArgumentException[ +QuanTAlib.Tests.EmaVectorTests9Initialization_WithNegativePeriod_ThrowsArgumentExceptionV +QuanTAlib.Tests.EmaVectorTests4Initialization_WithZeroAlpha_ThrowsArgumentExceptionZ +QuanTAlib.Tests.EmaVectorTests8Initialization_WithNegativeAlpha_ThrowsArgumentException` +QuanTAlib.Tests.EmaVectorTests>Initialization_WithAlphaGreaterThanOne_ThrowsArgumentExceptionJ +QuanTAlib.Tests.EmaVectorTests(Initialization_WithAlphaEqualToOne_WorksA +QuanTAlib.Tests.EmaVectorTestsCalc_Streaming_MatchesSingleEma> +QuanTAlib.Tests.EmaVectorTestsCalc_Series_MatchesSingleEma> +QuanTAlib.Tests.EmaVectorTestsCalc_Series_MatchesStreamingH +QuanTAlib.Tests.EmaVectorTests&Calculate_Static_MatchesInstanceMethod3 +QuanTAlib.Tests.EmaVectorTestsReset_ClearsStateE +QuanTAlib.Tests.EmaVectorTests#Update_NaN_Input_UsesLastValidValueJ +QuanTAlib.Tests.EmaVectorTests(Update_Infinity_Input_UsesLastValidValueK +QuanTAlib.Tests.EmaVectorTests)Update_MultipleNaN_ContinuesWithLastValid= +QuanTAlib.Tests.EmaVectorTestsCalculate_Series_HandlesNaN< +QuanTAlib.Tests.EmaVectorTestsReset_ClearsLastValidValue? +QuanTAlib.Tests.EmaVectorTestsNaN_Handling_MatchesSingleEmaD +QuanTAlib.Tests.EmaVectorTests"Values_Property_UpdatesAfterUpdateG +QuanTAlib.Tests.EmaVectorTests%Values_Property_UpdatesAfterCalculate1 +G/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Tests.csQuanTAlib.TestsO +#QuanTAlib.Tests.SimdExtensionsTests(ContainsNonFinite_EmptySpan_ReturnsFalseO +#QuanTAlib.Tests.SimdExtensionsTests(ContainsNonFinite_AllFinite_ReturnsFalseP +#QuanTAlib.Tests.SimdExtensionsTests)ContainsNonFinite_ContainsNaN_ReturnsTrue] +#QuanTAlib.Tests.SimdExtensionsTests6ContainsNonFinite_ContainsPositiveInfinity_ReturnsTrue] +#QuanTAlib.Tests.SimdExtensionsTests6ContainsNonFinite_ContainsNegativeInfinity_ReturnsTrueY +#QuanTAlib.Tests.SimdExtensionsTests2ContainsNonFinite_NonFiniteInRemainder_ReturnsTrueN +#QuanTAlib.Tests.SimdExtensionsTests'ContainsNonFinite_SingleNaN_ReturnsTrue[ +#QuanTAlib.Tests.SimdExtensionsTests4ContainsNonFinite_TwoElements_AllFinite_ReturnsFalseW +#QuanTAlib.Tests.SimdExtensionsTests0ContainsNonFinite_TwoElements_OneNaN_ReturnsTrueD +#QuanTAlib.Tests.SimdExtensionsTestsSumSIMD_EmptySpan_ReturnsZeroK +#QuanTAlib.Tests.SimdExtensionsTests$SumSIMD_SingleElement_ReturnsElementE +#QuanTAlib.Tests.SimdExtensionsTestsSumSIMD_TwoElements_ReturnsSumQ +#QuanTAlib.Tests.SimdExtensionsTests*SumSIMD_MultipleElements_ReturnsCorrectSumK +#QuanTAlib.Tests.SimdExtensionsTests$SumSIMD_LargeArray_ReturnsCorrectSumE +#QuanTAlib.Tests.SimdExtensionsTestsSumSIMD_ContainsNaN_ReturnsNaNJ +#QuanTAlib.Tests.SimdExtensionsTests#SumSIMD_ContainsInfinity_ReturnsNaNO +#QuanTAlib.Tests.SimdExtensionsTests(SumSIMD_NegativeValues_ReturnsCorrectSumC +#QuanTAlib.Tests.SimdExtensionsTestsMinSIMD_EmptySpan_ReturnsNaNK +#QuanTAlib.Tests.SimdExtensionsTests$MinSIMD_SingleElement_ReturnsElementI +#QuanTAlib.Tests.SimdExtensionsTests"MinSIMD_TwoElements_ReturnsMinimumN +#QuanTAlib.Tests.SimdExtensionsTests'MinSIMD_MultipleElements_ReturnsMinimumE +#QuanTAlib.Tests.SimdExtensionsTestsMinSIMD_ContainsNaN_ReturnsNaNO +#QuanTAlib.Tests.SimdExtensionsTests(MinSIMD_MinInRemainder_ReturnsCorrectMinL +#QuanTAlib.Tests.SimdExtensionsTests%MinSIMD_NegativeValues_ReturnsMinimumC +#QuanTAlib.Tests.SimdExtensionsTestsMaxSIMD_EmptySpan_ReturnsNaNK +#QuanTAlib.Tests.SimdExtensionsTests$MaxSIMD_SingleElement_ReturnsElementI +#QuanTAlib.Tests.SimdExtensionsTests"MaxSIMD_TwoElements_ReturnsMaximumN +#QuanTAlib.Tests.SimdExtensionsTests'MaxSIMD_MultipleElements_ReturnsMaximumE +#QuanTAlib.Tests.SimdExtensionsTestsMaxSIMD_ContainsNaN_ReturnsNaNO +#QuanTAlib.Tests.SimdExtensionsTests(MaxSIMD_MaxInRemainder_ReturnsCorrectMaxL +#QuanTAlib.Tests.SimdExtensionsTests%MaxSIMD_NegativeValues_ReturnsMaximumG +#QuanTAlib.Tests.SimdExtensionsTests AverageSIMD_EmptySpan_ReturnsNaNM +#QuanTAlib.Tests.SimdExtensionsTests&AverageSIMD_TwoElements_ReturnsAverageY +#QuanTAlib.Tests.SimdExtensionsTests2AverageSIMD_MultipleElements_ReturnsCorrectAverageI +#QuanTAlib.Tests.SimdExtensionsTests"AverageSIMD_ContainsNaN_ReturnsNaNR +#QuanTAlib.Tests.SimdExtensionsTests+VarianceSIMD_LessThanTwoElements_ReturnsNaNH +#QuanTAlib.Tests.SimdExtensionsTests!VarianceSIMD_EmptySpan_ReturnsNaNN +#QuanTAlib.Tests.SimdExtensionsTests'VarianceSIMD_TwoElements_ReturnsCorrectP +#QuanTAlib.Tests.SimdExtensionsTests)VarianceSIMD_ThreeElements_ReturnsCorrect[ +#QuanTAlib.Tests.SimdExtensionsTests4VarianceSIMD_MultipleElements_ReturnsCorrectVarianceU +#QuanTAlib.Tests.SimdExtensionsTests.VarianceSIMD_WithProvidedMean_UsesProvidedMeanJ +#QuanTAlib.Tests.SimdExtensionsTests#VarianceSIMD_ContainsNaN_ReturnsNaNJ +#QuanTAlib.Tests.SimdExtensionsTests#VarianceSIMD_WithNaNMean_ReturnsNaNO +#QuanTAlib.Tests.SimdExtensionsTests(VarianceSIMD_WithInfinityMean_ReturnsNaNL +#QuanTAlib.Tests.SimdExtensionsTests%StdDevSIMD_TwoElements_ReturnsCorrectW +#QuanTAlib.Tests.SimdExtensionsTests0StdDevSIMD_MultipleElements_ReturnsCorrectStdDevH +#QuanTAlib.Tests.SimdExtensionsTests!StdDevSIMD_WithProvidedMean_WorksH +#QuanTAlib.Tests.SimdExtensionsTests!StdDevSIMD_ContainsNaN_ReturnsNaNJ +#QuanTAlib.Tests.SimdExtensionsTests#MinMaxSIMD_EmptySpan_ReturnsBothNaNP +#QuanTAlib.Tests.SimdExtensionsTests)MinMaxSIMD_SingleElement_ReturnsSameValueL +#QuanTAlib.Tests.SimdExtensionsTests%MinMaxSIMD_TwoElements_ReturnsCorrectW +#QuanTAlib.Tests.SimdExtensionsTests0MinMaxSIMD_MultipleElements_ReturnsCorrectMinMaxL +#QuanTAlib.Tests.SimdExtensionsTests%MinMaxSIMD_ContainsNaN_ReturnsBothNaNR +#QuanTAlib.Tests.SimdExtensionsTests+MinMaxSIMD_MinMaxInRemainder_ReturnsCorrectO +#QuanTAlib.Tests.SimdExtensionsTests(MinMaxSIMD_NegativeValues_ReturnsCorrectB +#QuanTAlib.Tests.SimdExtensionsTestsSIMD_WorksWithTSeriesValuesD +#QuanTAlib.Tests.SimdExtensionsTestsSIMD_WorksWithTBarSeriesCloseH +#QuanTAlib.Tests.SimdExtensionsTests!SIMD_PerformanceTest_LargeDatasetE +#QuanTAlib.Tests.SimdExtensionsTestsSIMD_ScalarFallback_SmallArrayY +'QuanTAlib.Tests.SimdScalarFallbackTests.ContainsNonFiniteScalar_AllFinite_ReturnsFalseZ +'QuanTAlib.Tests.SimdScalarFallbackTests/ContainsNonFiniteScalar_ContainsNaN_ReturnsTrue_ +'QuanTAlib.Tests.SimdScalarFallbackTests4ContainsNonFiniteScalar_ContainsInfinity_ReturnsTrueU +'QuanTAlib.Tests.SimdScalarFallbackTests*ContainsNonFiniteScalar_Empty_ReturnsFalseW +'QuanTAlib.Tests.SimdScalarFallbackTests,SumScalar_MultipleElements_ReturnsCorrectSumU +'QuanTAlib.Tests.SimdScalarFallbackTests*SumScalar_NegativeValues_ReturnsCorrectSumF +'QuanTAlib.Tests.SimdScalarFallbackTestsSumScalar_Empty_ReturnsZeroT +'QuanTAlib.Tests.SimdScalarFallbackTests)MinScalar_MultipleElements_ReturnsMinimumR +'QuanTAlib.Tests.SimdScalarFallbackTests'MinScalar_NegativeValues_ReturnsMinimumQ +'QuanTAlib.Tests.SimdScalarFallbackTests&MinScalar_SingleElement_ReturnsElementT +'QuanTAlib.Tests.SimdScalarFallbackTests)MaxScalar_MultipleElements_ReturnsMaximumR +'QuanTAlib.Tests.SimdScalarFallbackTests'MaxScalar_NegativeValues_ReturnsMaximumQ +'QuanTAlib.Tests.SimdScalarFallbackTests&MaxScalar_SingleElement_ReturnsElementa +'QuanTAlib.Tests.SimdScalarFallbackTests6VarianceScalar_MultipleElements_ReturnsCorrectVariance\ +'QuanTAlib.Tests.SimdScalarFallbackTests1VarianceScalar_TwoElements_ReturnsCorrectVariance] +'QuanTAlib.Tests.SimdScalarFallbackTests2MinMaxScalar_MultipleElements_ReturnsCorrectMinMax[ +'QuanTAlib.Tests.SimdScalarFallbackTests0MinMaxScalar_NegativeValues_ReturnsCorrectMinMaxV +'QuanTAlib.Tests.SimdScalarFallbackTests+MinMaxScalar_SingleElement_ReturnsSameValue +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Tests.csQuanTAlib.TestsA +QuanTAlib.Tests.EmaTests%Ema_Constructor_Period_ValidatesInput@ +QuanTAlib.Tests.EmaTests$Ema_Constructor_Alpha_ValidatesInput1 +QuanTAlib.Tests.EmaTestsEma_Calc_ReturnsValue; +QuanTAlib.Tests.EmaTestsEma_Calc_IsNew_AcceptsParameter= +QuanTAlib.Tests.EmaTests!Ema_Calc_IsNew_False_UpdatesValue1 +QuanTAlib.Tests.EmaTestsEma_Reset_ClearsState5 +QuanTAlib.Tests.EmaTestsEma_Properties_Accessible< +QuanTAlib.Tests.EmaTests Ema_IsHot_BecomesTrueAfterWarmupF +QuanTAlib.Tests.EmaTests*Ema_PeriodEquivalence_BothConstructorsWorkK +QuanTAlib.Tests.EmaTests/Ema_IterativeCorrections_RestoreToOriginalState> +QuanTAlib.Tests.EmaTests"Ema_BatchCalc_MatchesIterativeCalcA +QuanTAlib.Tests.EmaTests%Ema_Result_ImplicitConversionToDouble< +QuanTAlib.Tests.EmaTests Ema_NaN_Input_UsesLastValidValueA +QuanTAlib.Tests.EmaTests%Ema_Infinity_Input_UsesLastValidValueB +QuanTAlib.Tests.EmaTests&Ema_MultipleNaN_ContinuesWithLastValid4 +QuanTAlib.Tests.EmaTestsEma_BatchCalc_HandlesNaN: +QuanTAlib.Tests.EmaTestsEma_Reset_ClearsLastValidValue \ No newline at end of file diff --git a/.sonarqube/out/2/output-cs/token-cpd.pb b/.sonarqube/out/2/output-cs/token-cpd.pb new file mode 100644 index 00000000..e69de29b diff --git a/.sonarqube/out/2/output-cs/token-type.pb b/.sonarqube/out/2/output-cs/token-type.pb new file mode 100644 index 00000000..190d7755 --- /dev/null +++ b/.sonarqube/out/2/output-cs/token-type.pb @@ -0,0 +1,3800 @@ +) +>  @@  @@  AA  AA  BB  BB A CC  FF  GG + GG  II  II  II  II& + JJ  JJ  KK  KK ! LL  LL  LL, - NN  PP  SS  TT + TT  VV  VV  VV  VV& + WW  WW ! XX  XX  XX, - ZZ  ZZ  \\  ]]  ]]  ]]  __  __4 5 cc  dd + dd  ff  ff  ff  ff& + gg  gg  gg* + hh  hh ! jj  jj  ll " mm  mm  mm  oo  pp  pp: ; qq  uu  vv + vv  xx  xx  xx  xx& + yy  yy  yy $ yy% ) yy+ , yy. / yy1 2 yy4 6 yy8 9 yy; G zz  zz  zz, - ||  ||  ~~  ~~' (   8 9 +  +! " +< = +  + + +  +  +  +  +& + +  + ! + # +  +  +  +! " +  +! " +  +  +  +  +  +  +# $ +  +  +  +  +  +  +> ? +  +  + + +  +  +  +  +& + +  + ! +  +  +, - +  + ! +  +  +  +  + 1 +  +$ ( + 0 +  +# ' + ( +  +% & + , +  +# $ +  +# $ +  +" # +  +$ % +  + + +  +  +  +  +& + +  +# ' +  +  + N +  +  +  +  +  +  +  +& + +  +  +  +5 ; +  +  +  + K +  + + +  +  +  +  +& + +  +  +  + . +  +% - +: ; +  +  +, - +  +  +  +  +  +  + ? +  +  +' ( +  + + +  + > +  +  +  +, 1 +7 : +C G +  +  +  +- 2 +8 ; +D G +  + ! +  +  +, - +  +( + +  +* - + ! +  +$ & +: ; +  +& ( += > + M +  +  +* . +? B +  + + +  +  +  +  +& + +  +  + 9 +  +  + + +  +  +  +  +& + + ! +  +  +  +  + 4 +  +  +, 2 + ' +@/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Tests.cs +  +  +            ' 6      + + +  + +                     +      + 3 6 7 > ? P    +      ' / 2 3 : ; ?    +      ' / 2 3 : ; = ""  ## + ##  %%  %%  %%  ''  ((  (($ ( ))  )) ! ++ 3 ,,  ,,$ ( --  //  00  00$ ( 11  44  55 + 55  77  77  77  99  99  ::  ::  ;;  ;; 3 <<  << ! >>  ??  ??  @@  AA  DD  EE + EE  GG  GG  GG  II  JJ  JJ$ ( LL 6 MM  MM$ ) NN  OO  QQ  RR  RR$ ( SS  VV  WW + WW  YY  YY  YY  [[ " \\  \\  ]]  ]]  ^^  ^^  ``  `` # ``% 4 bb # ff < gg  hh  hh# $ jj @ kk  ll  ll! $ mm  nn  qq  rr + rr  tt  tt  tt  vv  vv  vv $ vv% ) vv+ , vv. / vv1 2 vv4 5 vv7 8 vv: F ww  ww  ww) * yy  yy " {{  {{# $ ||  ||$ &   + + +  +  +  +  +  +  +  +  +) * +  + ' +: ; +  + ' +; < +  + + +  +  +  +  +  +  +  +  +  +  +  + $ +% ) ++ , +. / +1 2 +4 5 +7 8 +: F +  + ! +. 6 +@ A + 7 +  +# ' +  +  + + +  +  +  +  + 8 +  +# ' + ) +  +  +  +  +  +  +  + ! +  +! " +  + + +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + " + D +  +  +  +  +0 1 +  +  +  +4 J +M N +O V +^ _ +l m +m n +  + + +  +  +  +  +  +$ ( +  + ! +  +$ ( +  +  + + +  +  +  +  +  +$ ( +  +* / +  +  +$ ( +  +  +* / +  +  +$ ( +  +  + + +  +  +  +  + 7 +  +  + $ +% ) ++ , +. / +1 2 +4 5 +7 8 +: F +  + ! +. 6 +@ A + ? +  +# $ +  + + +  +  +  +  + 2 +  +  + $ +% ) ++ , +. / +1 2 +4 5 +7 8 +: F +  + ! +. 6 +@ A + . +  +$ % +A/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Tests.cs +  +  +  +   +          + +   + +                 !      #                ' ( , . / 1 3 5 7 9 ; = > @ L    !      #     !!  ""  ""  $$  $$  $$ ! $$" & $$( ) $$+ , $$. 0 $$2 3 $$5 6 $$8 D %%  %%  %% # %%. 3 ''  ((  (( % ++  ,,  ,,  ..  ..  .. ! .." & ..( ) ..+ , ... 0 ..2 3 ..5 6 ..8 D //  //  // # //. 5 11  33  33 ( 44  44 & 55  55 $ 88  99  99  ;;  ;;  ;; # ;;$ , ;;; ? ==  ??  ??  BB  CC  CC  EE  EE  EE ' EE( , EE. / EE1 3 EE5 7 EE9 ; EE= > EE@ L FF  FF  FF # FF4 9 HH  JJ  KK  KK % NN  OO  OO  QQ  QQ  QQ  QQ! & QQ( - RR  RR  RR  RR! & RR( - TT  WW  XX  XX  ZZ  ZZ  ZZ  ZZ! & ZZ( - [[  [[  [[  [[! & [[( - ]]  ``  aa  aa  cc  cc  cc  cc! & cc( - dd  dd  dd  dd! & dd( - ff  ii  jj  jj  ll  ll  ll  ll! & ll( - mm  mm  mm # mm$ ) mm+ 0 oo  rr  ss  ss  uu  uu  uu  uu % uu' , vv  vv ) xx  {{  ||  ||  ~~  ~~  ~~  ~~ % ~~' , +  +# ' +  +  +  +  +  +  +! & +( - +  +  +  +! & +( - +  +  +  +  +  +  +  +! & +( - +  +  +  +! & +( - +  +  +  +  +  +  +  +! & +( - +  +  +  +! & +( - +  +  +  +  +  +  +  +! & +( - +  +  +  +! & +( - +  +  +  +  +  +  +  +! & +( - +  +  +  +! & +( - +  +  +  +  +  +  +  +! & +( - +  +  +  +! & +( - + 6 +C/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Tests.cs +  +  +  +  +  +  +   + + +  + +   + +                   $              $ % (               ! % ) , . 1 3 6            !   " (   , /   1 4   6 9 ""  ""  "" $ $$  $$  %%  %%  %%% & &&  &&  &&% & ''  ''  ''% & **  ++  ++  --  --  -- $ //  //  22  33  33  55  55  55 $ 55. : 77  77 % ::  ;;  ;;  ==  ==  == $ >>  >>  @@ ! @@* . BB  CC  CC  FF  GG  GG  II  II  II $ JJ  JJ  LL ! LL* . MM ! MM* / OO  PP  PP  SS  TT  TT  VV  VV  VV $ WW  WW  XX  XX # ZZ  ZZ( , [[  [[( , ]]  ]]  ^^  ^^  ^^& ' __  __  __& ' bb  cc  cc  ee  ee  ee $ ff  ff  ff  ff ( ff7 ; jj  kk  kk  nn  oo  oo  qq  qq  qq $ rr  rr  rr  rr! ) rr8 < ss  ss  ss  ss! ) ss8 < uu# ' vv# ( xx  yy  yy  ||  }}  }}       $ +  +  + ! +" & +( ) ++ - +/ 1 +3 5 +7 8 +: F +  +) - +  +  +  +  +  +  +  +  +  + $ +  +  +! $ +& ) ++ . +0 3 +5 8 +  +  +  +  +% & +  +  +% & +  +  +  +  +  + $ +  +  +  + ( +7 ; +" ' +  +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +  +  +  +  +% & +  +  +% & +  +  +% & +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +  +  +  +  +$ % +  +  +$ % +  +  +$ % +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +% & +  +  +& ' +  +  +% & +  +  +& ' +  +  +% & +  +  +& ' +  +  +  +  +  + $ +  +  +  +  +  +  +  +  +  +  +  +# $ +  +  +# $ +  +  +# $ +  +  +  +  +  + $ +  +  +  +  +  +  +  +  + & +  +  +  +  +  +  +  +  +  +  + $ +  + # +  +  +  +  +  +  +  +  +  +  +  +  + $ +  + # +  +  +  +  +) . +  +  +  +  +  +  +  +  + $ +  +  +  +  +  +  +  + U +I/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Tests.cs +  +  +  +  +  +  +   + + +  + +   + +                   '              ' ( +              ' !!  !!  $$  %%  %%  ''  ''  '' ' ''1 ; ))  )) # ,,  --  --  //  //  // ' 00  00  00  00 ' 006 9 00; > 00@ B 00D G 00I M 22# ' 44  55  55  88  99  99  ;;  ;;  ;; ' <<  <<  ==  ==  ==  ==& ) ==+ . ==0 2 ==4 7 ==9 = >>  >>  >>  >>& ) >>+ . >>0 2 >>4 7 >>9 = @@$ ( AA$ ) CC  DD  DD  EE  EE  HH  II  II  KK  KK  KK ' LL  LL  LL  LL ' LL6 9 LL; > LL@ B LLD G LLI M NN# ( PP  SS  TT  TT  VV  VV  VV ' WW  WW  YY  YY" % YY' ) YY+ . YY0 4 YY= A [[  \\  __  ``  ``  bb  bb  bb ' cc  cc  cc ! cc" & cc( ) cc+ - cc/ 1 cc3 5 cc7 8 cc: F ee  ee # ee% ' ee) , ee. 2 ee; ? gg  hh  kk  ll  ll  nn  nn  nn ' oo  oo  oo  oo% ( oo* - oo/ 2 pp  pp  pp " pp' ) pp+ - pp/ 1 qq  qq  qq " qq' ) qq+ - qq/ 1 rr  rr  rr ! rr& ' rr) + rr- / ss  ss  ss # ss( * ss, . ss0 2 tt  tt  tt $ tt) , tt. 1 tt3 6 xx  xx  yy  yy  yy$ % zz  zz  zz$ % }}  ~~  ~~  +  +  + ' +  +  +  + ' +6 9 +; > +@ B +D G +I M +# ' +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + ' +  +  +  + ' +6 9 +; > +@ B +D G +I M +# ' +  +  +  +  +  +  +  +  +  +  + ' +  +  +  +  +  +  +  +  +  + ! +  +  +  +  +  + ' +  +  +  +  +  +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  +  +  +  + ' +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  + ' +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  + ' +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  + ' +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  + ' +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  + ' +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  + " +$ & +( * +, / +  +  +% & +  +  +& ' +  +  +% & +  +  +& ' +  +  +% & +  +  +& ' +  +  +  +  +  + ' +  +  +  + " +$ % +' ) ++ . +  +  +  + " +$ & +( * +, / +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  + " +$ & +( * +, / +  +  +  +  +  +$ % +  +  +$ % +  +  +$ % +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  +  +  + & +  +  +  +  +  +  +  +  +  +  + ' +  + ! +  +  + # +$ ' +) + +- / +1 2 +4 6 +8 ; +( , +  +  +  +  +  +  +  +  +  +  + ' +  + ! +  +  + " +$ % +' ) ++ . +  +  + " +$ % +' ) ++ . +7 < +  +  +  +  +  +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  ++ , +B C +  ++ , +C D +  +  +  +  +  + ' +  +  + " +$ % +' ) ++ . +  +  + " +$ & +( * +, / +  +  + " +$ & +( * +, / +  +  +  +  +% & +  +  +% & +  +  +% &S +=/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Tests.cs +  +  +  +   +          + +   + +                                                                     '   ( ,   . /   1 3   5 7   9 ;   = >   @ L !!  !!  ""  ""  ##  ##  $$  $$  %%  %%  ''  ''  ''  ))  **  ++  ,,  --  ..  11  22  22  44  44  44 ' 44( , 44. / 441 3 445 7 449 ; 44= > 44@ L 55  55  55  55) , 55. 1 553 5 557 : 55< @ 77  88  88 % ;;  <<  <<  >>  >>  ??  ??  ??  ??% ( ??* - ??/ 1 ??3 6 ??8 < AA  CC  DD  DD  GG  HH  HH  JJ  JJ  KK  KK  KK  KK% ( KK* - KK/ 1 KK3 6 KK8 < MM  OO  PP  PP  SS  TT  TT  VV  VV  WW  WW  WW  WW% ( WW* - WW/ 1 WW3 6 WW8 < YY  [[  \\  \\  __  ``  ``  bb  bb  cc  cc  cc  cc% ( cc* - cc/ 1 cc3 6 cc8 < ee  gg  hh  hh  kk  ll  ll  nn  nn  oo  oo  oo  oo% ( oo* - oo/ 1 oo3 6 oo8 < qq  ss  tt  tt  ww  xx  xx  zz  zz  zz  zz  zz" % zz' * zz, . zz0 3 zz5 9 {{  {{  ~~      +  +  +  +  +" % +' * +, . +0 3 +5 9 +  +  +  +  +  +  +  +  +  +" % +' * +, . +0 3 +5 9 +  +  +  +  +  +  +  +  +  +" % +' * +, . +0 3 +5 9 +  +  +  +  +  +  +  +  +  +" % +' * +, . +0 3 +5 9 +  +  +  +  +  +  +  +  +  +" % +' * +, . +0 3 +5 9 +  +  +  +  +  +  +  +  +  +" % +' * +, . +0 3 +5 9 +  +  +  +  +  +  +  +  +  +  +  +% ( +* - +/ 1 +3 6 +8 < +  +  +  +  +  +  +  +  +  + ' +( , +. / +1 3 +5 7 +9 ; += > +@ L +  +  +  +) , +. 1 +3 5 +7 : +< @ +  +  +  + % +  +  +  +  +  + ' +( , +. / +1 3 +5 7 +9 ; += > +@ L +  +  +  +) . +0 6 +8 = +? D +F L +  +  + ( +  + & +  + & +  + & +  + % +  + & +  + ' +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  + " +# ( +* - +/ 2 +4 6 +8 ; += A +  +  +  +  +  +  +  + $ +& ) ++ . +0 2 +4 7 +9 = +  + ' +  +  +  +  +  +  +  + $ +& ) ++ . +0 2 +4 7 +9 = +  +$ ( +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  +  +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +  +  + % +' * +, / +1 3 +5 8 +: > +  +J/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs +  +  +  +  +  +  +  +  +   +   +             " -                           # & ' )      &  +    /  2       & + 1 5 > A    ( 7 ? L M  #    4 !!  !! ! !!" ' ""  ""  ""  $$ " $$# ( &&  && # ''  ((  ))  **  ++ ! 00 + 00  22  55  66 + 66  88  88  88  88! # 88% ' 88) , ::  ::  ::  << & ==  ==  ==  ==, / >>  @@ $ AA  CC ' FF F II  JJ + JJ  LL  LL  LL  LL! # LL% ' LL) , NN - OO  PP  PP  PP $ RR  RR  RR  TT & UU  UU  UU  UU, / VV  XX # YY  YY ) YY. 4 YY= > YYA B YYL O YYP S [[  \\  \\  \\ % ^^ \ __  __! * aa ' dd E gg  hh + hh  jj  jj  jj  jj! # jj% ' jj) , ll , mm  oo  oo  oo  qq & rr  rr  rr  rr, / ss  uu " vv  vv% / ww  xx  xx" ( yy  yy# & yy' - ||  ||" # ~~ ' + D +  +  + # +- 1 +2 8 +C F + % +  +  +  +  + 3 +  +  +  +  +  +  + % +  +) - +  +  + # +- 1 +2 ; +F I + % +  +  +  +  + 3 +  +  +  +  + ; +  +" * + - +  +/ 3 +  +  +" ) +3 9 +E J +U X +c f +  +  +  + 3 + J +  +  +  +  + ) + A +  + & +  + 4 +  +& . +  + - +  +) -I +E/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.Tests.cs +  +  +  +  +  +       + +     +                      %   # & ' - . 6 < A      ! * .      ! * .    +       ! $ & )      %   # & ' - . 6 < A          ! * .            !   * . !!  !!  !! ! !!* . $$  %% + %%  ''  ''  ''  ''! # ))  )) ' ))/ 2 ))3 < ,,  -- + --  //  //  //  //" $ 11  11 ' 11/ 2 113 < 44  55 + 55  77  77  77! $ 77& ) 99  99 ' 99/ 2 993 < <<  == + ==  ??  ??  ??" % ??' * AA  AA ' AA/ 2 AA3 < DD  EE + EE  GG  GG  GG! $ GG& ) II  II ' II/ 2 II3 < LL  MM + MM  OO  OO  OO! $ OO& ) PP  PP  PP % RR  RR# & RR' - RR. 6 RR< A TT  TT  WW  XX + XX  ZZ  ZZ  ZZ  ZZ! # [[  [[  [[ % \\  \\- 0 \\1 4 ^^  ^^  ^^  ^^$ & ^^( * ^^, . ^^0 2 ^^4 6 ^^8 : ^^< > ^^@ B ^^D F __  __  aa  aa  aa  cc  cc  cc ! dd  ff  ff  ff  hh  ii  iiA E jj  mm# $ qq  rr + rr  tt  tt  tt  tt! # uu  uu  uu % vv  vv- 0 vv1 4 xx  xx  yy  yy  yy/ 3 yy4 8 zz  zz  zz/ 3 zz4 : {{  {{  }}  }}  }}  +  + " +& ) +  +  +  +  +  +  +  +  +  +  +  +  +  +I M +  + + +  +  +  +  +! # +  +  +! * +  + ! +" + +  +  +  +  +/ 3 +4 8 +  +  +/ 3 +4 : +  +  +  +  +  +  + " +& ) +  +  +  +  +  +  +  +  +  + ! +" % +& . +  +  +  +  +  +H L +  + + +  +  +  +  +! # +  +  +  +  +/ 3 +4 8 +  +  +/ 3 +4 : +  +  +  +  +  +  + " +& ) +  +  +  +  +  + ' +  +  + ! +  +  +  +  +  +  +  +  +O S +  + + +  +  +  +  +  + % +  + # +$ , +2 7 +  +# & +' - +. 6 +< A +  +  + ! +* . +  + + +  +  +  +  +  +  + % +  + # +$ , +2 7 +  + # +$ , +2 7 +  +. 1 +2 8 +9 A +G M +  +  +  +  +  +7 9 +9 W +e f +  + + +  +  +  +  +  +  + % +  + # +$ , +2 7 +  + # +$ , +2 7 +  +1 4 +5 ; +< D +J P +  +  +  +  +  +  +1 4 +5 ; +< D +J P +  +  +  +  +  +  + + +  +  +  +  +  +  + % +  + # +$ , +2 7 +  + # +$ , +2 7 +  + # +$ , +2 7 +  +" % +& , +- 5 +; A +  +" % +& , +- 5 +; A +  +" % +& , +- 5 +; A +  +  +  +# ) +/ 5 +  +  +  +# ) +/ 5 +  +  +  +# ) +/ 5 +  + + +  +  +  +  +  +  + % +  +  +/ 3 +4 8 +  +  +/ 3 +4 : +  +  + % +  +. 3 +  +. 4 +  +. 3 +  +. 4 +  +. 3 +  +  +  +  +  +  +# % +  +  +  +  + " +2 4 +4 R +W X +  + + +  +  +  +  +  + % +  + # +$ , +2 7 +  + # +$ , +2 8 +  +& ) +* 0 +1 9 +? C +  +  +" # +, 0 +  + + +  +  +  +  +! # +  +  + % +  +- 0 +1 4 +  +  +  +$ & +( * +, 2 +8 : +< B +U W +Y [ +  +  +  +  +  +  +  + ! +  +  +  +  +  +  +A E +# $ +  + + +  +  +  +  +  +  + % +  +& ) +* 0 +1 9 +? D +  +  +7 8 +  +  +7 8 +  + + +  +  +  +  +  +  + % +  +  +/ 3 +4 8 +< ? +A D +F I +  +  +/ 3 +4 : +> B +D H +J N +  +  +  +  +  +  += > +G K +  +  += > +G K +G/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Tests.cs +  +  +  +  +           + +     +                &      +        ! # & ( + - 0 2 5 7 : < ?      # $ *      +        ! # ) / 2 4 7 9 < > A C F      # $ *   !!  "" + ""  $$  $$  $$ ! $$# & $$( . $$A D $$F I $$K N $$P S %%  %%  %% # %%$ * &&  ))  ** + **  ,,  ,,  ,, ! ,,# & ,,( + ,,- 3 ,,F I ,,K N ,,P S --  --  -- # --$ * ..  11  22 + 22  44  44  44 ! 44# & 44( + 44- 0 442 5 447 : 44< ? 44A G 55  55  55 # 55$ * 66  99  :: + ::  <<  <<  ==  ==  == # ==$ * >>  AA  BB + BB  DD  DD  DD ! EE  EE  EE # EE$ * FF  II  JJ + JJ  LL  LL  LL $ MM  MM  MM # MM$ * NN  QQ  RR  SS + SS  UU  UU  UU & VV  VV  YY  ZZ + ZZ  \\  \\  ]]  ]]  ]] # ]]$ * ^^  ^^  aa  bb + bb  dd  dd  dd ! ee  ee  ee # ee$ * ff  ff  ii  jj + jj  ll  ll  ll ! ll# & ll( + ll- 0 ll2 5 ll7 : ll< ? llA D llF J mm  mm  mm # mm$ * nn  nn  nn6 8 qq  rr + rr  tt  tt  tt " tt# ' uu  uu  uu  vv  xx  xx  xx # xx$ * yy  yy  yy# ) yy, / zz  zz: ; }}  ~~ + ~~  +  +  + ! +# ) +/ 2 +4 7 +  +  + # +$ * +  +  +  + + +  +  +  + ! +# ) +< ? +A D +  +  + # +$ * +  +  +  + + +  +  +  + # +& ) +, / +  +  + # +$ * +  +  +  +  + + +  +  +  + & +  +  +  + + +  +  +  +  +  + # +$ * +  +  +  + + +  +  +  + ! +  +  + # +$ * +  +  +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +  +  + + +  +  +  + ! +# ) +/ 2 +4 7 +  +  + # +$ * +  +  +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +A D +  +  + # +$ * +  +  +  + + +  +  +  + # +& ) +, / +  +  + # +$ * +  +  +  +  + + +  +  +  + & +  +  +  + + +  +  +  +  +  + # +$ * +  +  +  + + +  +  +  + ! +  +  + # +$ * +  +  +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +  +  + + +  +  +  + ! +# ) +/ 2 +4 7 +  +  + # +$ * +  +  +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +A E +  +  + # +$ * +  +  +  + + +  +  +  + # +& ) +, / +  +  + # +$ * +  +  +  +  + + +  +  +  + & +  +  +  + + +  +  +  + ! +  +  + # +$ * +  +  +  + + +  +  +  + ! +# & +( + +- 0 +  +  + # +$ * +  +  +9 ; +  + + +  +  +  + $ +* - +  +  + # +$ * +  +  +  +  + + +  +  +  +  +  + # +$ * +  +  +  + + +  +  +  + & +  +  +  + + +  +  +  + ! +  +  + # +$ * +  +  +: < +  + + +  +  +  + ! +# & +  +  + # +$ * +  +  +: < +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +  +  +( 0 +4 : +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +  +  +  +  +  + + +  +  +  + $ +* - +/ 2 +  +  + # +$ * +  +  +  + + +  +  +  + ! +# & +( + +  +  + # +$ * +  +  +3 9 +  + + +  +  +  + ! +# & +( + +  +  + # +$ * +  +  +3 9 +  +  + + +  +  +  + ! +  +  + # +$ * +  +  +1 6 +: > +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +  +  +& + +/ 3 +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +( + +  +  +  + + +  +  +  + $ +* - +/ 2 +  +  + # +$ * +  +  +  +  + + +  +  +  + & +  +  +  +  +  +  + + +  +  +  +  +  + # +$ * +  +  +  +  +  +  + + +  +  +  + ! +  +  + # +$ * +  +  +  +  +  +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +  +  +  +  +  + + +  +  +  + ! +# ) +/ 2 +4 7 +  +  + # +$ * +  +  +  +  +  +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +A D +F J +  +  + # +$ * +  +  +  +  +  +  + + +  +  +  + # +& ) +, / +  +  + # +$ * +  +  +  +  +  +  +  + + +  +  +  +  +! $ +  +  +  +  +  +6 9 +  +  +  +  +  +  +  +  +- . +  +  ++ , +  +  +  +  +  +  +  + + +  +  +  +  +& + +  + ! +  +  +, - +  + ! +  +  +  +  +  +  +  +  +  +  +  +  +  + + +  +  +  +  +& + +  + ! +  +  +, - +  + " +  +  +$ - +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +- / +  + # +; N +N O +  + + +  +  +  + ! +# & +  +  + # +$ * +  +  +  +  +  +  +  +  +  +  +  +  +   ,   +  + $ +  + + +  +  +  + ! +# & +( + +  +  + # +$ * +  + # +  + + +  +  +  + $ +* - +  +  + # +$ * +  + " +  + + +  +  +  + $ +7 : +  +  + # +$ * +  + " +  + + +  +  +  + & +  + # +  + + +  +  +  + ! +# & +( + +- 0 +  +  + # +$ * +  +  + ) +  + + +  +  +  + # +% ( +  +  + # +$ * +  +  + ( +  + + +  +  +  + & +  +  + ( +  + + +  +  +  + ! +# & +( + +- 0 +  +  + # +$ * +  +  + ( +  + + +  +  +  + # +& ) +, / +  +  + # +$ * +  +  + ) +  + + +  +  +  +  +  + # +$ * +  +  + ) +  + + +  +  +  + ! +# & +( + +- 0 +  +  + # +$ * +  +  + ( +  + + +  +  +  + # +& ) +, / +  +  + # +$ * +  +  + ) +  + + +  +  +  +  +  + # +$ * +  +  + ) +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  +  +  + ( +  +  +( 0 +4 : +  + + +  +  +  + ! +  +  + # +$ * +  +  +  +  + ( +P R +  + + +  +  +  + ! +# & +( + +- 0 +2 5 +7 : +< ? +  +  + # +$ * +  + ' +  +  +  +  +  + + +  +  +  + # +& ) +, / +  +  + # +$ * +  + ' +  +  +  +  +  + + +  +  +  +  +  + # +$ * +  + ' +  +  +  + : +?/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Tests.cs +  +  +  +  +           + + +  + +         '   / 2   3 6   7 8        '   / 2   3 6   8 9              +      ' / 2 3 6 7 :    ' / 2 3 6 8 ;    ' / 2 3 6 7 :              +   !!  !!  !!  !!  ##  ##  %%  %%# & %%' - %%. 6 %%< ? ''  ''# $ ((  ++  ,, + ,,  ..  ..  ..  ..  00  00  00 & 00, / 009 = 11  33  33  33 & 33, / 339 = 44  66 - 77  ::  ;; + ;;  ==  ==  ==  ==  ??  ??  ?? & ??, / @@  @@  @@ & @@, / @@9 = AA  CC  CC  CC & CC, / CC9 > DD  FF ) GG  JJ  KK + KK  MM  MM  MM  MM  OO  OO  OO & OO, / PP  PP  PP & PP, / QQ  UU  UU  WW 0 XX  XX  XX & XX, . YY  YY  ZZ  ]]  ^^ + ^^  ``  ``  ``  ``  bb  bb  cc  ee  ee  ee & ee, / gg  gg  jj  kk + kk  mm  mm  mm  mm  oo * pp  rr ( ss / tt D uu 0 vv  ww $ xx ( yy  zz ! ||  ||  }}  }}% )    ! " * 0 3 +  +  +  + 9 +  + + +  +  +  +  +  +' ( +  +  +  +  +  +  + @ +  +* - +. 4 +5 = +C F +  +) , +- 3 +4 < +B E +  +3 8 +  + + +  +  +  +  +  +  +  +  +& + +1 5 +> A +  +  + # +  +  +  +  +  +& * +  + # +* . + - +  + E +  +  +  +  +  +& + +  + ! +? D + @ +  +8 = + > +  +2 7 +  + + +  +  +  + " +# % +  +  +  + ! +  +  +  +& + +1 5 +> A +  +  +  +  +  +  +  +  +  +& * +  +  + " +# * +  +  +  +  +  +  +  +  +  +  +  +K P +  +  + + +  +  +  +  +  +  +  + & +, / + X +  +  +  +$ ) +  + + +  +  +  +  +  + ! +  +  + & +, / +  +  + & +, / +  + 7 +  +( + +, 2 +3 ; +A G + , +  +  + R +  +  +  + + +  +  +  +  +  + ! +  +  + & +, / +  +  + & +, / + ? +  ++ . +/ 5 +6 > +D J +  +  + ? +  ++ . +/ 5 +6 > +D J +  +  +  + + +  +  +  +  +  +  +  +  + & +, / +  +  + & +, / +  +  + & +, / + # +  +  + & +' / +5 ; +  +  + & +' / +5 ; +  +  + & +' / +5 ; + ' +  +  +  +  +  +  + W + 1 +  ++ / +? B +F J +Z ] +  + + +  +  +  +  +  + 5 +  +  +  +  +' * +  +( ) ++ . +  +( ) ++ 1 +  +( ) ++ . +  +( ) ++ 1 +  +( ) ++ . +  + ' +  +  +  +  +  +7 9 +9 W +e f +  + + +  +  +  +  +  + $ +  +  + & +, / +  +  + & +, 2 +  + G +  + # +$ * ++ 3 +9 ; +  +  +) . \ No newline at end of file diff --git a/.sonarqube/out/Processed.Telemetry.S4NET.json b/.sonarqube/out/Processed.Telemetry.S4NET.json new file mode 100644 index 00000000..cf6ec50b --- /dev/null +++ b/.sonarqube/out/Processed.Telemetry.S4NET.json @@ -0,0 +1,10 @@ +{"dotnetenterprise.s4net.params.sonar_cs_opencover_reportspaths.source":"CLI"} +{"dotnetenterprise.s4net.serverInfo.region":"default"} +{"dotnetenterprise.s4net.serverInfo.product":"SQ_Cloud"} +{"dotnetenterprise.s4net.serverInfo.serverUrl":"https://sonarcloud.io"} +{"dotnetenterprise.s4net.serverInfo.version":"8.0.0.76937"} +{"dotnetenterprise.s4net.jre.bootstrapping":"Enabled"} +{"dotnetenterprise.s4net.jre.download":"CacheHit"} +{"dotnetenterprise.s4net.scannerEngine.bootstrapping":"Enabled"} +{"dotnetenterprise.s4net.scannerEngine.download":"CacheHit"} +{"dotnetenterprise.s4net.endstep.legacyTFS":"NotCalled"} diff --git a/.sonarqube/out/Processed.Telemetry.Targets.S4NET.json b/.sonarqube/out/Processed.Telemetry.Targets.S4NET.json new file mode 100644 index 00000000..577a6d59 --- /dev/null +++ b/.sonarqube/out/Processed.Telemetry.Targets.S4NET.json @@ -0,0 +1,2 @@ +{"dotnetenterprise.s4net.build.visual_studio_version":"18.0"} +{"dotnetenterprise.s4net.build.msbuild_version":"18.0.2"} diff --git a/.sonarqube/out/ScannerEngineInput.json b/.sonarqube/out/ScannerEngineInput.json new file mode 100644 index 00000000..64ee7a5f --- /dev/null +++ b/.sonarqube/out/ScannerEngineInput.json @@ -0,0 +1,188 @@ +{ + "scannerProperties": [ + { + "key": "sonar.scanner.app", + "value": "ScannerMSBuild" + }, + { + "key": "sonar.scanner.appVersion", + "value": "11.0" + }, + { + "key": "sonar.scanner.bootstrapStartTime", + "value": "1764463248000" + }, + { + "key": "sonar.projectKey", + "value": "mihakralj_QuanTAlib" + }, + { + "key": "sonar.working.directory", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar" + }, + { + "key": "sonar.projectBaseDir", + "value": "/Users/mihakralj/Github/QuanTAlib" + }, + { + "key": "sonar.pullrequest.cache.basepath", + "value": "/Users/mihakralj/Github/QuanTAlib" + }, + { + "key": "sonar.sources", + "value": "/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Quantower.cs,/Users/mihakralj/Github/QuanTAlib/.github/TradingPlatform.BusinessLayer.xml,/Users/mihakralj/Github/QuanTAlib/.config/dotnet-tools.json,/Users/mihakralj/Github/QuanTAlib/.vs/VSWorkspaceState.json,/Users/mihakralj/Github/QuanTAlib/.codacy/cli.sh,/Users/mihakralj/Github/QuanTAlib/.codacy/codacy.yaml,/Users/mihakralj/Github/QuanTAlib/.codacy/cli-config.yaml,/Users/mihakralj/Github/QuanTAlib/.sonarlint/QuanTAlib.json,/Users/mihakralj/Github/QuanTAlib/.vscode/settings.json,/Users/mihakralj/Github/QuanTAlib/.vscode/extensions.json,/Users/mihakralj/Github/QuanTAlib/.vscode/launch.json,/Users/mihakralj/Github/QuanTAlib/.vscode/tasks.json,/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/semgrep.yaml,/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/trivy.yaml,/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/languages-config.yaml,/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/lizard.yaml,/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/analysis_options.yaml,/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/eslint.config.mjs,/Users/mihakralj/Github/QuanTAlib/.github/workflows/Publish.yml,/Users/mihakralj/Github/QuanTAlib/.github/codeql/codeql-config.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/8B1B55C024A0F0FBB24C2964F83C886E34CA54C0.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/346F370EBFD8AF8C2CE1A41185526E6742960059.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/3D2F07AEF9A822DC75C243AD4D59A1E997F198B8.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/358F1E2A063F7660166E92FB30EB20CCD604D883.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/341C225BE5349EBCBA453D151E9662FAEF63087E.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/7C52B17B004F856D97769A2A664C666EC4950E2E.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/B41A98D34504190C3581ED77A64579331F9C25C4.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/86D2F0BD616CFACEE52FA1335C519FD51A62928B.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/DA3611089A00C3F2C077C00D2D676C3E06DCF328.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/3D2281F760C3CC3E57CBFDD474781F65E7CB5290.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/FD12E40B4AE77AF581DFBE205749EFF7051F549F.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/0BACF8A4E876691D2D84FB01C4110EB0CCEB210A.yml,/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/3823E2C03E6D7A2C63B916E93A88C74DB04A14DC.yml,/Users/mihakralj/Github/QuanTAlib/.vs/QuanTAlib/v18/DocumentLayout.backup.json,/Users/mihakralj/Github/QuanTAlib/.vs/QuanTAlib/v18/DocumentLayout.json,/Users/mihakralj/Github/QuanTAlib/omnisharp.json,/Users/mihakralj/Github/QuanTAlib/GitVersion.yml,/Users/mihakralj/Github/QuanTAlib/.github/QuanTAlib2.png" + }, + { + "key": "sonar.tests", + "value": "" + }, + { + "key": "sonar.modules", + "value": "D8F03B19-F99F-475F-8951-85C9D2258B73,F455234B-2A3C-140A-17C3-683D7820A733,953F0406-DD9B-406E-993D-6D988D5F5423" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.projectKey", + "value": "mihakralj_QuanTAlib:D8F03B19-F99F-475F-8951-85C9D2258B73" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.projectName", + "value": "Averages" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.projectBaseDir", + "value": "/Users/mihakralj/Github/QuanTAlib/quantower" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.working.directory", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar/mod0" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.sourceEncoding", + "value": "utf-8" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.tests", + "value": "" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.sources", + "value": "/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs,/Users/mihakralj/Github/QuanTAlib/quantower/obj/Averages.csproj.nuget.dgspec.json,/Users/mihakralj/Github/QuanTAlib/quantower/obj/project.packagespec.json,/Users/mihakralj/Github/QuanTAlib/quantower/obj/project.assets.json,/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/Averages.sourcelink.json,/Users/mihakralj/Github/QuanTAlib/quantower/bin/Debug/Averages.deps.json" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.cs.analyzer.projectOutPaths", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.cs.roslyn.reportFilePaths", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0/Issues.json" + }, + { + "key": "D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.cs.scanner.telemetry", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0/Telemetry.json" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.projectKey", + "value": "mihakralj_QuanTAlib:F455234B-2A3C-140A-17C3-683D7820A733" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.projectName", + "value": "quantalib" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.projectBaseDir", + "value": "/Users/mihakralj/Github/QuanTAlib/lib" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.working.directory", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar/mod1" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.sourceEncoding", + "value": "utf-8" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.tests", + "value": "" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.sources", + "value": "/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs,/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs,/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.cs,/Users/mihakralj/Github/QuanTAlib/lib/obj/project.packagespec.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/project.assets.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/gitversion.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.dgspec.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/QuanTAlib.Tests.csproj.nuget.dgspec.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/project.packagespec.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/project.assets.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/net9.0/QuanTAlib.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/net10.0/QuanTAlib.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.sourcelink.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.sourcelink.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.sourcelink.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net9.0/QuanTAlib.Tests.runtimeconfig.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net9.0/QuanTAlib.Tests.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net10.0/QuanTAlib.Tests.runtimeconfig.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net10.0/QuanTAlib.Tests.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net8.0/QuanTAlib.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net9.0/QuanTAlib.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net10.0/QuanTAlib.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/Debug/net9.0/QuanTAlib.Tests.sourcelink.json,/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/Debug/net10.0/QuanTAlib.Tests.sourcelink.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net9.0/QuanTAlib.Tests.runtimeconfig.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net9.0/QuanTAlib.Tests.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net10.0/QuanTAlib.Tests.runtimeconfig.json,/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net10.0/QuanTAlib.Tests.deps.json,/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.cs,/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs,/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.cs,/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.md,/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.md,/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.md,/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.md,/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.md,/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.md,/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/Directory.Build.props,/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.md,/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/daily_IBM.csv,/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.md,/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.Notebook.dib,/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.md,/Users/mihakralj/Github/QuanTAlib/lib/TestResults/09aa8f8b-17ca-430d-be58-992d5ce2aacd/coverage.opencover.xml,/Users/mihakralj/Github/QuanTAlib/lib/TestResults/b06e7fe4-4f16-46e2-8b46-bf971ee7d63d/coverage.cobertura.xml,/Users/mihakralj/Github/QuanTAlib/lib/TestResults/d5449c1c-f3e9-43cc-b9d9-304cd71e763e/coverage.opencover.xml" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.cs.analyzer.projectOutPaths", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.cs.roslyn.reportFilePaths", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1/Issues.json" + }, + { + "key": "F455234B-2A3C-140A-17C3-683D7820A733.sonar.cs.scanner.telemetry", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1/Telemetry.json" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.projectKey", + "value": "mihakralj_QuanTAlib:953F0406-DD9B-406E-993D-6D988D5F5423" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.projectName", + "value": "QuanTAlib.Tests" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.projectBaseDir", + "value": "/Users/mihakralj/Github/QuanTAlib/lib" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.working.directory", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar/mod2" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.sourceEncoding", + "value": "utf-8" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.sources", + "value": "" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.tests", + "value": "/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/Gbm.Tests.cs,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net10.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net8.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net9.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/QuanTAlib.0.7.14-simd-dev.1.nupkg,/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/QuanTAlib.0.7.14-simd-dev.1.snupkg,/Users/mihakralj/Github/QuanTAlib/lib/bin/net10.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/bin/net9.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.AssemblyInfoInputs.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.assets.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.AssemblyReference.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.CoreCompileInputs.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.FileListAbsolute.txt,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.AssemblyInfoInputs.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.assets.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.csproj.CoreCompileInputs.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.csproj.FileListAbsolute.txt,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.AssemblyInfoInputs.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.assets.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.csproj.CoreCompileInputs.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.csproj.FileListAbsolute.txt,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/QuanTAlib.pdb,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/QuanTAlib.0.7.14-simd-dev.1.nuspec,/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/QuanTAlib.0.7.14-simd-dev.1.symbols.nuspec,/Users/mihakralj/Github/QuanTAlib/lib/obj/project.nuget.cache,/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.g.props,/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.g.targets,/Users/mihakralj/Github/QuanTAlib/lib/obj/rider.project.restore.info" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.cs.analyzer.projectOutPaths", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.cs.roslyn.reportFilePaths", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2/Issues.json" + }, + { + "key": "953F0406-DD9B-406E-993D-6D988D5F5423.sonar.cs.scanner.telemetry", + "value": "/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2/Telemetry.json" + }, + { + "key": "sonar.token", + "value": "***" + }, + { + "key": "sonar.cs.opencover.reportsPaths", + "value": "**/coverage.opencover.xml" + }, + { + "key": "sonar.organization", + "value": "mihakralj-quantalib" + }, + { + "key": "sonar.exclusions", + "value": "**/coverage.opencover.xml" + }, + { + "key": "sonar.visualstudio.enable", + "value": "false" + }, + { + "key": "sonar.host.url", + "value": "https://sonarcloud.io" + } + ] +} \ No newline at end of file diff --git a/.sonarqube/out/architecture/cs/0.1.udg b/.sonarqube/out/architecture/cs/0.1.udg new file mode 100644 index 0000000000000000000000000000000000000000..1b373ee9067c6d215477973dbcbb0586217f5e79 GIT binary patch literal 72797 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 literal 0 HcmV?d00001 diff --git a/.sonarqube/out/architecture/cs/1.1.udg b/.sonarqube/out/architecture/cs/1.1.udg new file mode 100644 index 0000000000000000000000000000000000000000..a1c86550b2a6c395f28f6d07195ebcc788241583 GIT binary patch literal 71929 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 literal 0 HcmV?d00001 diff --git a/.sonarqube/out/architecture/cs/2.1.udg b/.sonarqube/out/architecture/cs/2.1.udg new file mode 100644 index 0000000000000000000000000000000000000000..15421ea4949f009e4185522c178185e11feff0bf GIT binary patch literal 151313 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 TxZTk*D>w7e`OHV>Yd-qFFA~qL literal 0 HcmV?d00001 diff --git a/.sonarqube/out/sonar-project.properties b/.sonarqube/out/sonar-project.properties new file mode 100644 index 00000000..c7899cf4 --- /dev/null +++ b/.sonarqube/out/sonar-project.properties @@ -0,0 +1,202 @@ +sonar.projectKey=mihakralj_QuanTAlib +sonar.working.directory=/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar +sonar.projectBaseDir=/Users/mihakralj/Github/QuanTAlib +sonar.pullrequest.cache.basepath=/Users/mihakralj/Github/QuanTAlib +sonar.sources=\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Quantower.cs",\ +"/Users/mihakralj/Github/QuanTAlib/.github/TradingPlatform.BusinessLayer.xml",\ +"/Users/mihakralj/Github/QuanTAlib/.config/dotnet-tools.json",\ +"/Users/mihakralj/Github/QuanTAlib/.vs/VSWorkspaceState.json",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/cli.sh",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/codacy.yaml",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/cli-config.yaml",\ +"/Users/mihakralj/Github/QuanTAlib/.sonarlint/QuanTAlib.json",\ +"/Users/mihakralj/Github/QuanTAlib/.vscode/settings.json",\ +"/Users/mihakralj/Github/QuanTAlib/.vscode/extensions.json",\ +"/Users/mihakralj/Github/QuanTAlib/.vscode/launch.json",\ +"/Users/mihakralj/Github/QuanTAlib/.vscode/tasks.json",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/semgrep.yaml",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/trivy.yaml",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/languages-config.yaml",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/lizard.yaml",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/analysis_options.yaml",\ +"/Users/mihakralj/Github/QuanTAlib/.codacy/tools-configs/eslint.config.mjs",\ +"/Users/mihakralj/Github/QuanTAlib/.github/workflows/Publish.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.github/codeql/codeql-config.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/8B1B55C024A0F0FBB24C2964F83C886E34CA54C0.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/346F370EBFD8AF8C2CE1A41185526E6742960059.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/3D2F07AEF9A822DC75C243AD4D59A1E997F198B8.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/358F1E2A063F7660166E92FB30EB20CCD604D883.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/341C225BE5349EBCBA453D151E9662FAEF63087E.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/7C52B17B004F856D97769A2A664C666EC4950E2E.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/B41A98D34504190C3581ED77A64579331F9C25C4.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/86D2F0BD616CFACEE52FA1335C519FD51A62928B.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/DA3611089A00C3F2C077C00D2D676C3E06DCF328.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/3D2281F760C3CC3E57CBFDD474781F65E7CB5290.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/FD12E40B4AE77AF581DFBE205749EFF7051F549F.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/0BACF8A4E876691D2D84FB01C4110EB0CCEB210A.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.git/gitversion_cache/3823E2C03E6D7A2C63B916E93A88C74DB04A14DC.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.vs/QuanTAlib/v18/DocumentLayout.backup.json",\ +"/Users/mihakralj/Github/QuanTAlib/.vs/QuanTAlib/v18/DocumentLayout.json",\ +"/Users/mihakralj/Github/QuanTAlib/omnisharp.json",\ +"/Users/mihakralj/Github/QuanTAlib/GitVersion.yml",\ +"/Users/mihakralj/Github/QuanTAlib/.github/QuanTAlib2.png" + +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.projectKey=mihakralj_QuanTAlib:D8F03B19-F99F-475F-8951-85C9D2258B73 +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.projectName=Averages +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.projectBaseDir=/Users/mihakralj/Github/QuanTAlib/quantower +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.sourceEncoding=utf-8 +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.tests= +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.sources=\ +"/Users/mihakralj/Github/QuanTAlib/quantower/IndicatorExtensions.cs",\ +"/Users/mihakralj/Github/QuanTAlib/quantower/obj/Averages.csproj.nuget.dgspec.json",\ +"/Users/mihakralj/Github/QuanTAlib/quantower/obj/project.packagespec.json",\ +"/Users/mihakralj/Github/QuanTAlib/quantower/obj/project.assets.json",\ +"/Users/mihakralj/Github/QuanTAlib/quantower/obj/Debug/Averages.sourcelink.json",\ +"/Users/mihakralj/Github/QuanTAlib/quantower/bin/Debug/Averages.deps.json" + +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.cs.analyzer.projectOutPaths=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0" +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.cs.roslyn.reportFilePaths=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0/Issues.json" +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.cs.scanner.telemetry=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/0/Telemetry.json" + +D8F03B19-F99F-475F-8951-85C9D2258B73.sonar.working.directory=/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar/mod0 +F455234B-2A3C-140A-17C3-683D7820A733.sonar.projectKey=mihakralj_QuanTAlib:F455234B-2A3C-140A-17C3-683D7820A733 +F455234B-2A3C-140A-17C3-683D7820A733.sonar.projectName=quantalib +F455234B-2A3C-140A-17C3-683D7820A733.sonar.projectBaseDir=/Users/mihakralj/Github/QuanTAlib/lib +F455234B-2A3C-140A-17C3-683D7820A733.sonar.sourceEncoding=utf-8 +F455234B-2A3C-140A-17C3-683D7820A733.sonar.tests= +F455234B-2A3C-140A-17C3-683D7820A733.sonar.sources=\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/project.packagespec.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/project.assets.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/gitversion.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.dgspec.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/QuanTAlib.Tests.csproj.nuget.dgspec.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/project.packagespec.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/project.assets.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/net9.0/QuanTAlib.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/net10.0/QuanTAlib.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.sourcelink.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.sourcelink.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.sourcelink.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net9.0/QuanTAlib.Tests.runtimeconfig.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net9.0/QuanTAlib.Tests.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net10.0/QuanTAlib.Tests.runtimeconfig.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/net10.0/QuanTAlib.Tests.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net8.0/QuanTAlib.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net9.0/QuanTAlib.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net10.0/QuanTAlib.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/Debug/net9.0/QuanTAlib.Tests.sourcelink.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/tests/Debug/net10.0/QuanTAlib.Tests.sourcelink.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net9.0/QuanTAlib.Tests.runtimeconfig.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net9.0/QuanTAlib.Tests.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net10.0/QuanTAlib.Tests.runtimeconfig.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/tests/Debug/net10.0/QuanTAlib.Tests.deps.json",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/Directory.Build.props",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/daily_IBM.csv",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/GBM.Notebook.dib",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/IFeed.md",\ +"/Users/mihakralj/Github/QuanTAlib/lib/TestResults/09aa8f8b-17ca-430d-be58-992d5ce2aacd/coverage.opencover.xml",\ +"/Users/mihakralj/Github/QuanTAlib/lib/TestResults/b06e7fe4-4f16-46e2-8b46-bf971ee7d63d/coverage.cobertura.xml",\ +"/Users/mihakralj/Github/QuanTAlib/lib/TestResults/d5449c1c-f3e9-43cc-b9d9-304cd71e763e/coverage.opencover.xml" + +F455234B-2A3C-140A-17C3-683D7820A733.sonar.cs.analyzer.projectOutPaths=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1" +F455234B-2A3C-140A-17C3-683D7820A733.sonar.cs.roslyn.reportFilePaths=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1/Issues.json" +F455234B-2A3C-140A-17C3-683D7820A733.sonar.cs.scanner.telemetry=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/1/Telemetry.json" + +F455234B-2A3C-140A-17C3-683D7820A733.sonar.working.directory=/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar/mod1 +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.projectKey=mihakralj_QuanTAlib:953F0406-DD9B-406E-993D-6D988D5F5423 +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.projectName=QuanTAlib.Tests +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.projectBaseDir=/Users/mihakralj/Github/QuanTAlib/lib +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.sourceEncoding=utf-8 +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.sources= +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.tests=\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/Ema.Validation.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/averages/ema/EmaVector.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tbarseries/TBarSeries.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/core/tvalue/TValue.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/csv/CsvFeed.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/feeds/gbm/Gbm.Tests.cs",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net10.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net8.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/net9.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/QuanTAlib.0.7.14-simd-dev.1.nupkg",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/Debug/QuanTAlib.0.7.14-simd-dev.1.snupkg",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/net10.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/bin/net9.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.AssemblyInfoInputs.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.assets.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.AssemblyReference.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.CoreCompileInputs.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.csproj.FileListAbsolute.txt",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net10.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.AssemblyInfoInputs.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.assets.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.csproj.CoreCompileInputs.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.csproj.FileListAbsolute.txt",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net8.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.AssemblyInfoInputs.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.assets.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.csproj.CoreCompileInputs.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.csproj.FileListAbsolute.txt",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/quantalib.GeneratedMSBuildEditorConfig.editorconfig",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/net9.0/QuanTAlib.pdb",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/QuanTAlib.0.7.14-simd-dev.1.nuspec",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/Debug/QuanTAlib.0.7.14-simd-dev.1.symbols.nuspec",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/project.nuget.cache",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.g.props",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/quantalib.csproj.nuget.g.targets",\ +"/Users/mihakralj/Github/QuanTAlib/lib/obj/rider.project.restore.info" + +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.cs.analyzer.projectOutPaths=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2" +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.cs.roslyn.reportFilePaths=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2/Issues.json" +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.cs.scanner.telemetry=\ +"/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/2/Telemetry.json" + +953F0406-DD9B-406E-993D-6D988D5F5423.sonar.working.directory=/Users/mihakralj/Github/QuanTAlib/.sonarqube/out/.sonar/mod2 +sonar.cs.opencover.reportsPaths=**/coverage.opencover.xml +sonar.organization=mihakralj-quantalib +sonar.exclusions=**/coverage.opencover.xml +sonar.visualstudio.enable=false +sonar.host.url=https://sonarcloud.io + +sonar.modules=D8F03B19-F99F-475F-8951-85C9D2258B73,F455234B-2A3C-140A-17C3-683D7820A733,953F0406-DD9B-406E-993D-6D988D5F5423 + diff --git a/.sonarqube/out/ucfg2/cs/00DA18E40ED34089D03AC605EFA121C19E1E65ED05BD8F211C4C660FD8471406.lock b/.sonarqube/out/ucfg2/cs/00DA18E40ED34089D03AC605EFA121C19E1E65ED05BD8F211C4C660FD8471406.lock new file mode 100644 index 00000000..e69de29b diff --git a/.sonarqube/out/ucfg2/cs/0_1.ucfgs b/.sonarqube/out/ucfg2/cs/0_1.ucfgs new file mode 100644 index 0000000000000000000000000000000000000000..68fb3fd48ad6e0bb89c11116c89cdfadc449a339 GIT binary patch literal 277433 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 +>a0V5hg*9lL9R)H9Q8%V@K-J&P$s9#1Tos zcqa>YiJ!QAZ4XQK$!q`TzjlCy2l<+JTZ-;KsJfbEhk#oE@R3|fBVIJ*YItI7^!Q-$ z^wh}!lG$Q~1dqHgJ1#P^RgvoqBe$VK4*|Js@Xwm~Bx^GrWxUevjKWLIe9%F4fu^K0 zY@|3|H$9BIvBr~_g;n4RMlZ%(uNEKi8Fa{lTz}?i3?cg2f1cqEpLg0{<2~v=j27Yd ze*QKwtO~6ZG3J8zE=u5#oJWa$XaKMzuQ49pVW=~&amjk)9dZwv$~*Y{9?Uj0!^ZR~ z7MMiPZhc^i<5LGDKQt)IyX}VtE4B9z4ekr{CctxPM_=Xz{^`VnFLFwKvD9dy zq>CliXx2dtnw`-Ek3sVAjV4Vb3U{(_PpOGS;a(Q*6HCgi97+zbq||7lY&FZQ(d-Yi za`o-0Z!{~&4TO=KtB@Xe{$LP& zi6-Ss2z0V$6Tc7ew=rD6zmj}45zQtu%`1VCRE1@fxs9iH8uAsWg2rs(@em*1D`pdj zQo?;Ev#Biav1Zds?R}xa{T$6Eo=Y2FBeNG!MDu7il~+WwiPziM;AmzOZ?EIqRc6yF zKF5c>Rf?zGMAd#i-5zE)@sd@)v75F7Dk7!*Q7M*_k+In5sfA}GFbH=LUttW{S2TtUzZ&IN?HIB_=oFTD4P$yX zC5$55X=rRAjU%&(BcrQ4gt?o99!eBRw#rZ#Cxr{OW69d!vH~WL@s)Sg4JL~iEB4$P zpa+IVlnI!@Na5V{yhe#lO&5_UdaeS$zQ!}w*YGu=B=8GmjV!Z)UoYWP0ax{}^V7xG zo%W0$OQj`gi5KZuK)_?=d`)6Zd5xt~N<3FG7kt&3G03LQF{`hqZFonlM$2gp6xN6u zH#L;1vwn8++2&N|c~F_nNhp=HMJ10O zN>#s!{=j>Y&ham5piexpGJ_JlO{tA&z_+;F`xfB@u7lEgQ%ft3$3qjRrqi_wJ(B^gl0si?3OCgt zng{DNL^+$E=Meo>)>;P zn_FKeo{3P!>sOk_wz^FuHjLKQX|mDc4LFR2D8^<1`VQfZzT>oSOflfi!bL^MR83c0 zt=ktP@8_g@s-)%?IX@xJDbDGQk$TE{Bev^-;BrljN1NHAEpknKsdv^rjSAo8k>tB< zCoj5iVIdrEtQZ{rB~*5BVtRUFT+Ak$s?~d9G`{-YNHtGxWO!HToV~`aOQ16^32P@P?WU1He`C)4IUn#r5h;{7eH; zXAAie*$NHpR(_EhsFim`VrZ_f(ZM&6;T>{)jnI$E>lVKkhpMixgGb(fIWF9XWhj-B z>kT8fr9y`Rxoq&ycIjYiR?GjGOYEQl<~}C0335@W!(B11?2Hj}t3z{GwwAoU(q7zD zS|WWkA|~0y-)6O-{-9XQ#|CVFOke$dgUyX(!vxl zor@0*0{=s1p+Gl!Z)|Xp>fUVz*8_%LLJlBswHB8qhm+Oje+w>=EfBHbpCMkKPoY>t1p_Y`EqkaJ{RPt5hC|&UIUA zs}VOxuJ>TIMB3TT)HM~uK)}3)(zS~{#Pc9vUs_#CrmG&AOik)0L&{K@;aHpDy*#vO z>GF0dL_jeGs{1|u#7Bwfuv|qh?a6BoQVRH&u9j83p(1Y^v~l1)sM9fh26BDLXK{Z0C-hp><|Y%#Ogvo32c! z!ASWbuj+oNS9SQ+D8K4o)!`PVmA5ecv$(1QjSZx6Xf{`Myr~7D5fVCzo7%DsY{bj6 zUti%aKt_T&0z-O<-!NW+=1cCxP}ayYdnblKNVyaHv9tWD)}PRQ_V*q4cRBr~ zavl#>$pg#Y|2;eQmss}Kn2*9gC;Okn&Pj1c<`_N=FfR|vmq@v1I^O@ClzVB%f8!Ex z;hnII_Fp*di@Y~GsVDsL&k|%DBN&+CEgU+1YI=0M0OarS$nSV_UH>9c7AV{*>MX{7@hC>*J35Seb}1=vfcq&1Lm-Zd}VF pBfBfJ7qSs;42`=~8ke3$Q#bHy7>xP=jrv~N>iD)c!rFJl`G4?^*4qF8 literal 0 HcmV?d00001 diff --git a/.sonarqube/out/ucfg2/cs/0_2.typedefs b/.sonarqube/out/ucfg2/cs/0_2.typedefs new file mode 100644 index 00000000..38e24f91 --- /dev/null +++ b/.sonarqube/out/ucfg2/cs/0_2.typedefs @@ -0,0 +1,190 @@ +p +QuanTAlib.SourceType System.EnumSystem.ValueTypeobject1 + SourceType()!QuanTAlib.SourceType.SourceType()` +QuanTAlib.MaType System.EnumSystem.ValueTypeobject% +MaType()QuanTAlib.MaType.MaType() +6QuanTAlib.IndicatorExtensions.DataSourceInputAttribute5TradingPlatform.BusinessLayer.InputParameterAttributeSystem.Attributeobject +%DataSourceInputAttribute(string, int)\QuanTAlib.IndicatorExtensions.DataSourceInputAttribute.DataSourceInputAttribute(string, int) + QuanTAlib.Emaobject" +Ema(int)QuanTAlib.Ema.Ema(int)( + Ema(double)QuanTAlib.Ema.Ema(double)< +GetValidValue(double)#QuanTAlib.Ema.GetValidValue(double)N +Update(QuanTAlib.TValue, bool),QuanTAlib.Ema.Update(QuanTAlib.TValue, bool)D +Update(QuanTAlib.TSeries)'QuanTAlib.Ema.Update(QuanTAlib.TSeries) +Reset()QuanTAlib.Ema.Reset()$ + Value.getQuanTAlib.Ema.Value.get$ + Value.setQuanTAlib.Ema.Value.set$ + IsHot.getQuanTAlib.Ema.IsHot.get$ + IsHot.setQuanTAlib.Ema.IsHot.set +QuanTAlib.TSeriesobject+System.Collections.Generic.IReadOnlyList$ +Pub.addQuanTAlib.TSeries.Pub.add* + +Pub.removeQuanTAlib.TSeries.Pub.remove( + TSeries()QuanTAlib.TSeries.TSeries(). + TSeries(int)QuanTAlib.TSeries.TSeries(int) +WTSeries(System.Collections.Generic.List, System.Collections.Generic.List)iQuanTAlib.TSeries.TSeries(System.Collections.Generic.List, System.Collections.Generic.List)d +Add(QuanTAlib.TValue, bool)ESystem.Collections.Generic.ICollection.Add(QuanTAlib.TValue, bool)X +Add(QuanTAlib.TValue)?System.Collections.Generic.ICollection.Add(QuanTAlib.TValue)\ +Add(long, double, bool)ASystem.Collections.Generic.ICollection.Add(long, double, bool)r +"Add(System.DateTime, double, bool)LSystem.Collections.Generic.ICollection.Add(System.DateTime, double, bool) +3Add(System.Collections.Generic.IEnumerable)]System.Collections.Generic.ICollection.Add(System.Collections.Generic.IEnumerable)L +GetEnumerator()9System.Collections.Generic.ICollection.GetEnumerator()r +.System.Collections.IEnumerable.GetEnumerator()@QuanTAlib.TSeries.System.Collections.IEnumerable.GetEnumerator()> +Name.get2System.Collections.Generic.ICollection.Name.get> +Name.set2System.Collections.Generic.ICollection.Name.set@ + Count.get3System.Collections.Generic.ICollection.Count.get@ + Count.set3System.Collections.Generic.ICollection.Count.setH + this[int].get7System.Collections.Generic.ICollection.this[int].getH + this[int].set7System.Collections.Generic.ICollection.this[int].set> +Last.get2System.Collections.Generic.ICollection.Last.get> +Last.set2System.Collections.Generic.ICollection.Last.setH + LastValue.get7System.Collections.Generic.ICollection.LastValue.getH + LastValue.set7System.Collections.Generic.ICollection.LastValue.setF + LastTime.get6System.Collections.Generic.ICollection.LastTime.getF + LastTime.set6System.Collections.Generic.ICollection.LastTime.setB + +Values.get4System.Collections.Generic.ICollection.Values.getB + +Values.set4System.Collections.Generic.ICollection.Values.set@ + Times.get3System.Collections.Generic.ICollection.Times.get@ + Times.set3System.Collections.Generic.ICollection.Times.set +QuanTAlib.TBarSeriesobject+System.Collections.Generic.IReadOnlyList' +Pub.addQuanTAlib.TBarSeries.Pub.add- + +Pub.removeQuanTAlib.TBarSeries.Pub.remove1 + TBarSeries()!QuanTAlib.TBarSeries.TBarSeries()7 +TBarSeries(int)$QuanTAlib.TBarSeries.TBarSeries(int)` +Add(QuanTAlib.TBar, bool)CSystem.Collections.Generic.ICollection.Add(QuanTAlib.TBar, bool) +7Add(long, double, double, double, double, double, bool)aSystem.Collections.Generic.ICollection.Add(long, double, double, double, double, double, bool) +BAdd(System.DateTime, double, double, double, double, double, bool)lSystem.Collections.Generic.ICollection.Add(System.DateTime, double, double, double, double, double, bool) +Add(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable)System.Collections.Generic.ICollection.Add(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable)L +GetEnumerator()9System.Collections.Generic.ICollection.GetEnumerator()u +.System.Collections.IEnumerable.GetEnumerator()CQuanTAlib.TBarSeries.System.Collections.IEnumerable.GetEnumerator()> +Name.get2System.Collections.Generic.ICollection.Name.get> +Name.set2System.Collections.Generic.ICollection.Name.set> +Open.get2System.Collections.Generic.ICollection.Open.get> +Open.set2System.Collections.Generic.ICollection.Open.set> +High.get2System.Collections.Generic.ICollection.High.get> +High.set2System.Collections.Generic.ICollection.High.set< +Low.get1System.Collections.Generic.ICollection.Low.get< +Low.set1System.Collections.Generic.ICollection.Low.set@ + Close.get3System.Collections.Generic.ICollection.Close.get@ + Close.set3System.Collections.Generic.ICollection.Close.setB + +Volume.get4System.Collections.Generic.ICollection.Volume.getB + +Volume.set4System.Collections.Generic.ICollection.Volume.set8 +O.get/System.Collections.Generic.ICollection.O.get8 +O.set/System.Collections.Generic.ICollection.O.set8 +H.get/System.Collections.Generic.ICollection.H.get8 +H.set/System.Collections.Generic.ICollection.H.set8 +L.get/System.Collections.Generic.ICollection.L.get8 +L.set/System.Collections.Generic.ICollection.L.set8 +C.get/System.Collections.Generic.ICollection.C.get8 +C.set/System.Collections.Generic.ICollection.C.set8 +V.get/System.Collections.Generic.ICollection.V.get8 +V.set/System.Collections.Generic.ICollection.V.set@ + Count.get3System.Collections.Generic.ICollection.Count.get@ + Count.set3System.Collections.Generic.ICollection.Count.setH + this[int].get7System.Collections.Generic.ICollection.this[int].getH + this[int].set7System.Collections.Generic.ICollection.this[int].set> +Last.get2System.Collections.Generic.ICollection.Last.get> +Last.set2System.Collections.Generic.ICollection.Last.setF + LastTime.get6System.Collections.Generic.ICollection.LastTime.getF + LastTime.set6System.Collections.Generic.ICollection.LastTime.setF + LastOpen.get6System.Collections.Generic.ICollection.LastOpen.getF + LastOpen.set6System.Collections.Generic.ICollection.LastOpen.setF + LastHigh.get6System.Collections.Generic.ICollection.LastHigh.getF + LastHigh.set6System.Collections.Generic.ICollection.LastHigh.setD + LastLow.get5System.Collections.Generic.ICollection.LastLow.getD + LastLow.set5System.Collections.Generic.ICollection.LastLow.setH + LastClose.get7System.Collections.Generic.ICollection.LastClose.getH + LastClose.set7System.Collections.Generic.ICollection.LastClose.setJ +LastVolume.get8System.Collections.Generic.ICollection.LastVolume.getJ +LastVolume.set8System.Collections.Generic.ICollection.LastVolume.set +QuanTAlib.EmaIndicator'TradingPlatform.BusinessLayer.Indicator-TradingPlatform.BusinessLayer.ExecutionEntityobject1TradingPlatform.BusinessLayer.IWatchlistIndicator7 +EmaIndicator()%QuanTAlib.EmaIndicator.EmaIndicator()+ +OnInit()QuanTAlib.EmaIndicator.OnInit() +2OnUpdate(TradingPlatform.BusinessLayer.UpdateArgs)IQuanTAlib.EmaIndicator.OnUpdate(TradingPlatform.BusinessLayer.UpdateArgs) +?OnPaintChart(TradingPlatform.BusinessLayer.PaintChartEventArgs)VQuanTAlib.EmaIndicator.OnPaintChart(TradingPlatform.BusinessLayer.PaintChartEventArgs)/ + +Period.get!QuanTAlib.EmaIndicator.Period.get/ + +Period.set!QuanTAlib.EmaIndicator.Period.set/ + +Source.get!QuanTAlib.EmaIndicator.Source.get/ + +Source.set!QuanTAlib.EmaIndicator.Source.set? +ShowColdValues.get)QuanTAlib.EmaIndicator.ShowColdValues.get? +ShowColdValues.set)QuanTAlib.EmaIndicator.ShowColdValues.setC +MinHistoryDepths.get+QuanTAlib.EmaIndicator.MinHistoryDepths.getC +MinHistoryDepths.set+QuanTAlib.EmaIndicator.MinHistoryDepths.set +FTradingPlatform.BusinessLayer.IWatchlistIndicator.MinHistoryDepths.get]QuanTAlib.EmaIndicator.TradingPlatform.BusinessLayer.IWatchlistIndicator.MinHistoryDepths.get +FTradingPlatform.BusinessLayer.IWatchlistIndicator.MinHistoryDepths.set]QuanTAlib.EmaIndicator.TradingPlatform.BusinessLayer.IWatchlistIndicator.MinHistoryDepths.set5 + ShortName.get$QuanTAlib.EmaIndicator.ShortName.get5 + ShortName.set$QuanTAlib.EmaIndicator.ShortName.set +QuanTAlib.EmaVectorobject8 +EmaVector(int[])$QuanTAlib.EmaVector.EmaVector(int[])> +EmaVector(double[])'QuanTAlib.EmaVector.EmaVector(double[])0 + ResetAt(int) QuanTAlib.EmaVector.ResetAt(int)B +GetValidValue(double))QuanTAlib.EmaVector.GetValidValue(double)& +Reset()QuanTAlib.EmaVector.Reset()T +Update(QuanTAlib.TValue, bool)2QuanTAlib.EmaVector.Update(QuanTAlib.TValue, bool)P +Calculate(QuanTAlib.TSeries)0QuanTAlib.EmaVector.Calculate(QuanTAlib.TSeries), + +Values.getQuanTAlib.EmaVector.Values.get, + +Values.setQuanTAlib.EmaVector.Values.set +QuanTAlib.TValueSystem.ValueTypeobjectSystem.IEquatable= +TValue(long, double)%QuanTAlib.TValue.TValue(long, double)S +TValue(System.DateTime, double)0QuanTAlib.TValue.TValue(System.DateTime, double)) + +ToString()QuanTAlib.TValue.ToString()E +Equals(QuanTAlib.TValue))QuanTAlib.TValue.Equals(QuanTAlib.TValue)3 +Equals(object?) QuanTAlib.TValue.Equals(object?)/ + GetHashCode()QuanTAlib.TValue.GetHashCode()% +TValue()QuanTAlib.TValue.TValue()1 +AsDateTime.getQuanTAlib.TValue.AsDateTime.get1 +AsDateTime.setQuanTAlib.TValue.AsDateTime.set +QuanTAlib.EmaStateSystem.ValueTypeobject+ + +EmaState()QuanTAlib.EmaState.EmaState()% +Ema.getQuanTAlib.EmaState.Ema.get% +Ema.setQuanTAlib.EmaState.Ema.set! +E.getQuanTAlib.EmaState.E.get! +E.setQuanTAlib.EmaState.E.set) + IsHot.getQuanTAlib.EmaState.IsHot.get) + IsHot.setQuanTAlib.EmaState.IsHot.set +QuanTAlib.TBarSystem.ValueTypeobjectSystem.IEquatablew +2TBar(long, double, double, double, double, double)AQuanTAlib.TBar.TBar(long, double, double, double, double, double) +=TBar(System.DateTime, double, double, double, double, double)LQuanTAlib.TBar.TBar(System.DateTime, double, double, double, double, double)' + +ToString()QuanTAlib.TBar.ToString()? +Equals(QuanTAlib.TBar)%QuanTAlib.TBar.Equals(QuanTAlib.TBar)1 +Equals(object?)QuanTAlib.TBar.Equals(object?)- + GetHashCode()QuanTAlib.TBar.GetHashCode() +TBar()QuanTAlib.TBar.TBar()/ +AsDateTime.getQuanTAlib.TBar.AsDateTime.get/ +AsDateTime.setQuanTAlib.TBar.AsDateTime.set +O.getQuanTAlib.TBar.O.get +O.setQuanTAlib.TBar.O.set +H.getQuanTAlib.TBar.H.get +H.setQuanTAlib.TBar.H.set +L.getQuanTAlib.TBar.L.get +L.setQuanTAlib.TBar.L.set +C.getQuanTAlib.TBar.C.get +C.setQuanTAlib.TBar.C.set +V.getQuanTAlib.TBar.V.get +V.setQuanTAlib.TBar.V.set! +HL2.getQuanTAlib.TBar.HL2.get! +HL2.setQuanTAlib.TBar.HL2.set! +OC2.getQuanTAlib.TBar.OC2.get! +OC2.setQuanTAlib.TBar.OC2.set# +OHL3.getQuanTAlib.TBar.OHL3.get# +OHL3.setQuanTAlib.TBar.OHL3.set# +HLC3.getQuanTAlib.TBar.HLC3.get# +HLC3.setQuanTAlib.TBar.HLC3.set% + OHLC4.getQuanTAlib.TBar.OHLC4.get% + OHLC4.setQuanTAlib.TBar.OHLC4.set% + HLCC4.getQuanTAlib.TBar.HLCC4.get% + HLCC4.setQuanTAlib.TBar.HLCC4.set \ No newline at end of file diff --git a/.sonarqube/out/ucfg2/cs/1_4.ucfgs b/.sonarqube/out/ucfg2/cs/1_4.ucfgs new file mode 100644 index 0000000000000000000000000000000000000000..b5296ac46c8a44765d8ab7cfa39efd4e8d5fbf3e GIT binary patch literal 235835 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 z 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 L8#nrJ3t#F#yEl`> literal 0 HcmV?d00001 diff --git a/.sonarqube/out/ucfg2/cs/1_5.typedefs b/.sonarqube/out/ucfg2/cs/1_5.typedefs new file mode 100644 index 00000000..cfc7b7e0 --- /dev/null +++ b/.sonarqube/out/ucfg2/cs/1_5.typedefs @@ -0,0 +1,177 @@ + + QuanTAlib.Emaobject" +Ema(int)QuanTAlib.Ema.Ema(int)( + Ema(double)QuanTAlib.Ema.Ema(double)< +GetValidValue(double)#QuanTAlib.Ema.GetValidValue(double)N +Update(QuanTAlib.TValue, bool),QuanTAlib.Ema.Update(QuanTAlib.TValue, bool)D +Update(QuanTAlib.TSeries)'QuanTAlib.Ema.Update(QuanTAlib.TSeries) +Reset()QuanTAlib.Ema.Reset()$ + Value.getQuanTAlib.Ema.Value.get$ + Value.setQuanTAlib.Ema.Value.set$ + IsHot.getQuanTAlib.Ema.IsHot.get$ + IsHot.setQuanTAlib.Ema.IsHot.set +QuanTAlib.EmaVectorobject8 +EmaVector(int[])$QuanTAlib.EmaVector.EmaVector(int[])> +EmaVector(double[])'QuanTAlib.EmaVector.EmaVector(double[])0 + ResetAt(int) QuanTAlib.EmaVector.ResetAt(int)B +GetValidValue(double))QuanTAlib.EmaVector.GetValidValue(double)& +Reset()QuanTAlib.EmaVector.Reset()T +Update(QuanTAlib.TValue, bool)2QuanTAlib.EmaVector.Update(QuanTAlib.TValue, bool)P +Calculate(QuanTAlib.TSeries)0QuanTAlib.EmaVector.Calculate(QuanTAlib.TSeries), + +Values.getQuanTAlib.EmaVector.Values.get, + +Values.setQuanTAlib.EmaVector.Values.set +QuanTAlib.EmaStateSystem.ValueTypeobject+ + +EmaState()QuanTAlib.EmaState.EmaState()% +Ema.getQuanTAlib.EmaState.Ema.get% +Ema.setQuanTAlib.EmaState.Ema.set! +E.getQuanTAlib.EmaState.E.get! +E.setQuanTAlib.EmaState.E.set) + IsHot.getQuanTAlib.EmaState.IsHot.get) + IsHot.setQuanTAlib.EmaState.IsHot.set +QuanTAlib.TSeriesobject+System.Collections.Generic.IReadOnlyList$ +Pub.addQuanTAlib.TSeries.Pub.add* + +Pub.removeQuanTAlib.TSeries.Pub.remove( + TSeries()QuanTAlib.TSeries.TSeries(). + TSeries(int)QuanTAlib.TSeries.TSeries(int) +WTSeries(System.Collections.Generic.List, System.Collections.Generic.List)iQuanTAlib.TSeries.TSeries(System.Collections.Generic.List, System.Collections.Generic.List)d +Add(QuanTAlib.TValue, bool)ESystem.Collections.Generic.ICollection.Add(QuanTAlib.TValue, bool)X +Add(QuanTAlib.TValue)?System.Collections.Generic.ICollection.Add(QuanTAlib.TValue)\ +Add(long, double, bool)ASystem.Collections.Generic.ICollection.Add(long, double, bool)r +"Add(System.DateTime, double, bool)LSystem.Collections.Generic.ICollection.Add(System.DateTime, double, bool) +3Add(System.Collections.Generic.IEnumerable)]System.Collections.Generic.ICollection.Add(System.Collections.Generic.IEnumerable)L +GetEnumerator()9System.Collections.Generic.ICollection.GetEnumerator()r +.System.Collections.IEnumerable.GetEnumerator()@QuanTAlib.TSeries.System.Collections.IEnumerable.GetEnumerator()> +Name.get2System.Collections.Generic.ICollection.Name.get> +Name.set2System.Collections.Generic.ICollection.Name.set@ + Count.get3System.Collections.Generic.ICollection.Count.get@ + Count.set3System.Collections.Generic.ICollection.Count.setH + this[int].get7System.Collections.Generic.ICollection.this[int].getH + this[int].set7System.Collections.Generic.ICollection.this[int].set> +Last.get2System.Collections.Generic.ICollection.Last.get> +Last.set2System.Collections.Generic.ICollection.Last.setH + LastValue.get7System.Collections.Generic.ICollection.LastValue.getH + LastValue.set7System.Collections.Generic.ICollection.LastValue.setF + LastTime.get6System.Collections.Generic.ICollection.LastTime.getF + LastTime.set6System.Collections.Generic.ICollection.LastTime.setB + +Values.get4System.Collections.Generic.ICollection.Values.getB + +Values.set4System.Collections.Generic.ICollection.Values.set@ + Times.get3System.Collections.Generic.ICollection.Times.get@ + Times.set3System.Collections.Generic.ICollection.Times.set +QuanTAlib.CsvFeedobjectQuanTAlib.IFeed4 +CsvFeed(string)!QuanTAlib.CsvFeed.CsvFeed(string)2 +Next(ref bool) QuanTAlib.CsvFeed.Next(ref bool)* + +Next(bool)QuanTAlib.CsvFeed.Next(bool)X +!Fetch(int, long, System.TimeSpan)3QuanTAlib.CsvFeed.Fetch(int, long, System.TimeSpan) + QuanTAlib.GBMobjectQuanTAlib.IFeedx +3GBM(double, double, double, System.TimeSpan?, int?)AQuanTAlib.GBM.GBM(double, double, double, System.TimeSpan?, int?)* + NextNormal()QuanTAlib.GBM.NextNormal(). +Next(ref bool)QuanTAlib.GBM.Next(ref bool)& + +Next(bool)QuanTAlib.GBM.Next(bool)T +!Fetch(int, long, System.TimeSpan)/QuanTAlib.GBM.Fetch(int, long, System.TimeSpan) +QuanTAlib.IFeed +QuanTAlib.TBarSeriesobject+System.Collections.Generic.IReadOnlyList' +Pub.addQuanTAlib.TBarSeries.Pub.add- + +Pub.removeQuanTAlib.TBarSeries.Pub.remove1 + TBarSeries()!QuanTAlib.TBarSeries.TBarSeries()7 +TBarSeries(int)$QuanTAlib.TBarSeries.TBarSeries(int)` +Add(QuanTAlib.TBar, bool)CSystem.Collections.Generic.ICollection.Add(QuanTAlib.TBar, bool) +7Add(long, double, double, double, double, double, bool)aSystem.Collections.Generic.ICollection.Add(long, double, double, double, double, double, bool) +BAdd(System.DateTime, double, double, double, double, double, bool)lSystem.Collections.Generic.ICollection.Add(System.DateTime, double, double, double, double, double, bool) +Add(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable)System.Collections.Generic.ICollection.Add(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable)L +GetEnumerator()9System.Collections.Generic.ICollection.GetEnumerator()u +.System.Collections.IEnumerable.GetEnumerator()CQuanTAlib.TBarSeries.System.Collections.IEnumerable.GetEnumerator()> +Name.get2System.Collections.Generic.ICollection.Name.get> +Name.set2System.Collections.Generic.ICollection.Name.set> +Open.get2System.Collections.Generic.ICollection.Open.get> +Open.set2System.Collections.Generic.ICollection.Open.set> +High.get2System.Collections.Generic.ICollection.High.get> +High.set2System.Collections.Generic.ICollection.High.set< +Low.get1System.Collections.Generic.ICollection.Low.get< +Low.set1System.Collections.Generic.ICollection.Low.set@ + Close.get3System.Collections.Generic.ICollection.Close.get@ + Close.set3System.Collections.Generic.ICollection.Close.setB + +Volume.get4System.Collections.Generic.ICollection.Volume.getB + +Volume.set4System.Collections.Generic.ICollection.Volume.set8 +O.get/System.Collections.Generic.ICollection.O.get8 +O.set/System.Collections.Generic.ICollection.O.set8 +H.get/System.Collections.Generic.ICollection.H.get8 +H.set/System.Collections.Generic.ICollection.H.set8 +L.get/System.Collections.Generic.ICollection.L.get8 +L.set/System.Collections.Generic.ICollection.L.set8 +C.get/System.Collections.Generic.ICollection.C.get8 +C.set/System.Collections.Generic.ICollection.C.set8 +V.get/System.Collections.Generic.ICollection.V.get8 +V.set/System.Collections.Generic.ICollection.V.set@ + Count.get3System.Collections.Generic.ICollection.Count.get@ + Count.set3System.Collections.Generic.ICollection.Count.setH + this[int].get7System.Collections.Generic.ICollection.this[int].getH + this[int].set7System.Collections.Generic.ICollection.this[int].set> +Last.get2System.Collections.Generic.ICollection.Last.get> +Last.set2System.Collections.Generic.ICollection.Last.setF + LastTime.get6System.Collections.Generic.ICollection.LastTime.getF + LastTime.set6System.Collections.Generic.ICollection.LastTime.setF + LastOpen.get6System.Collections.Generic.ICollection.LastOpen.getF + LastOpen.set6System.Collections.Generic.ICollection.LastOpen.setF + LastHigh.get6System.Collections.Generic.ICollection.LastHigh.getF + LastHigh.set6System.Collections.Generic.ICollection.LastHigh.setD + LastLow.get5System.Collections.Generic.ICollection.LastLow.getD + LastLow.set5System.Collections.Generic.ICollection.LastLow.setH + LastClose.get7System.Collections.Generic.ICollection.LastClose.getH + LastClose.set7System.Collections.Generic.ICollection.LastClose.setJ +LastVolume.get8System.Collections.Generic.ICollection.LastVolume.getJ +LastVolume.set8System.Collections.Generic.ICollection.LastVolume.set +QuanTAlib.TBarSystem.ValueTypeobjectSystem.IEquatablew +2TBar(long, double, double, double, double, double)AQuanTAlib.TBar.TBar(long, double, double, double, double, double) +=TBar(System.DateTime, double, double, double, double, double)LQuanTAlib.TBar.TBar(System.DateTime, double, double, double, double, double)' + +ToString()QuanTAlib.TBar.ToString()? +Equals(QuanTAlib.TBar)%QuanTAlib.TBar.Equals(QuanTAlib.TBar)1 +Equals(object?)QuanTAlib.TBar.Equals(object?)- + GetHashCode()QuanTAlib.TBar.GetHashCode() +TBar()QuanTAlib.TBar.TBar()/ +AsDateTime.getQuanTAlib.TBar.AsDateTime.get/ +AsDateTime.setQuanTAlib.TBar.AsDateTime.set +O.getQuanTAlib.TBar.O.get +O.setQuanTAlib.TBar.O.set +H.getQuanTAlib.TBar.H.get +H.setQuanTAlib.TBar.H.set +L.getQuanTAlib.TBar.L.get +L.setQuanTAlib.TBar.L.set +C.getQuanTAlib.TBar.C.get +C.setQuanTAlib.TBar.C.set +V.getQuanTAlib.TBar.V.get +V.setQuanTAlib.TBar.V.set! +HL2.getQuanTAlib.TBar.HL2.get! +HL2.setQuanTAlib.TBar.HL2.set! +OC2.getQuanTAlib.TBar.OC2.get! +OC2.setQuanTAlib.TBar.OC2.set# +OHL3.getQuanTAlib.TBar.OHL3.get# +OHL3.setQuanTAlib.TBar.OHL3.set# +HLC3.getQuanTAlib.TBar.HLC3.get# +HLC3.setQuanTAlib.TBar.HLC3.set% + OHLC4.getQuanTAlib.TBar.OHLC4.get% + OHLC4.setQuanTAlib.TBar.OHLC4.set% + HLCC4.getQuanTAlib.TBar.HLCC4.get% + HLCC4.setQuanTAlib.TBar.HLCC4.set +QuanTAlib.TValueSystem.ValueTypeobjectSystem.IEquatable= +TValue(long, double)%QuanTAlib.TValue.TValue(long, double)S +TValue(System.DateTime, double)0QuanTAlib.TValue.TValue(System.DateTime, double)) + +ToString()QuanTAlib.TValue.ToString()E +Equals(QuanTAlib.TValue))QuanTAlib.TValue.Equals(QuanTAlib.TValue)3 +Equals(object?) QuanTAlib.TValue.Equals(object?)/ + GetHashCode()QuanTAlib.TValue.GetHashCode()% +TValue()QuanTAlib.TValue.TValue()1 +AsDateTime.getQuanTAlib.TValue.AsDateTime.get1 +AsDateTime.setQuanTAlib.TValue.AsDateTime.set \ No newline at end of file diff --git a/.sonarqube/out/ucfg2/cs/A4F62BF9625D36CB6BAE782CF9ACF55793FBB6B7D5721F48358D1F50F8934252.lock b/.sonarqube/out/ucfg2/cs/A4F62BF9625D36CB6BAE782CF9ACF55793FBB6B7D5721F48358D1F50F8934252.lock new file mode 100644 index 00000000..e69de29b diff --git a/lib/averages/ema/Ema.cs b/lib/averages/ema/Ema.cs index b8953167..16890183 100644 --- a/lib/averages/ema/Ema.cs +++ b/lib/averages/ema/Ema.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace QuanTAlib; -public struct EmaState +internal struct EmaState { public double Ema { get; set; } public double E { get; set; } @@ -81,7 +81,7 @@ public class Ema /// Assumes input has already been validated via GetValidValue(). /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static double Compute(double input, double alpha, ref EmaState state) + internal static double Compute(double input, double alpha, ref EmaState state) { state.Ema += alpha * (input - state.Ema); diff --git a/lib/averages/ema/EmaVector.cs b/lib/averages/ema/EmaVector.cs index c646fb64..d39198e9 100644 --- a/lib/averages/ema/EmaVector.cs +++ b/lib/averages/ema/EmaVector.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Generic; using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -11,11 +9,14 @@ namespace QuanTAlib; /// Calculates multiple EMAs with different periods/alphas for the same input series in parallel. /// Uses last-value substitution for invalid inputs (NaN/Infinity). /// +[SkipLocalsInit] public class EmaVector { private readonly double[] _alphas; private readonly double[] _emas; private readonly double[] _Es; + private readonly double[] _p_emas; + private readonly double[] _p_Es; private readonly int _count; private double _lastValidValue; @@ -34,11 +35,13 @@ public class EmaVector _alphas = new double[_count]; _emas = new double[_count]; _Es = new double[_count]; + _p_emas = new double[_count]; + _p_Es = new double[_count]; Values = new TValue[_count]; for (int i = 0; i < _count; i++) { - if (periods[i] <= 0) throw new ArgumentException("Period must be greater than 0", nameof(periods)); + ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(periods[i], 0); _alphas[i] = 2.0 / (periods[i] + 1); ResetAt(i); } @@ -54,11 +57,14 @@ public class EmaVector _alphas = new double[_count]; _emas = new double[_count]; _Es = new double[_count]; + _p_emas = new double[_count]; + _p_Es = new double[_count]; Values = new TValue[_count]; for (int i = 0; i < _count; i++) { - if (alphas[i] <= 0 || alphas[i] > 1) throw new ArgumentException("Alpha must be between 0 and 1", nameof(alphas)); + if (alphas[i] <= 0 || alphas[i] > 1) + throw new ArgumentOutOfRangeException(nameof(alphas), alphas[i], "Alpha must be between 0 (exclusive) and 1 (inclusive)"); _alphas[i] = alphas[i]; ResetAt(i); } @@ -103,10 +109,22 @@ public class EmaVector /// the last known good value, providing continuity in the output series. /// /// Input value + /// True for new bar, false for update to current bar (default: true) /// Array of compensated EMA values [MethodImpl(MethodImplOptions.AggressiveInlining)] - public TValue[] Update(TValue input) + public TValue[] Update(TValue input, bool isNew = true) { + if (isNew) + { + Array.Copy(_emas, _p_emas, _count); + Array.Copy(_Es, _p_Es, _count); + } + else + { + Array.Copy(_p_emas, _emas, _count); + Array.Copy(_p_Es, _Es, _count); + } + // Last-value substitution: replace non-finite inputs with last valid value double val = GetValidValue(input.Value); diff --git a/lib/core/simd/SimdExtensions.cs b/lib/core/simd/SimdExtensions.cs index b8853441..250cc4aa 100644 --- a/lib/core/simd/SimdExtensions.cs +++ b/lib/core/simd/SimdExtensions.cs @@ -82,6 +82,8 @@ public static class SimdExtensions /// /// Checks if span contains any non-finite values (NaN or Infinity). /// Returns true if any non-finite value is found. + /// Uses SIMD: NaN detected via v != v (NaN is the only value where this is true), + /// Infinity detected via |v| > MaxValue comparison. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool ContainsNonFinite(this ReadOnlySpan span) @@ -92,18 +94,25 @@ public static class SimdExtensions { int vectorSize = Vector.Count; int i = 0; + var maxValue = new Vector(double.MaxValue); for (; i <= span.Length - vectorSize; i += vectorSize) { var vector = new Vector(span.Slice(i, vectorSize)); - for (int j = 0; j < vectorSize; j++) - { - if (!double.IsFinite(vector[j])) - return true; - } + + // NaN check: NaN != NaN, so Vector.Equals(v, v) will be false for NaN lanes + var nanCheck = Vector.Equals(vector, vector); + if (!nanCheck.Equals(Vector.AllBitsSet)) + return true; + + // Infinity check: |v| > MaxValue (Infinity has magnitude > MaxValue) + var absVec = Vector.Abs(vector); + var infCheck = Vector.GreaterThan(absVec, maxValue); + if (!infCheck.Equals(Vector.Zero)) + return true; } - // Check remaining elements + // Check remaining elements with scalar for (; i < span.Length; i++) { if (!double.IsFinite(span[i])) diff --git a/lib/core/tbarseries/tbarseries.cs b/lib/core/tbarseries/tbarseries.cs index 762295ce..02fc022b 100644 --- a/lib/core/tbarseries/tbarseries.cs +++ b/lib/core/tbarseries/tbarseries.cs @@ -127,12 +127,26 @@ public class TBarSeries : IReadOnlyList public void Add(IEnumerable t, IEnumerable o, IEnumerable h, IEnumerable l, IEnumerable c, IEnumerable v) { - _t.AddRange(t); - _o.AddRange(o); - _h.AddRange(h); - _l.AddRange(l); - _c.AddRange(c); - _v.AddRange(v); + var tArr = t as long[] ?? t.ToArray(); + var oArr = o as double[] ?? o.ToArray(); + var hArr = h as double[] ?? h.ToArray(); + var lArr = l as double[] ?? l.ToArray(); + var cArr = c as double[] ?? c.ToArray(); + var vArr = v as double[] ?? v.ToArray(); + + if (tArr.Length != oArr.Length || oArr.Length != hArr.Length || + hArr.Length != lArr.Length || lArr.Length != cArr.Length || + cArr.Length != vArr.Length) + { + throw new ArgumentException("All arrays must have the same length"); + } + + _t.AddRange(tArr); + _o.AddRange(oArr); + _h.AddRange(hArr); + _l.AddRange(lArr); + _c.AddRange(cArr); + _v.AddRange(vArr); } public IEnumerator GetEnumerator() diff --git a/lib/feeds/csv/CsvFeed.cs b/lib/feeds/csv/CsvFeed.cs index 8ee67524..4602fce8 100644 --- a/lib/feeds/csv/CsvFeed.cs +++ b/lib/feeds/csv/CsvFeed.cs @@ -12,7 +12,7 @@ namespace QuanTAlib; public class CsvFeed : IFeed { private readonly TBarSeries _data; - + // Streaming state private int _currentIndex; private TBar _currentBar; @@ -38,27 +38,36 @@ public class CsvFeed : IFeed /// /// Parses CSV file into TBarSeries. /// Expected format: timestamp,open,high,low,close,volume + /// Memory-efficient: reads lines into list, reverses in-place (no LINQ allocations). /// private static TBarSeries LoadFromCsv(string filePath) { - var lines = File.ReadAllLines(filePath); - - if (lines.Length == 0) - throw new InvalidDataException("CSV file is empty"); + var dataLines = new List(); + using (var reader = new StreamReader(filePath)) + { + var header = reader.ReadLine(); + if (header is null) + throw new InvalidDataException("CSV file is empty"); - // Skip header, reverse to chronological order (oldest first) - var dataLines = lines.Skip(1).Reverse().ToArray(); - - if (dataLines.Length == 0) + while (!reader.EndOfStream) + { + var line = reader.ReadLine(); + if (!string.IsNullOrWhiteSpace(line)) + dataLines.Add(line); + } + } + + if (dataLines.Count == 0) throw new InvalidDataException("CSV file contains only header, no data"); - var series = new TBarSeries(dataLines.Length); + // Reverse in-place to chronological order (oldest first) + dataLines.Reverse(); - for (int i = 0; i < dataLines.Length; i++) + var series = new TBarSeries(dataLines.Count); + + for (int i = 0; i < dataLines.Count; i++) { var line = dataLines[i]; - if (string.IsNullOrWhiteSpace(line)) - continue; var parts = line.Split(','); if (parts.Length != 6) @@ -68,7 +77,7 @@ public class CsvFeed : IFeed { // Parse timestamp (YYYY-MM-DD format, assume UTC midnight) var timestamp = DateTime.ParseExact(parts[0].Trim(), "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal); - + // Parse OHLCV values double open = double.Parse(parts[1].Trim(), CultureInfo.InvariantCulture); double high = double.Parse(parts[2].Trim(), CultureInfo.InvariantCulture); @@ -142,7 +151,7 @@ public class CsvFeed : IFeed throw new ArgumentException("Count must be positive", nameof(count)); var result = new TBarSeries(count); - + // Find starting index int startIndex = 0; for (int i = 0; i < _data.Count; i++) @@ -157,15 +166,15 @@ public class CsvFeed : IFeed // Collect bars matching interval long expectedTime = startTime; int collected = 0; - + for (int i = startIndex; i < _data.Count && collected < count; i++) { var bar = _data[i]; - + // Check if bar time matches expected time (within tolerance) long timeDiff = Math.Abs(bar.Time - expectedTime); long tolerance = interval.Ticks / 2; // Allow 50% tolerance - + if (timeDiff <= tolerance) { result.Add(bar, isNew: true); @@ -177,7 +186,7 @@ public class CsvFeed : IFeed // Gap in data - skip forward long gaps = (bar.Time - expectedTime) / interval.Ticks; expectedTime += (gaps + 1) * interval.Ticks; - + if (Math.Abs(bar.Time - expectedTime + interval.Ticks) <= tolerance) { result.Add(bar, isNew: true); diff --git a/lib/feeds/gbm/gbm.cs b/lib/feeds/gbm/gbm.cs index 40418d1f..942cdfb4 100644 --- a/lib/feeds/gbm/gbm.cs +++ b/lib/feeds/gbm/gbm.cs @@ -1,4 +1,3 @@ -using System; using System.Runtime.CompilerServices; namespace QuanTAlib; @@ -8,9 +7,10 @@ namespace QuanTAlib; /// Generates realistic price data for testing indicators and strategies. /// Stateless design - only maintains minimal state needed for price continuity. /// +[SkipLocalsInit] public class GBM : IFeed { - private readonly Random _rnd = new(); + private readonly Random _rnd; private double _lastPrice; private long _lastTime; @@ -35,26 +35,32 @@ public class GBM : IFeed /// /// Creates a new GBM generator. /// - /// Initial price (default: 100.0) + /// Initial price (default: 100.0, must be positive) /// Annual drift/return rate (default: 0.05 = 5%) - /// Annual volatility (default: 0.2 = 20%) + /// Annual volatility (default: 0.2 = 20%, must be non-negative) /// Default timeframe for bars (default: 1 minute) + /// Optional random seed for reproducibility (default: null for non-deterministic) public GBM( double startPrice = 100.0, double mu = 0.05, double sigma = 0.2, - TimeSpan? defaultTimeframe = null) + TimeSpan? defaultTimeframe = null, + int? seed = null) { + ArgumentOutOfRangeException.ThrowIfNegativeOrZero(startPrice); + ArgumentOutOfRangeException.ThrowIfNegative(sigma); + + _rnd = seed.HasValue ? new Random(seed.Value) : new Random(); _lastPrice = startPrice; _lastTime = DateTime.UtcNow.Ticks; _mu = mu; _sigma = sigma; - + // Use provided timeframe or default to 1 minute var timeframe = defaultTimeframe ?? TimeSpan.FromMinutes(1); _defaultTimeStep = timeframe.Ticks; - + // Calculate dt based on timeframe (assuming 252 trading days/year, 6.5 hours/day) double minutesPerYear = 252.0 * 6.5 * 60.0; _dt = timeframe.TotalMinutes / minutesPerYear; @@ -94,12 +100,12 @@ public class GBM : IFeed public TBar Next(ref bool isNew) { // GBM always honors request - parameter unchanged - + if (isNew || !_hasCurrentBar) { // Generate new bar long currentTime = _lastTime + _defaultTimeStep; - + double z = NextNormal(); double price = _lastPrice * Math.Exp(_drift + _vol * z); double volume = 1000 + _rnd.NextDouble() * 1000; @@ -199,10 +205,10 @@ public class GBM : IFeed // Update internal state to continue from end of batch _lastPrice = currentPrice; _lastTime = currentTime - timeStep; // Last bar time, not next bar time - + // Bulk add to series series.Add(t, o, h, l, c, v); - + // Reset streaming state after batch _hasCurrentBar = false;