Expose signal open to platform strategies
This commit is contained in:
@@ -485,7 +485,9 @@ impl SymbolPriceSeries {
|
||||
#[derive(Debug, Clone)]
|
||||
struct BenchmarkPriceSeries {
|
||||
dates: Vec<NaiveDate>,
|
||||
opens: Vec<f64>,
|
||||
closes: Vec<f64>,
|
||||
open_prefix: Vec<f64>,
|
||||
close_prefix: Vec<f64>,
|
||||
}
|
||||
|
||||
@@ -494,16 +496,24 @@ impl BenchmarkPriceSeries {
|
||||
let mut sorted = rows.to_vec();
|
||||
sorted.sort_by_key(|row| row.date);
|
||||
let dates = sorted.iter().map(|row| row.date).collect::<Vec<_>>();
|
||||
let opens = sorted.iter().map(|row| row.open).collect::<Vec<_>>();
|
||||
let closes = sorted.iter().map(|row| row.close).collect::<Vec<_>>();
|
||||
let open_prefix = prefix_sums(&opens);
|
||||
let close_prefix = prefix_sums(&closes);
|
||||
Self {
|
||||
dates,
|
||||
opens,
|
||||
closes,
|
||||
open_prefix,
|
||||
close_prefix,
|
||||
}
|
||||
}
|
||||
|
||||
fn moving_average(&self, date: NaiveDate, lookback: usize) -> Option<f64> {
|
||||
self.moving_average_for(date, lookback, PriceField::Close)
|
||||
}
|
||||
|
||||
fn moving_average_for(&self, date: NaiveDate, lookback: usize, field: PriceField) -> Option<f64> {
|
||||
if lookback == 0 {
|
||||
return None;
|
||||
}
|
||||
@@ -516,7 +526,11 @@ impl BenchmarkPriceSeries {
|
||||
return None;
|
||||
}
|
||||
let start = end - lookback;
|
||||
let sum = self.close_prefix[end] - self.close_prefix[start];
|
||||
let prefix = match field {
|
||||
PriceField::Open => &self.open_prefix,
|
||||
PriceField::Close | PriceField::Last => &self.close_prefix,
|
||||
};
|
||||
let sum = prefix[end] - prefix[start];
|
||||
Some(sum / lookback as f64)
|
||||
}
|
||||
|
||||
@@ -942,6 +956,20 @@ impl DataSet {
|
||||
self.benchmark_series_cache.moving_average(date, lookback)
|
||||
}
|
||||
|
||||
pub fn benchmark_open_moving_average(&self, date: NaiveDate, lookback: usize) -> Option<f64> {
|
||||
self.benchmark_series_cache
|
||||
.moving_average_for(date, lookback, PriceField::Open)
|
||||
}
|
||||
|
||||
pub fn market_open_moving_average(
|
||||
&self,
|
||||
date: NaiveDate,
|
||||
symbol: &str,
|
||||
lookback: usize,
|
||||
) -> Option<f64> {
|
||||
self.market_moving_average(date, symbol, lookback, PriceField::Open)
|
||||
}
|
||||
|
||||
pub fn eligible_universe_on(&self, date: NaiveDate) -> &[EligibleUniverseSnapshot] {
|
||||
self.eligible_universe_by_date
|
||||
.get(&date)
|
||||
|
||||
Reference in New Issue
Block a user