debot_db/
trading_strategy.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize)]
4pub enum TrendType {
5    Up,
6    Down,
7    Any,
8}
9
10#[derive(Clone, Copy, Debug, Eq, Hash, Serialize, Deserialize)]
11pub enum TradingStrategy {
12    Inago(TrendType),
13    RandomInago(TrendType),
14}
15
16impl TradingStrategy {
17    pub fn trend_type(&self) -> &TrendType {
18        match self {
19            TradingStrategy::RandomInago(t) | TradingStrategy::Inago(t) => t,
20        }
21    }
22}
23
24impl PartialEq for TradingStrategy {
25    fn eq(&self, other: &Self) -> bool {
26        match (self, other) {
27            (TradingStrategy::Inago(TrendType::Any), TradingStrategy::Inago(TrendType::Up))
28            | (TradingStrategy::Inago(TrendType::Up), TradingStrategy::Inago(TrendType::Any))
29            | (TradingStrategy::Inago(TrendType::Any), TradingStrategy::Inago(TrendType::Down))
30            | (TradingStrategy::Inago(TrendType::Down), TradingStrategy::Inago(TrendType::Any)) => {
31                true
32            }
33            (TradingStrategy::Inago(t1), TradingStrategy::Inago(t2)) if t1 == t2 => true,
34
35            (
36                TradingStrategy::RandomInago(TrendType::Any),
37                TradingStrategy::RandomInago(TrendType::Up),
38            )
39            | (
40                TradingStrategy::RandomInago(TrendType::Up),
41                TradingStrategy::RandomInago(TrendType::Any),
42            )
43            | (
44                TradingStrategy::RandomInago(TrendType::Any),
45                TradingStrategy::RandomInago(TrendType::Down),
46            )
47            | (
48                TradingStrategy::RandomInago(TrendType::Down),
49                TradingStrategy::RandomInago(TrendType::Any),
50            ) => true,
51            (TradingStrategy::RandomInago(t1), TradingStrategy::RandomInago(t2)) if t1 == t2 => {
52                true
53            }
54
55            _ => false,
56        }
57    }
58}