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    MeanReversion(TrendType),
13    RandomMeanReversion(TrendType),
14    Grid(TrendType),
15    Inago(TrendType),
16    RandomInago(TrendType),
17}
18
19impl TradingStrategy {
20    pub fn trend_type(&self) -> &TrendType {
21        match self {
22            TradingStrategy::RandomMeanReversion(t)
23            | TradingStrategy::MeanReversion(t)
24            | TradingStrategy::Grid(t)
25            | TradingStrategy::RandomInago(t)
26            | TradingStrategy::Inago(t) => t,
27        }
28    }
29}
30
31impl PartialEq for TradingStrategy {
32    fn eq(&self, other: &Self) -> bool {
33        match (self, other) {
34            (
35                TradingStrategy::MeanReversion(TrendType::Any),
36                TradingStrategy::MeanReversion(TrendType::Up),
37            )
38            | (
39                TradingStrategy::MeanReversion(TrendType::Up),
40                TradingStrategy::MeanReversion(TrendType::Any),
41            )
42            | (
43                TradingStrategy::MeanReversion(TrendType::Any),
44                TradingStrategy::MeanReversion(TrendType::Down),
45            )
46            | (
47                TradingStrategy::MeanReversion(TrendType::Down),
48                TradingStrategy::MeanReversion(TrendType::Any),
49            ) => true,
50            (TradingStrategy::MeanReversion(t1), TradingStrategy::MeanReversion(t2))
51                if t1 == t2 =>
52            {
53                true
54            }
55
56            (
57                TradingStrategy::RandomMeanReversion(TrendType::Any),
58                TradingStrategy::RandomMeanReversion(TrendType::Up),
59            )
60            | (
61                TradingStrategy::RandomMeanReversion(TrendType::Up),
62                TradingStrategy::RandomMeanReversion(TrendType::Any),
63            )
64            | (
65                TradingStrategy::RandomMeanReversion(TrendType::Any),
66                TradingStrategy::RandomMeanReversion(TrendType::Down),
67            )
68            | (
69                TradingStrategy::RandomMeanReversion(TrendType::Down),
70                TradingStrategy::RandomMeanReversion(TrendType::Any),
71            ) => true,
72            (
73                TradingStrategy::RandomMeanReversion(t1),
74                TradingStrategy::RandomMeanReversion(t2),
75            ) if t1 == t2 => true,
76
77            (TradingStrategy::Grid(TrendType::Any), TradingStrategy::Grid(TrendType::Up))
78            | (TradingStrategy::Grid(TrendType::Up), TradingStrategy::Grid(TrendType::Any))
79            | (TradingStrategy::Grid(TrendType::Any), TradingStrategy::Grid(TrendType::Down))
80            | (TradingStrategy::Grid(TrendType::Down), TradingStrategy::Grid(TrendType::Any)) => {
81                true
82            }
83            (TradingStrategy::Grid(t1), TradingStrategy::Grid(t2)) if t1 == t2 => true,
84
85            (TradingStrategy::Inago(TrendType::Any), TradingStrategy::Inago(TrendType::Up))
86            | (TradingStrategy::Inago(TrendType::Up), TradingStrategy::Inago(TrendType::Any))
87            | (TradingStrategy::Inago(TrendType::Any), TradingStrategy::Inago(TrendType::Down))
88            | (TradingStrategy::Inago(TrendType::Down), TradingStrategy::Inago(TrendType::Any)) => {
89                true
90            }
91            (TradingStrategy::Inago(t1), TradingStrategy::Inago(t2)) if t1 == t2 => true,
92
93            (
94                TradingStrategy::RandomInago(TrendType::Any),
95                TradingStrategy::RandomInago(TrendType::Up),
96            )
97            | (
98                TradingStrategy::RandomInago(TrendType::Up),
99                TradingStrategy::RandomInago(TrendType::Any),
100            )
101            | (
102                TradingStrategy::RandomInago(TrendType::Any),
103                TradingStrategy::RandomInago(TrendType::Down),
104            )
105            | (
106                TradingStrategy::RandomInago(TrendType::Down),
107                TradingStrategy::RandomInago(TrendType::Any),
108            ) => true,
109            (TradingStrategy::RandomInago(t1), TradingStrategy::RandomInago(t2)) if t1 == t2 => {
110                true
111            }
112
113            _ => false,
114        }
115    }
116}