Skip to content
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ceb08b3
Initial plan
Copilot Jan 5, 2026
db2e161
feat: Add QuoteAggregatorHub for streaming quote aggregation
Copilot Jan 5, 2026
922c77a
test: Add interface compliance and chain provider tests
Copilot Jan 5, 2026
a62c3ad
refactor: Simplify QuoteAggregatorHub properties and calculations
DaveSkender Jan 7, 2026
5f1186b
feat: Add TickAggregatorHub for tick-to-bar aggregation
Copilot Jan 7, 2026
9ca279e
feat: Add duplicate and out-of-sequence handling to aggregators
Copilot Jan 7, 2026
d9127b0
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Jan 11, 2026
b796af0
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Jan 12, 2026
b58c8ec
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Jan 12, 2026
4aaef2d
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Jan 12, 2026
e4eb40d
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Jan 20, 2026
633312c
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Jan 20, 2026
369f934
code cleanup
DaveSkender Jan 20, 2026
41e5db8
fix failing test
DaveSkender Jan 20, 2026
a4dd550
fix: Rebuild streaming aggregates for late ticks (#1943)
DaveSkender Jan 28, 2026
8e7ab8c
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Jan 29, 2026
56eee6e
fix: Address all code review feedback for aggregator hubs
Copilot Jan 29, 2026
7785c41
test: Add ITestTickObserver interface and required test method
Copilot Jan 29, 2026
49d163c
Update src/_common/Quotes/Tick.StreamHub.cs
DaveSkender Feb 1, 2026
c4d5f8c
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Feb 2, 2026
45edbe6
feat: enhance quote and tick aggregators with better error handling
DaveSkender Feb 2, 2026
ea16d44
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Feb 28, 2026
0b46f2c
fix: Address all code review feedback, fix RollbackState API, clean t…
Copilot Feb 28, 2026
1bedb59
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Mar 1, 2026
2274cfe
Merge branch 'v3' into copilot/add-quote-stream-aggregator
DaveSkender Mar 1, 2026
a4f16fd
fix: Use CacheLock in aggregator hubs to prevent lock inversion deadlock
DaveSkender Mar 2, 2026
f58518a
fix: Recognize ITestTickObserver in StreamHub audit script
Claude Mar 2, 2026
42dc661
refactor: Simplify quote update logic in aggregator hubs
DaveSkender Mar 2, 2026
98578d6
refactor: Use constants for max tracker sizes in aggregator hubs
DaveSkender Mar 2, 2026
9aab8e8
refactor: Improve exception handling and assertions in aggregator hub…
DaveSkender Mar 2, 2026
f16a12a
refactor: Enhance tick cache update logic and observer notifications …
DaveSkender Mar 2, 2026
108edfc
test: Add SSE integration tests for QuoteAggregatorHub and TickAggreg…
Claude Mar 2, 2026
7a65277
feedback fixes
DaveSkender Mar 2, 2026
75abef6
refactor: Validate aggregation period and improve cache pruning logic
DaveSkender Mar 3, 2026
dce4470
Update tools/scripts/dotnet-clean.sh
DaveSkender Mar 3, 2026
c5a8a98
Update tests/indicators/_common/Quotes/Tick.AggregatorHub.Tests.cs
DaveSkender Mar 3, 2026
a7f38a4
Update quote sequence assignment to use last index
DaveSkender Mar 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
{
"[markdown]": {
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.markdownlint": "explicit"
}
},
"chat.useAgentSkills": true,
"chat.useAgentsMdFile": true,
"chat.useNestedAgentsMdFiles": true,
"chat.customAgentInSubagent.enabled": true,
Expand Down
26 changes: 11 additions & 15 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,19 +79,15 @@
],
// defaults
"group": "none",
"options": {
"cwd": "${workspaceFolder}"
},
"presentation": {
"clear": true,
"echo": true,
"panel": "dedicated",
"focus": true,
"reveal": "always",
"revealProblems": "onProblem",
"showReuseMessage": false
},
"problemMatcher": [],
"options": {
"cwd": "${workspaceFolder}"
},
// tasks
"tasks": [
{
Expand Down Expand Up @@ -209,31 +205,27 @@
"detail": "Clean build outputs (bin/obj) for solution",
"type": "shell",
"command": "dotnet clean -v minimal --nologo && dotnet clean -c Release -v minimal --nologo",
"group": "build",
"problemMatcher": "$msCompile"
},
{
"label": "Delete: Temporary caches",
"detail": "Delete bin, obj, node_modules, other caches, and lock files",
"type": "shell",
"command": "bash tools/scripts/clean.sh",
"group": "build",
"command": "bash tools/scripts/dotnet-clean.sh",
"problemMatcher": "$msCompile"
},
{
"label": "Delete: Temporary caches (and restore)",
"detail": "Delete temporary caches then restore",
"type": "shell",
"command": "bash tools/scripts/clean.sh && dotnet restore --force-evaluate",
"group": "build",
"command": "bash tools/scripts/dotnet-clean.sh && dotnet restore --force-evaluate",
"problemMatcher": "$msCompile"
},
{
"label": "Delete: Temporary caches (and build)",
"detail": "Delete temporary caches then rebuild",
"type": "shell",
"command": "bash tools/scripts/clean.sh && dotnet build --no-incremental",
"group": "build",
"command": "bash tools/scripts/dotnet-clean.sh && dotnet build --no-incremental",
"problemMatcher": "$msCompile"
},
{
Expand Down Expand Up @@ -299,7 +291,11 @@
"dependsOn": "Install: .NET tools",
"dependsOrder": "sequence",
"group": "test",
"problemMatcher": "$msCompile"
"problemMatcher": "$msCompile",
"presentation": {
"clear": true,
"revealProblems": "onProblem"
}
},
{
"label": "Lint: .NET Roslynator (fix)",
Expand Down
24 changes: 24 additions & 0 deletions src/_common/Quotes/ITick.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
namespace Skender.Stock.Indicators;

/// <summary>
/// Tick interface for raw market tick data.
/// This represents a single trade or quote event with price and volume at a specific timestamp.
/// </summary>
public interface ITick : IReusable
{
/// <summary>
/// Tick price
/// </summary>
decimal Price { get; }

/// <summary>
/// Tick volume (quantity traded)
/// </summary>
decimal Volume { get; }

/// <summary>
/// Optional unique execution ID for duplicate detection.
/// When null, duplicates are assessed by timestamp only.
/// </summary>
string? ExecutionId { get; }
}
Loading