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