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.