Skip to main content

apple_quant_algorithmic/aggregation_std/
trades.rs

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