greed 0.5.2

A rust tool to automate trades 📈
Documentation
use crate::asset::AssetSymbol;
use crate::platform::bars::Bars;
use std::fmt::{Display, Formatter};

#[derive(Clone, Debug, Default, PartialEq)]
pub struct BarsResult {
    pub symbol: AssetSymbol,
    pub last_trading_day: Bars,
    pub seven_day: Bars,
    pub thirty_day: Bars,
    pub thirty_day_hourly: Bars,
}

impl BarsResult {
    #[cfg(test)]
    pub fn fixture(symbol: AssetSymbol) -> Self {
        Self {
            symbol: symbol.clone(),
            last_trading_day: Bars::fixture(symbol.clone(), 300.0),
            seven_day: Bars::fixture(symbol.clone(), 200.0),
            thirty_day: Bars::fixture(symbol.clone(), 100.0),
            thirty_day_hourly: Bars::fixture(symbol.clone(), 400.0),
        }
    }
}

impl Display for BarsResult {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "\
            Asset: {}\n\
            yesterday median: {:.2}\n\
            7 day median: {:.2}\n\
            30 day median: {:.2}\n\
            Median Positive Change: {:.2}%\n\
            Median Negative Change: {:.2}%\n\
            ----------
        ",
            self.symbol,
            self.last_trading_day.average_median().unwrap_or_default(),
            self.seven_day.average_median().unwrap_or_default(),
            self.thirty_day.average_median().unwrap_or_default(),
            self.thirty_day_hourly
                .positive_percent_median()
                .unwrap_or_default(),
            self.thirty_day_hourly
                .negative_percent_median()
                .unwrap_or_default(),
        )
    }
}