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