Files
QuanTAlib/lib/core/tseries/TSeries.md
T
Miha Kralj 74b49d2bb4 Add TBar, TBarSeries, TSeries, TValue, and IFeed implementations with comprehensive documentation and examples
- Introduced TBar struct for efficient OHLCV data representation.
- Implemented TBarSeries class for high-performance collection of TBar instances using Structure of Arrays (SoA) layout.
- Added TSeries class for time-series data management with zero-copy access.
- Created TValue struct for time-value pairs with implicit conversions.
- Defined IFeed interface for consistent data feed implementations.
- Developed CsvFeed class for loading historical OHLCV data from CSV files.
- Implemented GBM class for generating synthetic financial data using Geometric Brownian Motion.
- Added Quantower project files for Averages indicator with necessary dependencies and configurations.
- Included extensive usage examples and notebooks for TBar, TBarSeries, TSeries, TValue, and feed implementations.
2025-11-27 19:51:43 -08:00

1.8 KiB

TSeries: Time Series Data

Overview

TSeries is a high-performance container for time-series data. Unlike a standard List<TValue>, it uses a Structure of Arrays (SoA) layout internally. This means it stores timestamps and values in separate contiguous arrays (List<long> and List<double>).

This layout is critical for performance because it allows:

  1. SIMD Optimization: The Values property returns a ReadOnlySpan<double> that can be directly processed by CPU vector instructions (AVX/SSE).
  2. Cache Locality: Iterating over values doesn't load timestamps into the CPU cache, and vice versa.

Structure

public class TSeries : IReadOnlyList<TValue>
{
    // Internal SoA storage
    protected readonly List<long> _t;
    protected readonly List<double> _v;

    // Public accessors
    public ReadOnlySpan<double> Values => ...; // Zero-copy access
    public ReadOnlySpan<long> Times => ...;    // Zero-copy access
    
    public TValue Last { get; }
    public int Count { get; }
}

Key Features

  • SoA Layout: Optimized for numerical computing and SIMD.
  • Zero-Copy Access: Values and Times properties expose internal storage as Spans without copying.
  • Streaming Support: The Add method supports isNew parameter to handle intra-bar updates (replacing the last value instead of appending).
  • Event Publishing: Optional Pub event for reactive pipelines.

Usage

Creating and Adding Data

var series = new TSeries();
series.Add(DateTime.Now, 100.0); // isNew=true by default

Streaming Updates

// New bar
series.Add(time, 100.0, isNew: true);

// Update current bar (e.g. price change within same minute)
series.Add(time, 101.0, isNew: false); 

SIMD Processing

// Calculate average using SIMD
double avg = series.Values.AverageSIMD();