Documentation
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
    }
}