luciene_sl 0.0.1

Lucid Agent OnChain
Documentation
use anchor_lang::prelude::*;

pub struct MovingAverageCalculator<'a> {
    pub periods: &'a [u32; 5],
}

impl<'a> MovingAverageCalculator<'a> {

    pub fn new(periods: &'a [u32; 5]) -> Self {
        Self { periods }
    }

    pub fn calculate_sma(&self, prices: &[f32]) -> Result<[f32; 5]> {

        let mut smas = [0.0; 5];
        
        for (i, &period) in self.periods.iter().enumerate() {
            let sum: f32 = prices.iter().take(period as usize).sum();
            smas[i] = sum / (period as f32);
        }
        
        Ok(smas)
    }
}