three-commas-types 0.1.3

3commas api types
Documentation
mod deals;
mod stats;

use crate::Pair;
use rust_decimal::Decimal;
use serde::Deserialize;

pub use deals::{Deal, DealStatus};
pub use stats::{BotStats, TokenValues};

#[derive(Debug, Deserialize, Clone)]
pub struct Bot {
  pub name: String,
  pub id: usize,
  pub account_id: usize,
  pub is_enabled: bool,
  pub max_safety_orders: usize,
  pub max_active_deals: usize,
  pub base_order_volume: Decimal,
  pub safety_order_volume: Decimal,
  pub safety_order_step_percentage: Decimal,
  pub martingale_volume_coefficient: Decimal,
  pub martingale_step_coefficient: Decimal,
  pub pairs: Vec<Pair>,
}

impl Bot {
  pub fn name(&self) -> &str {
    &*self.name
  }

  pub fn id(&self) -> usize {
    self.id
  }

  pub fn account_id(&self) -> usize {
    self.account_id
  }

  pub fn is_enabled(&self) -> bool {
    self.is_enabled
  }

  pub fn pairs(&self) -> &[Pair] {
    &self.pairs
  }

  pub fn base_order_volume(&self) -> Decimal {
    self.base_order_volume
  }

  pub fn safety_order_volume(&self) -> Decimal {
    self.safety_order_volume
  }

  pub fn max_safety_orders(&self) -> usize {
    self.max_safety_orders
  }

  pub fn max_active_deals(&self) -> usize {
    self.max_active_deals
  }

  pub fn max_budget_per_deal(&self) -> Decimal {
    let mut result = self.base_order_volume;
    let mut next = self.safety_order_volume;
    for _ in 0..self.max_safety_orders {
      result += next;
      next *= self.martingale_volume_coefficient;
    }

    result
  }

  pub fn max_budget(&self) -> Decimal {
    self.max_budget_per_deal() * Decimal::from(self.max_active_deals)
  }
}