Documentation

use std::collections::VecDeque;
use crate::strategy_engine::Strategy;


#[derive(Debug, Clone)]

pub struct Breakout {
    prices: VecDeque<f64>,
    resistance: f64,
    support: f64,
}

impl Breakout {
    pub fn new(resistance: f64, support: f64) -> Self {
        Self {
            prices: VecDeque::new(),
            resistance,
            support,
        }
    }

    pub fn update_price(&mut self, price: f64) {
        self.prices.push_back(price);
    }
}

impl Strategy for Breakout {
    fn evaluate(&self, _price: &f64) -> f64 {
        let last_price = self.prices.back().unwrap();
        if *last_price > self.resistance {
            1.0 // 买入信号
        } else if *last_price < self.support {
            -1.0 // 卖出信号
        } else {
            0.0 // 无信号
        }
    }

    fn calculate_indicator(&self, prices: &Vec<f64>) -> f64 {
        // 计算突破次数作为指标
        let mut breakouts = 0;
        for price in prices {
            if *price > self.resistance || *price < self.support {
                breakouts += 1;
            }
        }
        breakouts as f64
    }
}