apple_quant_algorithmic/aggregation_std/
trades.rs1use 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}