three_commas_types/
bots.rs1mod deals;
2mod stats;
3
4use crate::Pair;
5use rust_decimal::Decimal;
6use serde::Deserialize;
7
8pub use deals::{Deal, DealStatus};
9pub use stats::{BotStats, TokenValues};
10
11#[derive(Debug, Deserialize, Clone)]
12pub struct Bot {
13 pub name: String,
14 pub id: usize,
15 pub account_id: usize,
16 pub is_enabled: bool,
17 pub max_safety_orders: usize,
18 pub max_active_deals: usize,
19 pub base_order_volume: Decimal,
20 pub safety_order_volume: Decimal,
21 pub safety_order_step_percentage: Decimal,
22 pub martingale_volume_coefficient: Decimal,
23 pub martingale_step_coefficient: Decimal,
24 pub pairs: Vec<Pair>,
25}
26
27impl Bot {
28 pub fn name(&self) -> &str {
29 &*self.name
30 }
31
32 pub fn id(&self) -> usize {
33 self.id
34 }
35
36 pub fn account_id(&self) -> usize {
37 self.account_id
38 }
39
40 pub fn is_enabled(&self) -> bool {
41 self.is_enabled
42 }
43
44 pub fn pairs(&self) -> &[Pair] {
45 &self.pairs
46 }
47
48 pub fn base_order_volume(&self) -> Decimal {
49 self.base_order_volume
50 }
51
52 pub fn safety_order_volume(&self) -> Decimal {
53 self.safety_order_volume
54 }
55
56 pub fn max_safety_orders(&self) -> usize {
57 self.max_safety_orders
58 }
59
60 pub fn max_active_deals(&self) -> usize {
61 self.max_active_deals
62 }
63
64 pub fn max_budget_per_deal(&self) -> Decimal {
65 let mut result = self.base_order_volume;
66 let mut next = self.safety_order_volume;
67 for _ in 0..self.max_safety_orders {
68 result += next;
69 next *= self.martingale_volume_coefficient;
70 }
71
72 result
73 }
74
75 pub fn max_budget(&self) -> Decimal {
76 self.max_budget_per_deal() * Decimal::from(self.max_active_deals)
77 }
78}