Files
QuanTAlib/lib/core/tbarseries/TBarSeries.Notebook.dib
T
2025-11-28 13:35:16 -08:00

83 lines
2.6 KiB
Plaintext

#!meta
{"kernelInfo":{"defaultKernelName":"csharp","items":[{"aliases":[],"languageName":"csharp","name":"csharp"}]}}
#!csharp
// Reference the library
#r "..\..\bin\QuanTAlib.dll"
using QuanTAlib;
// 1. Creating a TBarSeries
// TBarSeries is a collection of bars stored in Structure of Arrays (SoA) format
// This layout is optimized for performance and SIMD operations
var bars = new TBarSeries();
long now = DateTime.UtcNow.Ticks;
// Add a new bar
var bar1 = new TBar(now, 100, 105, 95, 102, 1000);
bars.Add(bar1, isNew: true);
Console.WriteLine($"Added Bar 1: Count={bars.Count}");
Console.WriteLine($"Last Close: {bars.Last.Close}");
#!csharp
// 2. Streaming Updates
// TBarSeries supports updating the last bar in place
// This is crucial for real-time feeds where the current bar changes until it closes
// Update the bar (e.g. price changed within the same minute)
var bar1Update = new TBar(now, 100, 106, 95, 104, 1500);
bars.Add(bar1Update, isNew: false);
Console.WriteLine($"Updated Bar 1: Count={bars.Count} (Count should not increase)");
Console.WriteLine($"Last Close: {bars.Last.Close}");
Console.WriteLine($"Last High: {bars.Last.High}");
#!csharp
// 3. Zero-Copy Views
// You can access individual components (Open, High, Low, Close, Volume) as TSeries
// These views share the underlying memory, so no copying is involved
Console.WriteLine($"Bars Count: {bars.Count}");
Console.WriteLine($"Close Series Count: {bars.Close.Count}");
Console.WriteLine($"Close Series Last: {bars.Close.Last.Value}");
// Verify view updates automatically
Console.WriteLine("\nAdding new bar...");
bars.Add(now + TimeSpan.TicksPerMinute, 104, 108, 103, 107, 2000, isNew: true);
Console.WriteLine($"Bars Count: {bars.Count}");
Console.WriteLine($"Close Series Count: {bars.Close.Count} (Should match Bars Count)");
Console.WriteLine($"Close Series Last: {bars.Close.Last.Value} (Should be 107)");
#!csharp
// 4. Aliases and Direct Access
// TBarSeries provides short aliases (O, H, L, C, V) and direct access properties
Console.WriteLine($"Alias Access (C.Last): {bars.C.Last.Value}");
Console.WriteLine($"Direct Last Access (LastClose): {bars.LastClose}");
Console.WriteLine($"Direct Last Time (LastTime): {new DateTime(bars.LastTime)}");
#!csharp
// 5. Iteration
// You can iterate over the bars or individual series
Console.WriteLine("\nIterating over bars:");
foreach (var bar in bars)
{
Console.WriteLine($" {bar}");
}
Console.WriteLine("\nIterating over Close prices:");
for (int i = 0; i < bars.Count; i++)
{
Console.WriteLine($" Bar {i}: Close={bars.Close[i].Value}");
}