apple-quant-algorithmic 0.1.0

Apple Quant's algorithmic trading api
Documentation
use crate::{
	aggregation::TradeTradeTimestamp,
	instrument::{InstrumentData, InstrumentSpec},
	timestamp::TradeTimestamped,
};

pub struct StdTrades<'instrument_data, IS: InstrumentSpec> {
	data: &'instrument_data [TradeTradeTimestamp<IS>],
}

impl<'instrument_data, IS: InstrumentSpec> StdTrades<'instrument_data, IS> {
	pub fn new(data: &'instrument_data [TradeTradeTimestamp<IS>]) -> Self {
		Self { data }
	}

	pub fn new_reaggregate<T: TradeTimestamped + 'instrument_data>(
		instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>,
		recent_aggregated_data_backward: impl Iterator<Item = &'instrument_data T>,
		count: usize,
	) -> Self {
		debug_assert!(count >= 1);

		let Some(aggregation) = recent_aggregated_data_backward
			.skip(count - 1)
			.next()
		else {
			return Self {
				data: instrument_data.trades_forward_slice(),
			};
		};

		Self {
			data: instrument_data.reaggregate_trade_forward_slice(aggregation),
		}
	}

	pub fn new_aggregate<T: TradeTimestamped + 'instrument_data>(
		instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>
	) -> Self {
		Self {
			data: instrument_data.trades_new_recent_forward_slice(),
		}
	}

	pub fn into_iter(self) -> impl IntoIterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
		self.data
	}

	pub fn iter(&self) -> impl Iterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
		self.data.iter()
	}
}