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 8j
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&jr
+
!"#$%&'()*+,-/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
+Close8 =
+;= >
+[
+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
+$num2 3
+,3 4
+E5 6
+=7 8
+$num9 <
+,< =
+IsHot> C
+=D E
+falseF 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
+doublez
+>
+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 444 55 466
+66 66 99 99 :: :: ;; ;; << << == == >> >> @@ @@
@@ BB BB BB. /CC CC CC 5
CCQ II II II KK LL OO PP VQQ RR RR !SS SS SS! 'UU
+UU XX ZZ ]] ^^ __ ``
+`` bb bb
bb ff gg
jj kk *ll Umm Mnn oo /pp eqq :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
+
+
+
+
%' : ) *, -/ 35 68 9
+ & ( (
+ "$ '- 7 &3 5
+ ! $& )/ 3
+
+ ( ** .6 7C D
+ 1 2!! !! !! !!!) *!!3 F!!X Y!!b k%%
%% %% ''
'' )) ,,
,, ,, ,,% /.. .. // //$ 0//J V00 22 22 "221 [55
+55 55 55& 977 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 RRR 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- 1yy: >yyG JyyK Q{{ {{ !||
+|| || ||# )||1 5||> B||K N||O U~~
+~~ ~~ ~~ &
+
+
+
+
+
+
+
+) -
+
+* A
+ !
+
+
+
+
+
+
+
+
+
+
+ #
+
+
+F/Users/mihakralj/Github/QuanTAlib/quantower/../lib/averages/ema/Ema.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $ '2 39 <F K
+
+ V
+ >
+
+
+ V
+ ]
+
+
& ( * !! "" M##
+## ## %%
+%% && && && '&&( G(( ((! "++ ,, :-- .. E//
+// // 11
+11 11" #22 22 22 '22( G77 88 99 ::
+:: :: :: &::' *<< == E>> ??
+?? AA BB VCC DD DD !EE EE EE! 'GG
+GG JJ LL OO PP $QQ ERR SS SS !TT TT
TT TT# )TT1 7TT? BTTC KXX YY
+[[ \\% *]]" %__ dd gg hh )ii jj /kk ell 0mm mm !nn
+nn nn nn' +nn4 8pp
+tt yy Szz {{# &|| || }}
+
+ +
+
+ 1
+ %
+
+
+
+ !
+
+
+
+
+
+
+
+
+
+
+
+
+ &
+
+ &
+
+
+ +
+
+
+
+
+ W
+
+' *
+ 3
+ ;
+
+
+' (
+7 8
+
+
+
+
+ B
+
+ 1
+ /
+ %
+
+
+
+
+$ +
+4 7
+
+
+
+
+
+
+
+
+
+
+
+
+
+D/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/tbar/TBar.cs
+
+
+
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+) -
+
+
+
+
+
+
+ " %, 8 <
+ !" 3I LP S
+ !" 3I LP S
+ !" 3I LP S
+ !" 3I LP S
+ !" 3I LP S F
+ #$ 5K Na d
+ #$ 5K Nc f
+ $% 6L Oi 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, 2009 ?00E K00S Y:: :: !;;
+;; ;; ;; #;;$ *;;+ /== == !>>
+>> >> >> #>>$ *>>+ />>8 ;@@ @@ !AA
+AA AA AA #AA$ ,AA- 1AA: =AAH TCC CC !DD
+DD DD DD) +DD+ ,DD8 KDDL PDDV XDDY ]DDc eDDf jDDo qDDr vDD}
+DD
+DD
+DD
+DD FF FF !GG
+GG GG OO
+OO OO OO &OO4 6OO7 ;PP
+PP PP PP) 1QQ
+QQ QQ QQ QQ# 'QQ. 2RR
+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 K00L N00U W00X Y00Y Z22 22 !33
+33 33 55
+55 55 55 &554 6557 =66
+66 66 66) 177
+77 77 77 77# )770 688
+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.. .. ... 611 22 E33 44
+44 44 66
66 66 77
77 77 88
88 88 99
99 99 ::
:: :: ;;
;; ;; == P>> >> >>, 2?? ?? ??, 2@@ @@ @@+ 0AA AA AA- 4BB BB BB. 6EE
+EE GG GG %HH KK
+KK KK KK MM MM %NN NN QQ
+QQ SS SS %TT TT TT !TT& 'TT. /TT6 7TT> ?TTF GTTN OTTT [WW
+WW WW &WW' 8WWN QWW` aWWh iWWm nXX
+XX XX (XX) :XXP SXXb cXXj kXXo uYY
+YY YY (YY) :YYP SYYb cYYj kYYo uZZ
+ZZ ZZ 'ZZ( 9ZZO RZZa bZZi jZZn 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, 2yy9 ?yyE KyyS Yyyb fyyo szz zz || || !}}
+}} }} }}# )}}0 6}}= C}}I O}}W ]}}f j}}s w~~ ~~
+
+
+
+
+ $
+) 4
+5 ;
+@ K
+L R
+W b
+c i
+n yz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '
+( N
+
+
+
+
+
+
+
+
+
+
+ !
+
+ ;
+N/Users/mihakralj/Github/QuanTAlib/quantower/../lib/core/simd/SimdExtensions.cs
+
+
+
+
+ M
+ Y
+
+
+
+
+
+
+
+
+
+ " 6
!
1 => D
!
% 12 8
!! !! !"" ""
"" ""% 1""2 8$$ $$ %% %%
%% '' ** -- -- !.. ..
.. ..% 1..2 800 00 11 11
11 33 66 99 99 !:: ::
:: ::* 6::7 =::E K<< << == ==
== ?? BB BB+ ,EE EE !FF FF
FF FF! 'FF: FFFG MHH HH !II II !JJ JJ
JJ LL MM OO RR SS HTT 6UU VVV 8WW XX XX !YY
+YY YY YY) -YY. :YY; A[[
+[[ [[! &]]
+]] ]]; A]]B H__ __ #__$ *`` `` aa aa aa %aa& ,aa. 4cc ee ee ee! 'ee( .gg \hh hh %ii ii% +ii, 0jj jj ll Umm mm #nn nn %oo oo% +oo, 0pp pp ss 3tt 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; >@ CE HK ^
+ * /9 <> AC FI [
+ . 3= @B EG JM ]
+ . 3= @B EG JM ^
+ / 4> AC FH KN b
+ , 1; >@ CE HK \
+ / 4> AC FH IL _ $
+ ), C '( .7 DF IV X / 23 9!! !! """ "" "## ## !$$ $$ #%% %%! +&& !&&# -'' '' *(( !((# -)) "))$ .** #**% ///
+// // //' +//, 5//A K//R \11 22 22 22 443 4446 G44O X553 4556 G55O X662 3665 F66N W774 5777 H77P Y885 6888 I88Q Z;; ;; $== >> ?? @@ AA BB CC DD EE FF GG
JJ JJ JJ MM
+MM MM MM# 'MM( 1MM= GOO PP PP PP RR3 4RR6 GRRO XSS3 4SS6 GSSO XTT2 3TT5 FTTN WUU4 5UU7 HUUP YVV5 6VV8 IVVQ Z[[
+[[ [[ [[" &[[' 0[[< O[[V \[[d g]]
+]]& *^^ `` aa bb cc ff gg hh hh jj
ll ll! &ll2 5ll6 ;pp
+pp pp pp( ,pp- 6ppB Upp\ fppo 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 8j6 #$%&'()*<@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 8j
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
+doublez
+>
+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
+$num2 3
+,3 4
+E5 6
+=7 8
+$num9 <
+,< =
+IsHot> C
+=D E
+falseF 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< B77 << 8== ==, 4==A B@@ ZAA AA %AA( +AA. 2DD EE HH II OJJ KK KK !LL LL NN
+PP QQ TT TT UU UU VV VV VV #VV& *WW WW WW !YY ZZ \\ \\ __ `` :aa Lbb cc cc !dd
+dd dd dd ff :hh
+jj kk mm nn nn( ,oo oo oo7 ;qq rr ss ss ss3 6ssM Qtt tt tt2 5ttL Pvv 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/ B44 66 77 77 <<
+<< == == == *==+ S?? ABB BB BB #DD DD
DD FF HH HH# &II II !JJ JJ JJ )JJ* ,JJ, GJJL MJJN jJJx yLL NN KOO OO (OO: ;OOE QOOS ^OOq
+OO QQ %RR RR $RR1 2RR< GSS SS $SS1 2SS< GTT TT #TT0 1TT; FUU UU %UU2 3UU= HVV VV &VV3 4VV> IXXM QZZ ZZ ZZ! %ZZ* ,ZZ- <ZZ= ?ZZ@ Q\\ \\ \\ )\\* ,\\, E\\J K\\L N\\T U`` cc dd :ee Hff gg gg !hh
+hh hh hh jj
+jj ll mm mm pp
+rr "ss uu Hvv 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 K00L N00U W00X Y00Y Z22 22 !33
+33 33 55
+55 55 55 &554 6557 =66
+66 66 66) 177
+77 77 77 77# )770 688
+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 RRR 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- 1yy: >yyG JyyK 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.. .. ... 611 22 E33 44
+44 44 66
66 66 77
77 77 88
88 88 99
99 99 ::
:: :: ;;
;; ;; == P>> >> >>, 2?? ?? ??, 2@@ @@ @@+ 0AA AA AA- 4BB BB BB. 6EE
+EE GG GG %HH KK
+KK KK KK MM MM %NN NN QQ
+QQ SS SS %TT TT TT !TT& 'TT. /TT6 7TT> ?TTF GTTN OTTT [WW
+WW WW &WW' 8WWN QWW` aWWh iWWm nXX
+XX XX (XX) :XXP SXXb cXXj kXXo uYY
+YY YY (YY) :YYP SYYb cYYj kYYo uZZ
+ZZ ZZ 'ZZ( 9ZZO RZZa bZZi jZZn 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, 2yy9 ?yyE KyyS Yyyb fyyo szz zz || || !}}
+}} }} }}# )}}0 6}}= C}}I O}}W ]}}f j}}s w~~ ~~
+
+
+
+
+ $
+) 4
+5 ;
+@ K
+L R
+W b
+c i
+n yz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '
+( N
+
+
+
+
+
+
+
+
+
+
+ !
+
+
+7/Users/mihakralj/Github/QuanTAlib/lib/core/tbar/TBar.cs
+
+
+
+ 3
+ 0
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+) -
+
+
+
+
+
+
+ " %, 8 <
+ !" 3I LP S
+ !" 3I LP S
+ !" 3I LP S
+ !" 3I LP S
+ !" 3I LP S F
+ #$ 5K Na d
+ #$ 5K Nc f
+ $% 6L Oi 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, 2009 ?00E K00S Y:: :: !;;
+;; ;; ;; #;;$ *;;+ /== == !>>
+>> >> >> #>>$ *>>+ />>8 ;@@ @@ !AA
+AA AA AA #AA$ ,AA- 1AA: =AAH TCC CC !DD
+DD DD DD) +DD+ ,DD8 KDDL PDDV XDDY ]DDc eDDf jDDo qDDr vDD}
+DD
+DD
+DD
+DD FF FF !GG
+GG GG OO
+OO OO OO &OO4 6OO7 ;PP
+PP PP PP) 1QQ
+QQ QQ QQ QQ# 'QQ. 2RR
+RR RR RR RR# 'RR. 2;
+A/Users/mihakralj/Github/QuanTAlib/lib/core/simd/SimdExtensions.cs
+
+
+
+
+ M
+ Y
+
+
+
+
+
+
+
+
+
+ " 6
!
1 => D
!
% 12 8
!! !! !"" ""
"" ""% 1""2 8$$ $$ %% %%
%% '' ** -- -- !.. ..
.. ..% 1..2 800 00 11 11
11 33 66 99 99 !:: ::
:: ::* 6::7 =::E K<< << == ==
== ?? BB BB+ ,EE EE !FF FF
FF FF! 'FF: FFFG MHH HH !II II !JJ JJ
JJ LL MM OO RR SS HTT 6UU VVV 8WW XX XX !YY
+YY YY YY) -YY. :YY; A[[
+[[ [[! &]]
+]] ]]; A]]B H__ __ #__$ *`` `` aa aa aa %aa& ,aa. 4cc ee ee ee! 'ee( .gg \hh hh %ii ii% +ii, 0jj jj ll Umm mm #nn nn %oo oo% +oo, 0pp pp ss 3tt 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 444 55 466
+66 66 99 99 :: :: ;; ;; << << == == >> >> @@ @@
@@ BB BB BB. /CC CC CC 5
CCQ II II II KK LL OO PP VQQ RR RR !SS SS SS! 'UU
+UU XX ZZ ]] ^^ __ ``
+`` bb bb
bb ff gg
jj kk *ll Umm Mnn oo /pp eqq :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 39 <F K
+
+ V
+ >
+
+
+ V
+ ]
+
+
& ( * !! "" M##
+## ## %%
+%% && && && '&&( G(( ((! "++ ,, :-- .. E//
+// // 11
+11 11" #22 22 22 '22( G77 88 99 ::
+:: :: :: &::' *<< == E>> ??
+?? AA BB VCC DD DD !EE EE EE! 'GG
+GG JJ LL OO PP $QQ ERR SS SS !TT TT
TT TT# )TT1 7TT? BTTC KXX YY
+[[ \\% *]]" %__ dd gg hh )ii jj /kk ell 0mm mm !nn
+nn nn nn' +nn4 8pp
+tt yy Szz {{# &|| || }}
+
+ +
+
+ 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 ACC 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 5cc 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 2yy4 6yy8 9yy; Gzz 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 67 >? P
+ '/ 23 :; ?
+ '/ 23 :; ="" ##
+## %% %% %% '' (( (($ ()) )) !++ 3,, ,,$ (-- // 00 00$ (11 44 55
+55 77 77 77 99 99 :: :: ;; ;; 3<< << !>> ?? ?? @@ AA DD EE
+EE GG GG GG II JJ JJ$ (LL 6MM MM$ )NN OO QQ RR RR$ (SS VV WW
+WW YY YY YY [[ "\\ \\ ]] ]] ^^ ^^ ``
`` #``% 4bb #ff <gg hh hh# $jj @kk ll ll! $mm nn qq rr
+rr tt tt tt vv vv vv $vv% )vv+ ,vv. /vv1 2vv4 5vv7 8vv: Fww 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 35 79 ;= >@ L ! # !!
"" "" $$ $$ $$ !$$" &$$( )$$+ ,$$. 0$$2 3$$5 6$$8 D%% %% %% #%%. 3'' (( (( %++
,, ,, .. .. .. !.." &..( )..+ ,... 0..2 3..5 6..8 D// // // #//. 511 33 33 (44 44 &55 55 $88
99 99 ;; ;; ;; #;;$ ,;;; ?== ?? ?? BB
CC CC EE EE EE 'EE( ,EE. /EE1 3EE5 7EE9 ;EE= >EE@ LFF FF FF #FF4 9HH 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+ 0oo rr
ss ss uu uu uu uu %uu' ,vv vv )xx {{
|| || ~~ ~~ ~~ ~~ %~~' ,
+
+# '
+
+
+
+
+
+
+! &
+( -
+
+
+
+! &
+( -
+
+
+
+
+
+
+
+! &
+( -
+
+
+
+! &
+( -
+
+
+
+
+
+
+
+! &
+( -
+
+
+
+! &
+( -
+
+
+
+
+
+
+
+! &
+( -
+
+
+
+! &
+( -
+
+
+
+
+
+
+
+! &
+( -
+
+
+
+! &
+( -
+
+
+
+
+
+
+
+! &
+( -
+
+
+
+! &
+( -
+ 6
+C/Users/mihakralj/Github/QuanTAlib/lib/core/tseries/TSeries.Tests.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
$
$% (
! %) ,. 13 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 900; >00@ B00D G00I M22# '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 9LL; >LL@ BLLD GLLI MNN# (PP SS
TT TT VV VV VV 'WW WW YY YY" %YY' )YY+ .YY0 4YY= A[[ \\ __
`` `` bb bb bb 'cc cc cc !cc" &cc( )cc+ -cc/ 1cc3 5cc7 8cc: Fee ee #ee% 'ee) ,ee. 2ee; ?gg hh kk
ll ll nn nn nn 'oo oo oo oo% (oo* -oo/ 2pp pp pp "pp' )pp+ -pp/ 1qq qq qq "qq' )qq+ -qq/ 1rr rr rr !rr& 'rr) +rr- /ss ss ss #ss( *ss, .ss0 2tt tt tt $tt) ,tt. 1tt3 6xx 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 3445 7449 ;44= >44@ L55 55 55 55) ,55. 1553 5557 :55< @77 88 88 %;;
<< << >> >> ?? ?? ?? ??% (??* -??/ 1??3 6??8 <AA CC DD DD GG
HH HH JJ JJ KK KK KK KK% (KK* -KK/ 1KK3 6KK8 <MM OO PP PP SS
TT TT VV VV WW WW WW WW% (WW* -WW/ 1WW3 6WW8 <YY [[ \\ \\ __
`` `` bb bb cc cc cc cc% (cc* -cc/ 1cc3 6cc8 <ee gg hh hh kk
ll ll nn nn oo oo oo oo% (oo* -oo/ 1oo3 6oo8 <qq ss tt tt ww
xx xx zz zz zz zz zz" %zz' *zz, .zz0 3zz5 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 FII 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. 4YY= >YYA BYYL OYYP S[[ \\ \\ \\ %^^ \__ __! *aa 'dd Egg 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/ 2113 <44 55
+55 77 77 77! $77& )99 99 '99/ 2993 <<< ==
+== ?? ?? ??" %??' *AA AA 'AA/ 2AA3 <DD EE
+EE GG GG GG! $GG& )II II 'II/ 2II3 <LL MM
+MM OO OO OO! $OO& )PP PP PP %RR RR# &RR' -RR. 6RR< ATT 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 Ejj mm# $qq rr
+rr tt tt tt tt! #uu uu uu %vv vv- 0vv1 4xx xx yy yy yy/ 3yy4 8zz zz zz/ 3zz4 :{{ {{ }} }}
}}
+
+ "
+& )
+
+
+
+
+
+
+
+
+
+
+
+
+
+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
+
+
+
+
+
+
+
+
&
+ !# &( +- 02 57 :< ? #$ *
+ !# )/ 24 79 <> AC 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- 0442 5447 :44< ?44A G55 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- 0ll2 5ll7 :ll< ?llA DllF Jmm mm mm #mm$ *nn nn nn6 8qq 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
+
+
+
+
+
+
+
+
+
+ '/ 23 67 8
'
/ 2
3 6
8 9
+ '/ 23 67 : '/ 23 68 ; '/ 23 67 :
+ !! !! !! !! ## ## %% %%# &%%' -%%. 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 0XX 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 Duu 0vv 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.SourceTypeSystem.EnumSystem.ValueTypeobject1
+SourceType()!QuanTAlib.SourceType.SourceType()`
+QuanTAlib.MaTypeSystem.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;