Skip to main content

apple_quant_algorithmic/aggregation_std/
trades.rs

1use crate::{
2	aggregation::TradeTradeTimestamp,
3	instrument::{InstrumentData, InstrumentSpec},
4	timestamp::TradeTimestamped,
5};
6
7pub struct StdTrades<'instrument_data, IS: InstrumentSpec> {
8	data: &'instrument_data [TradeTradeTimestamp<IS>],
9}
10
11impl<'instrument_data, IS: InstrumentSpec> StdTrades<'instrument_data, IS> {
12	pub fn new(data: &'instrument_data [TradeTradeTimestamp<IS>]) -> Self {
13		Self { data }
14	}
15
16	pub fn new_reaggregate<T: TradeTimestamped + 'instrument_data>(
17		instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>,
18		recent_aggregated_data_backward: impl Iterator<Item = &'instrument_data T>,
19		count: usize,
20	) -> Self {
21		debug_assert!(count >= 1);
22
23		let Some(aggregation) = recent_aggregated_data_backward
24			.skip(count - 1)
25			.next()
26		else {
27			return Self {
28				data: instrument_data.trades_forward_slice(),
29			};
30		};
31
32		Self {
33			data: instrument_data.reaggregate_trade_forward_slice(aggregation),
34		}
35	}
36
37	pub fn new_aggregate<T: TradeTimestamped + 'instrument_data>(
38		instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>
39	) -> Self {
40		Self {
41			data: instrument_data.trades_new_recent_forward_slice(),
42		}
43	}
44
45	pub fn into_iter(self) -> impl IntoIterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
46		self.data
47	}
48
49	pub fn iter(&self) -> impl Iterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
50		self.data.iter()
51	}
52}