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 00000000..1b373ee9 Binary files /dev/null and b/.sonarqube/out/architecture/cs/0.1.udg differ diff --git a/.sonarqube/out/architecture/cs/1.1.udg b/.sonarqube/out/architecture/cs/1.1.udg new file mode 100644 index 00000000..a1c86550 Binary files /dev/null and b/.sonarqube/out/architecture/cs/1.1.udg differ diff --git a/.sonarqube/out/architecture/cs/2.1.udg b/.sonarqube/out/architecture/cs/2.1.udg new file mode 100644 index 00000000..15421ea4 Binary files /dev/null and b/.sonarqube/out/architecture/cs/2.1.udg differ 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 00000000..68fb3fd4 Binary files /dev/null and b/.sonarqube/out/ucfg2/cs/0_1.ucfgs differ 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 00000000..b5296ac4 Binary files /dev/null and b/.sonarqube/out/ucfg2/cs/1_4.ucfgs differ 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;