debot_db/
trading_strategy.rs1use 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}