mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-07-27 17:27:43 +00:00
chore: remove gitignored files from tracking, update channels
- Remove .vscode/, __pycache__/, publish binaries, and .dll/.pdb files from git tracking (now covered by .gitignore)
This commit is contained in:
Vendored
-10
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"ms-dotnettools.csdevkit",
|
||||
"ms-dotnettools.csharp",
|
||||
"ms-dotnettools.dotnet-interactive-vscode",
|
||||
"bierner.markdown-mermaid",
|
||||
"visualstudioexptteam.vscodeintellicode",
|
||||
"SonarSource.sonarlint-vscode"
|
||||
]
|
||||
}
|
||||
Vendored
-216
@@ -1,216 +0,0 @@
|
||||
{
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
// GitHub Copilot Settings for QuanTAlib Workspace
|
||||
// Optimized for high-performance financial library development
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// Copilot Core Settings
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
// Enable Copilot completions (suggestions appear automatically)
|
||||
"github.copilot.editor.enableAutoCompletions": true,
|
||||
|
||||
// Enable Copilot for all file types
|
||||
"github.copilot.enable": {
|
||||
"*": true,
|
||||
"plaintext": false,
|
||||
"markdown": true,
|
||||
"scminput": false
|
||||
},
|
||||
|
||||
// Show inline suggestions
|
||||
"editor.inlineSuggest.enabled": true,
|
||||
|
||||
// Always show the inline suggestion toolbar
|
||||
"editor.inlineSuggest.showToolbar": "always",
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// Copilot Chat Settings (Manual Review Required)
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
// DO NOT auto-apply chat edits - require manual review for quality control
|
||||
"chat.editing.autoApply": "off",
|
||||
|
||||
// Confirm before removing edit requests
|
||||
"chat.editing.confirmEditRequestRemoval": true,
|
||||
|
||||
// Show chat panel on the side
|
||||
"chat.editor.wordWrap": "on",
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// Editor Settings for Productivity
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
// Enable quick suggestions in all contexts
|
||||
"editor.quickSuggestions": {
|
||||
"other": true,
|
||||
"comments": true,
|
||||
"strings": true
|
||||
},
|
||||
|
||||
// Show suggestions on trigger characters
|
||||
"editor.suggestOnTriggerCharacters": true,
|
||||
|
||||
// Accept suggestion on commit character (like dot, parenthesis)
|
||||
"editor.acceptSuggestionOnCommitCharacter": true,
|
||||
|
||||
// Faster suggestion appearance
|
||||
"editor.quickSuggestionsDelay": 0,
|
||||
|
||||
// Show snippet suggestions with other suggestions
|
||||
"editor.snippetSuggestions": "inline",
|
||||
|
||||
// Tab key behavior
|
||||
"editor.tabCompletion": "on",
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// C# Specific Settings
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
"[csharp]": {
|
||||
"editor.formatOnSave": true,
|
||||
"editor.formatOnPaste": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.organizeImports": "explicit"
|
||||
},
|
||||
"editor.quickSuggestions": {
|
||||
"other": true,
|
||||
"comments": true,
|
||||
"strings": true
|
||||
}
|
||||
},
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// Performance & Quality Control
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
// Save automatically (helps with Copilot context)
|
||||
"files.autoSave": "afterDelay",
|
||||
"files.autoSaveDelay": 1000,
|
||||
|
||||
// Force LF line endings (matches .gitattributes and .editorconfig)
|
||||
"files.eol": "\n",
|
||||
// Show whitespace (important for performance-critical code)
|
||||
"editor.renderWhitespace": "boundary",
|
||||
|
||||
// Show inline parameter hints
|
||||
"editor.inlayHints.enabled": "on",
|
||||
|
||||
// Highlight matching brackets
|
||||
"editor.bracketPairColorization.enabled": true,
|
||||
"editor.guides.bracketPairs": true,
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// Git Integration
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
// Auto-fetch git changes
|
||||
"git.autofetch": true,
|
||||
|
||||
// Confirm before synchronizing
|
||||
"git.confirmSync": false,
|
||||
|
||||
// Show inline blame
|
||||
"git.decorations.enabled": true,
|
||||
|
||||
"terminal.integrated.shellIntegration.enabled": true,
|
||||
"terminal.integrated.suggest.enabled": true,
|
||||
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// File Exclusions (Reduce Noise)
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
"files.exclude": {
|
||||
"**/bin": true,
|
||||
"**/obj": true,
|
||||
"**/.vs": true,
|
||||
"**/node_modules": true,
|
||||
"**/.git": false
|
||||
},
|
||||
|
||||
"search.exclude": {
|
||||
"**/bin": true,
|
||||
"**/obj": true,
|
||||
"**/node_modules": true,
|
||||
"**/.vs": true,
|
||||
"**/coverage": true
|
||||
},
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// .NET Specific Settings
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
"omnisharp.enableEditorConfigSupport": true,
|
||||
"omnisharp.enableRoslynAnalyzers": true,
|
||||
"dotnet.backgroundAnalysis.enabled": true,
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// Testing Integration
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
"dotnet.defaultSolution": "QuanTAlib.sln",
|
||||
"dotnet.testController.enabled": true,
|
||||
"dotnet.unitTestDebuggingEnabled": true,
|
||||
"dotnet.unitTests.runSettingsPath": ".config/coverage.runsettings",
|
||||
"dotnet.completion.showCompletionItemsFromUnimportedNamespaces": true,
|
||||
"dotnet.server.useOmnisharp": false,
|
||||
|
||||
// Python test discovery (pytest)
|
||||
"python.testing.pytestEnabled": true,
|
||||
"python.testing.unittestEnabled": false,
|
||||
"python.testing.pytestArgs": [
|
||||
"python"
|
||||
],
|
||||
"sonarlint.connectedMode.project": {
|
||||
"connectionId": "mihakralj-quantalib",
|
||||
"projectKey": "mihakralj_QuanTAlib"
|
||||
},
|
||||
"coderabbit.agentType": "Roo",
|
||||
"qodana.pathPrefix": "",
|
||||
"qodana.args": ["--config", ".qodana/qodana.yaml"],
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
// Terminal Settings
|
||||
// ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
// Set PowerShell 7 as the default terminal on Windows
|
||||
"terminal.integrated.defaultProfile.windows": "PowerShell",
|
||||
|
||||
// Terminal profiles for Windows
|
||||
"terminal.integrated.profiles.windows": {
|
||||
"PowerShell": {
|
||||
"source": "PowerShell",
|
||||
"icon": "terminal-powershell"
|
||||
},
|
||||
"Git Bash": {
|
||||
"path": "C:\\Program Files\\Git\\bin\\bash.exe",
|
||||
"icon": "terminal-bash"
|
||||
}
|
||||
},
|
||||
"qodana.projectId": "KbxmN",
|
||||
"github.copilot.mcpServers": {
|
||||
"code-to-tree": {
|
||||
"command": "C:\\github\\code-to-tree.exe"
|
||||
}
|
||||
},
|
||||
"coderabbit.autoReviewMode": "disabled"
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
// Keyboard Shortcuts Reference
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
// Tab - Accept inline suggestion
|
||||
// Ctrl+Right - Accept next word
|
||||
// Ctrl+Enter - Accept line
|
||||
// Esc - Dismiss suggestion
|
||||
// Alt+] - Next suggestion
|
||||
// Alt+[ - Previous suggestion
|
||||
// Ctrl+I - Open Copilot Chat
|
||||
//
|
||||
// Quality Control Reminders:
|
||||
// - Review all Copilot suggestions for optimization patterns
|
||||
// - Run tests after accepting: dotnet test
|
||||
// - Check performance impact with benchmarks
|
||||
// - Validate against reference implementations
|
||||
}
|
||||
Vendored
-47
@@ -1,47 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build",
|
||||
"detail": "dotnet build QuanTAlib.sln",
|
||||
"type": "process",
|
||||
"command": "dotnet",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/QuanTAlib.sln",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile",
|
||||
"group": { "kind": "build", "isDefault": true }
|
||||
},
|
||||
{
|
||||
"label": "Build Library",
|
||||
"detail": "dotnet build lib/quantalib.csproj (Debug, net10.0)",
|
||||
"type": "process",
|
||||
"command": "dotnet",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/lib/quantalib.csproj",
|
||||
"--configuration", "Debug",
|
||||
"--framework", "net10.0"
|
||||
],
|
||||
"problemMatcher": "$msCompile",
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "Test",
|
||||
"detail": "dotnet test lib/QuanTAlib.Tests.csproj (net10.0)",
|
||||
"type": "process",
|
||||
"command": "dotnet",
|
||||
"args": [
|
||||
"test",
|
||||
"${workspaceFolder}/lib/QuanTAlib.Tests.csproj",
|
||||
"--framework", "net10.0"
|
||||
],
|
||||
"problemMatcher": "$msCompile",
|
||||
"group": { "kind": "test", "isDefault": true },
|
||||
"presentation": { "reveal": "always", "panel": "new" }
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Buffers;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Numerics;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
@@ -413,14 +414,14 @@ public sealed class Aberr : ITValuePublisher, IDisposable
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
#pragma warning disable S1104 // Fields should not have public accessibility
|
||||
public ref struct BatchOutputs
|
||||
public readonly ref struct BatchOutputs
|
||||
{
|
||||
/// <summary>Output middle band (SMA of source)</summary>
|
||||
public Span<double> Middle;
|
||||
public readonly Span<double> Middle;
|
||||
/// <summary>Output upper band</summary>
|
||||
public Span<double> Upper;
|
||||
public readonly Span<double> Upper;
|
||||
/// <summary>Output lower band</summary>
|
||||
public Span<double> Lower;
|
||||
public readonly Span<double> Lower;
|
||||
#pragma warning restore S1104
|
||||
|
||||
/// <summary>
|
||||
@@ -432,12 +433,26 @@ public sealed class Aberr : ITValuePublisher, IDisposable
|
||||
Upper = upper;
|
||||
Lower = lower;
|
||||
}
|
||||
|
||||
public bool Equals(BatchOutputs other) =>
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Middle), ref MemoryMarshal.GetReference(other.Middle)) &&
|
||||
Middle.Length == other.Middle.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Upper), ref MemoryMarshal.GetReference(other.Upper)) &&
|
||||
Upper.Length == other.Upper.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Lower), ref MemoryMarshal.GetReference(other.Lower)) &&
|
||||
Lower.Length == other.Lower.Length;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(Middle.Length, Upper.Length, Lower.Length);
|
||||
public static bool operator ==(BatchOutputs left, BatchOutputs right) => left.Equals(right);
|
||||
public static bool operator !=(BatchOutputs left, BatchOutputs right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Internal state for scalar calculation.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
[SuppressMessage("NDepend", "ND1903:StructuresShouldBeImmutable", Justification = "Mutable calculation state accumulator by design")]
|
||||
private ref struct ScalarState
|
||||
{
|
||||
internal double SumSource;
|
||||
@@ -445,6 +460,16 @@ public sealed class Aberr : ITValuePublisher, IDisposable
|
||||
internal double LastValidValue;
|
||||
internal int BufferIndex;
|
||||
internal int TickCount;
|
||||
|
||||
public bool Equals(ScalarState other) =>
|
||||
SumSource.Equals(other.SumSource) && SumDeviation.Equals(other.SumDeviation) &&
|
||||
LastValidValue.Equals(other.LastValidValue) && BufferIndex == other.BufferIndex &&
|
||||
TickCount == other.TickCount;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(SumSource, SumDeviation, LastValidValue, BufferIndex, TickCount);
|
||||
public static bool operator ==(ScalarState left, ScalarState right) => left.Equals(right);
|
||||
public static bool operator !=(ScalarState left, ScalarState right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -455,6 +480,17 @@ public sealed class Aberr : ITValuePublisher, IDisposable
|
||||
{
|
||||
internal readonly Span<double> Source = source;
|
||||
internal readonly Span<double> Deviation = deviation;
|
||||
|
||||
public bool Equals(WorkBuffers other) =>
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Source), ref MemoryMarshal.GetReference(other.Source)) &&
|
||||
Source.Length == other.Source.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Deviation), ref MemoryMarshal.GetReference(other.Deviation)) &&
|
||||
Deviation.Length == other.Deviation.Length;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(Source.Length, Deviation.Length);
|
||||
public static bool operator ==(WorkBuffers left, WorkBuffers right) => left.Equals(right);
|
||||
public static bool operator !=(WorkBuffers left, WorkBuffers right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Buffers;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
@@ -475,14 +476,14 @@ public sealed class AccBands : ITValuePublisher, IDisposable
|
||||
/// </remarks>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
#pragma warning disable S1104 // Fields should not have public accessibility
|
||||
public ref struct BatchOutputs
|
||||
public readonly ref struct BatchOutputs
|
||||
{
|
||||
/// <summary>Output middle band (SMA of close)</summary>
|
||||
public Span<double> Middle;
|
||||
public readonly Span<double> Middle;
|
||||
/// <summary>Output upper band</summary>
|
||||
public Span<double> Upper;
|
||||
public readonly Span<double> Upper;
|
||||
/// <summary>Output lower band</summary>
|
||||
public Span<double> Lower;
|
||||
public readonly Span<double> Lower;
|
||||
#pragma warning restore S1104
|
||||
|
||||
/// <summary>
|
||||
@@ -494,6 +495,19 @@ public sealed class AccBands : ITValuePublisher, IDisposable
|
||||
Upper = upper;
|
||||
Lower = lower;
|
||||
}
|
||||
|
||||
public bool Equals(BatchOutputs other) =>
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Middle), ref MemoryMarshal.GetReference(other.Middle)) &&
|
||||
Middle.Length == other.Middle.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Upper), ref MemoryMarshal.GetReference(other.Upper)) &&
|
||||
Upper.Length == other.Upper.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Lower), ref MemoryMarshal.GetReference(other.Lower)) &&
|
||||
Lower.Length == other.Lower.Length;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(Middle.Length, Upper.Length, Lower.Length);
|
||||
public static bool operator ==(BatchOutputs left, BatchOutputs right) => left.Equals(right);
|
||||
public static bool operator !=(BatchOutputs left, BatchOutputs right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -501,14 +515,14 @@ public sealed class AccBands : ITValuePublisher, IDisposable
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
#pragma warning disable S1104 // Fields should not have public accessibility
|
||||
public ref struct BatchInputs
|
||||
public readonly ref struct BatchInputs
|
||||
{
|
||||
/// <summary>High price values</summary>
|
||||
public ReadOnlySpan<double> High;
|
||||
public readonly ReadOnlySpan<double> High;
|
||||
/// <summary>Low price values</summary>
|
||||
public ReadOnlySpan<double> Low;
|
||||
public readonly ReadOnlySpan<double> Low;
|
||||
/// <summary>Close price values</summary>
|
||||
public ReadOnlySpan<double> Close;
|
||||
public readonly ReadOnlySpan<double> Close;
|
||||
#pragma warning restore S1104
|
||||
|
||||
/// <summary>
|
||||
@@ -520,12 +534,26 @@ public sealed class AccBands : ITValuePublisher, IDisposable
|
||||
Low = low;
|
||||
Close = close;
|
||||
}
|
||||
|
||||
public bool Equals(BatchInputs other) =>
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(High), ref MemoryMarshal.GetReference(other.High)) &&
|
||||
High.Length == other.High.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Low), ref MemoryMarshal.GetReference(other.Low)) &&
|
||||
Low.Length == other.Low.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Close), ref MemoryMarshal.GetReference(other.Close)) &&
|
||||
Close.Length == other.Close.Length;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(High.Length, Low.Length, Close.Length);
|
||||
public static bool operator ==(BatchInputs left, BatchInputs right) => left.Equals(right);
|
||||
public static bool operator !=(BatchInputs left, BatchInputs right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Internal state for scalar calculation.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
[SuppressMessage("NDepend", "ND1903:StructuresShouldBeImmutable", Justification = "Mutable calculation state accumulator by design")]
|
||||
private ref struct ScalarState
|
||||
{
|
||||
internal double SumAdjHigh;
|
||||
@@ -536,6 +564,17 @@ public sealed class AccBands : ITValuePublisher, IDisposable
|
||||
internal double LastValidClose;
|
||||
internal int BufferIndex;
|
||||
internal int TickCount;
|
||||
|
||||
public bool Equals(ScalarState other) =>
|
||||
SumAdjHigh.Equals(other.SumAdjHigh) && SumAdjLow.Equals(other.SumAdjLow) &&
|
||||
SumClose.Equals(other.SumClose) && LastValidHigh.Equals(other.LastValidHigh) &&
|
||||
LastValidLow.Equals(other.LastValidLow) && LastValidClose.Equals(other.LastValidClose) &&
|
||||
BufferIndex == other.BufferIndex && TickCount == other.TickCount;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(SumAdjHigh, SumAdjLow, SumClose, BufferIndex, TickCount);
|
||||
public static bool operator ==(ScalarState left, ScalarState right) => left.Equals(right);
|
||||
public static bool operator !=(ScalarState left, ScalarState right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -547,6 +586,19 @@ public sealed class AccBands : ITValuePublisher, IDisposable
|
||||
internal readonly Span<double> AdjHigh = adjHigh;
|
||||
internal readonly Span<double> AdjLow = adjLow;
|
||||
internal readonly Span<double> Close = close;
|
||||
|
||||
public bool Equals(WorkBuffers other) =>
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(AdjHigh), ref MemoryMarshal.GetReference(other.AdjHigh)) &&
|
||||
AdjHigh.Length == other.AdjHigh.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(AdjLow), ref MemoryMarshal.GetReference(other.AdjLow)) &&
|
||||
AdjLow.Length == other.AdjLow.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Close), ref MemoryMarshal.GetReference(other.Close)) &&
|
||||
Close.Length == other.Close.Length;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(AdjHigh.Length, AdjLow.Length, Close.Length);
|
||||
public static bool operator ==(WorkBuffers left, WorkBuffers right) => left.Equals(right);
|
||||
public static bool operator !=(WorkBuffers left, WorkBuffers right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+31
-4
@@ -1,3 +1,4 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
@@ -412,14 +413,14 @@ public sealed class Apz : ITValuePublisher
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
#pragma warning disable S1104 // Fields should not have public accessibility
|
||||
public ref struct BatchOutputs
|
||||
public readonly ref struct BatchOutputs
|
||||
{
|
||||
/// <summary>Output middle band (double-smoothed EMA of price)</summary>
|
||||
public Span<double> Middle;
|
||||
public readonly Span<double> Middle;
|
||||
/// <summary>Output upper band</summary>
|
||||
public Span<double> Upper;
|
||||
public readonly Span<double> Upper;
|
||||
/// <summary>Output lower band</summary>
|
||||
public Span<double> Lower;
|
||||
public readonly Span<double> Lower;
|
||||
#pragma warning restore S1104
|
||||
|
||||
/// <summary>
|
||||
@@ -431,12 +432,26 @@ public sealed class Apz : ITValuePublisher
|
||||
Upper = upper;
|
||||
Lower = lower;
|
||||
}
|
||||
|
||||
public bool Equals(BatchOutputs other) =>
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Middle), ref MemoryMarshal.GetReference(other.Middle)) &&
|
||||
Middle.Length == other.Middle.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Upper), ref MemoryMarshal.GetReference(other.Upper)) &&
|
||||
Upper.Length == other.Upper.Length &&
|
||||
Unsafe.AreSame(ref MemoryMarshal.GetReference(Lower), ref MemoryMarshal.GetReference(other.Lower)) &&
|
||||
Lower.Length == other.Lower.Length;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(Middle.Length, Upper.Length, Lower.Length);
|
||||
public static bool operator ==(BatchOutputs left, BatchOutputs right) => left.Equals(right);
|
||||
public static bool operator !=(BatchOutputs left, BatchOutputs right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Internal state for scalar calculation.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
[SuppressMessage("NDepend", "ND1903:StructuresShouldBeImmutable", Justification = "Mutable calculation state accumulator by design")]
|
||||
private ref struct ScalarState
|
||||
{
|
||||
internal double Ema1Price;
|
||||
@@ -448,6 +463,18 @@ public sealed class Apz : ITValuePublisher
|
||||
internal double LastValidHigh;
|
||||
internal double LastValidLow;
|
||||
internal bool IsHot;
|
||||
|
||||
public bool Equals(ScalarState other) =>
|
||||
Ema1Price.Equals(other.Ema1Price) && Ema2Price.Equals(other.Ema2Price) &&
|
||||
Ema1Range.Equals(other.Ema1Range) && Ema2Range.Equals(other.Ema2Range) &&
|
||||
E.Equals(other.E) && LastValidPrice.Equals(other.LastValidPrice) &&
|
||||
LastValidHigh.Equals(other.LastValidHigh) && LastValidLow.Equals(other.LastValidLow) &&
|
||||
IsHot == other.IsHot;
|
||||
|
||||
public override bool Equals(object? obj) => false;
|
||||
public override int GetHashCode() => HashCode.Combine(Ema1Price, Ema2Price, Ema1Range, Ema2Range, E, IsHot);
|
||||
public static bool operator ==(ScalarState left, ScalarState right) => left.Equals(right);
|
||||
public static bool operator !=(ScalarState left, ScalarState right) => !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Linq;
|
||||
using Xunit;
|
||||
using QuanTAlib;
|
||||
|
||||
namespace QuanTAlib.Tests.Core;
|
||||
namespace QuanTAlib.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Tests verifying the structural stability of indicators across the repository.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user