Skip to content

Time Data Series

TimeDataSeries

The TimeDataSeries class within QXFinLib represents historical market data using candlestick bars. Each bar contains OHLCV (Open, High, Low, Close, Volume) values for a specific time interval.

TimeDataSeries organizes market data into a structured collection of bars, enabling efficient analysis of price movements across different timeframes such as seconds, minutes, daily, weekly, or monthly.


Visualization


Constructor

TimeDataSeries tdSeries = new TimeDataSeries(
    BarCompression.MinuteBar,     // Compression interval type
    compressionSecond,            // Example: 60 for 1-minute bars
    BarType.CandleStick,          // CandleStick / HeikinAshi
    new TimeSpan(9, 15, 0),       // Trading session start
    new TimeSpan(15, 30, 0)       // Trading session end
);

Key Points

  • Time is internally represented as Unix timestamps
  • Only price data within the defined trading session is considered
  • Supports both tick data and bar data input
  • Events can be used to track bar completion

Example: Generating Bars from Tick Data

int compressionSecond = 15;

TimeDataSeries tdSeries = new TimeDataSeries(
    BarCompression.MinuteBar,
    compressionSecond,
    BarType.CandleStick,
    new TimeSpan(9, 15, 0),
    new TimeSpan(15, 30, 0)
);

tdSeries.OnBarDataCompletedEvent += OnBarDataCompletedEvent;

CultureInfo provider = CultureInfo.InvariantCulture;
string format = "yyyy-MM-dd HH:mm:ss.fff";

// Add tick data
tdSeries.AddTickData(DateTime.ParseExact("2020-12-08 09:15:01.123", format, provider), 50, 10);
tdSeries.AddTickData(DateTime.ParseExact("2020-12-08 09:15:02.234", format, provider), 60, 5);
tdSeries.AddTickData(DateTime.ParseExact("2020-12-08 09:15:04.512", format, provider), 45, 15);
tdSeries.AddTickData(DateTime.ParseExact("2020-12-08 09:15:05.777", format, provider), 60, 20);
tdSeries.AddTickData(DateTime.ParseExact("2020-12-08 09:17:09.913", format, provider), 100, 10);
tdSeries.AddTickData(DateTime.ParseExact("2020-12-08 09:18:11.999", format, provider), 95, 30);

// Validate results
Assert.AreEqual(tdSeries.Count, 4);

IBarData barData = tdSeries[0];

Assert.AreEqual(barData.DateTimeDT.TimeOfDay, new TimeSpan(9, 15, 0));
Assert.AreEqual(barData.Open, 50);
Assert.AreEqual(barData.High, 60);
Assert.AreEqual(barData.Low, 50);
Assert.AreEqual(barData.Close, 60);
Assert.AreEqual(barData.Volume, 15);

Event Handling

private void OnBarDataCompletedEvent(Guid id, IBarData barData, int currentBarIndex)
{
    // Handle completed bar event
}

Important Functions

// Total number of bars
int barCount = tdSeries.Count;

// Access bar by index
IBarData barData = tdSeries[5];

// Unix timestamp (seconds since 1970)
int barTime = barData.DateTime;

// DateTime format
DateTime barTimeDT = barData.DateTimeDT;

// Close price
double closePrice = tdSeries[0].Close;

// Open price
double openPrice = tdSeries.BarValue('O', 0);

// Get index using datetime
int index = tdSeries.BarDataIndexAtDateTime(DateTime.Now);

// Loop through bars
for (int i = 0; i < tdSeries.Count; i++)
{
    IBarData data = tdSeries[i];
}

Summary

TimeDataSeries converts raw tick data into structured OHLC bar data, enabling efficient market analysis, strategy development, and real-time trading applications.