use std::collections::VecDeque;
use crate::strategy_engine::Strategy;
#[derive(Debug, Clone)]
pub struct VolumeStrategy {
volumes: VecDeque<f64>,
}
impl VolumeStrategy {
pub fn new() -> Self {
Self {
volumes: VecDeque::new(),
}
}
pub fn update_volume(&mut self, volume: f64) {
self.volumes.push_back(volume);
}
}
impl Strategy for VolumeStrategy {
fn evaluate(&self, _price: &f64) -> f64 {
let last_volume = self.volumes.back().unwrap();
if *last_volume > 1000.0 {
1.0 } else if *last_volume < 500.0 {
-1.0 } else {
0.0 }
}
fn calculate_indicator(&self, _prices: &Vec<f64>) -> f64 {
let mut total_volume = 0.0;
for volume in &self.volumes {
total_volume += *volume;
}
total_volume / self.volumes.len() as f64
}
}