rust #10
@ -6,8 +6,7 @@ use bitfinex::orders::{OrderForm, OrderMeta};
 | 
			
		||||
use bitfinex::ticker::TradingPairTicker;
 | 
			
		||||
 | 
			
		||||
use crate::currency::{Symbol, SymbolPair};
 | 
			
		||||
use crate::orders::{Order, OrderKind};
 | 
			
		||||
use crate::positions::{Position, PositionState};
 | 
			
		||||
use crate::models::{Order, OrderKind, Position, PositionState};
 | 
			
		||||
use crate::BoxError;
 | 
			
		||||
 | 
			
		||||
#[derive(Eq, PartialEq, Hash, Clone)]
 | 
			
		||||
 | 
			
		||||
@ -5,8 +5,8 @@ use tokio::stream::StreamExt;
 | 
			
		||||
use tokio::task::JoinHandle;
 | 
			
		||||
 | 
			
		||||
use crate::bot::BfxBot;
 | 
			
		||||
use crate::models::{Position, PositionProfitState};
 | 
			
		||||
use crate::pairs::PairStatus;
 | 
			
		||||
use crate::positions::{Position, PositionProfitState, PositionState};
 | 
			
		||||
use crate::BoxError;
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
 | 
			
		||||
 | 
			
		||||
@ -3,15 +3,16 @@ use tokio::time::{delay_for, Duration};
 | 
			
		||||
use crate::bot::BfxBot;
 | 
			
		||||
use crate::connectors::BfxWrapper;
 | 
			
		||||
use crate::currency::{Symbol, SymbolPair};
 | 
			
		||||
use crate::events::SignalKind;
 | 
			
		||||
use crate::strategy::TrailingStop;
 | 
			
		||||
use std::thread::JoinHandle;
 | 
			
		||||
 | 
			
		||||
mod bot;
 | 
			
		||||
mod connectors;
 | 
			
		||||
mod currency;
 | 
			
		||||
mod events;
 | 
			
		||||
mod orders;
 | 
			
		||||
mod models;
 | 
			
		||||
mod pairs;
 | 
			
		||||
mod positions;
 | 
			
		||||
mod strategy;
 | 
			
		||||
mod ticker;
 | 
			
		||||
 | 
			
		||||
@ -21,8 +22,9 @@ pub type BoxError = Box<dyn std::error::Error + Send + Sync>;
 | 
			
		||||
async fn main() -> Result<(), BoxError> {
 | 
			
		||||
    let test_api_key = "P1EVE68DJByDAkGQvpIkTwfrbYXd2Vo2ZaIhTYb9vx2";
 | 
			
		||||
    let test_api_secret = "1nicg8z0zKVEt5Rb7ZDpIYjVYVTgvCaCPMZqB0niFli";
 | 
			
		||||
    //
 | 
			
		||||
    let bfx = BfxWrapper::new(test_api_key, test_api_secret);
 | 
			
		||||
    let bfx = BfxWrapper::new(test_api_key, test_api_secret)
 | 
			
		||||
        .with_affiliate_code(Some("XPebOgHxA".into()));
 | 
			
		||||
 | 
			
		||||
    let mut bot = BfxBot::new(
 | 
			
		||||
        bfx,
 | 
			
		||||
        vec![Symbol::TESTBTC],
 | 
			
		||||
 | 
			
		||||
@ -1,37 +0,0 @@
 | 
			
		||||
pub struct Order {
 | 
			
		||||
    pub id: i64,
 | 
			
		||||
    pub group_id: Option<i32>,
 | 
			
		||||
    pub client_id: i64,
 | 
			
		||||
    pub symbol: String,
 | 
			
		||||
    pub creation_timestamp: i64,
 | 
			
		||||
    pub update_timestamp: i64,
 | 
			
		||||
    pub amount: f64,
 | 
			
		||||
    pub amount_original: f64,
 | 
			
		||||
    pub order_type: String,
 | 
			
		||||
    pub previous_order_type: Option<String>,
 | 
			
		||||
    pub flags: Option<i32>,
 | 
			
		||||
    pub order_status: Option<String>,
 | 
			
		||||
    pub price: f64,
 | 
			
		||||
    pub price_avg: f64,
 | 
			
		||||
    pub price_trailing: Option<f64>,
 | 
			
		||||
    pub price_aux_limit: Option<f64>,
 | 
			
		||||
    pub notify: i32,
 | 
			
		||||
    pub hidden: i32,
 | 
			
		||||
    pub placed_id: Option<i32>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub enum OrderKind {
 | 
			
		||||
    Limit,
 | 
			
		||||
    ExchangeLimit,
 | 
			
		||||
    Market,
 | 
			
		||||
    ExchangeMarket,
 | 
			
		||||
    Stop,
 | 
			
		||||
    ExchangeStop,
 | 
			
		||||
    StopLimit,
 | 
			
		||||
    ExchangeStopLimit,
 | 
			
		||||
    TrailingStop,
 | 
			
		||||
    Fok,
 | 
			
		||||
    ExchangeFok,
 | 
			
		||||
    Ioc,
 | 
			
		||||
    ExchangeIoc,
 | 
			
		||||
}
 | 
			
		||||
@ -2,8 +2,7 @@ use std::collections::HashMap;
 | 
			
		||||
 | 
			
		||||
use crate::currency::SymbolPair;
 | 
			
		||||
use crate::events::{Event, EventDispatcher, SignalKind};
 | 
			
		||||
use crate::orders::Order;
 | 
			
		||||
use crate::positions::Position;
 | 
			
		||||
use crate::models::{Order, Position};
 | 
			
		||||
use crate::strategy::Strategy;
 | 
			
		||||
 | 
			
		||||
pub struct PairStatus<'a> {
 | 
			
		||||
 | 
			
		||||
@ -1,118 +0,0 @@
 | 
			
		||||
use crate::currency::{Symbol, SymbolPair};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug)]
 | 
			
		||||
pub struct Position {
 | 
			
		||||
    pair: SymbolPair,
 | 
			
		||||
    state: PositionState,
 | 
			
		||||
    profit_state: Option<PositionProfitState>,
 | 
			
		||||
    amount: f64,
 | 
			
		||||
    base_price: f64,
 | 
			
		||||
    pl: f64,
 | 
			
		||||
    pl_perc: f64,
 | 
			
		||||
    price_liq: f64,
 | 
			
		||||
    position_id: u64,
 | 
			
		||||
    creation_date: Option<u64>,
 | 
			
		||||
    creation_update: Option<u64>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Position {
 | 
			
		||||
    pub fn new(
 | 
			
		||||
        pair: SymbolPair,
 | 
			
		||||
        state: PositionState,
 | 
			
		||||
        amount: f64,
 | 
			
		||||
        base_price: f64,
 | 
			
		||||
        pl: f64,
 | 
			
		||||
        pl_perc: f64,
 | 
			
		||||
        price_liq: f64,
 | 
			
		||||
        position_id: u64,
 | 
			
		||||
    ) -> Self {
 | 
			
		||||
        Position {
 | 
			
		||||
            pair,
 | 
			
		||||
            state,
 | 
			
		||||
            amount,
 | 
			
		||||
            base_price,
 | 
			
		||||
            pl,
 | 
			
		||||
            pl_perc,
 | 
			
		||||
            price_liq,
 | 
			
		||||
            position_id,
 | 
			
		||||
            creation_date: None,
 | 
			
		||||
            creation_update: None,
 | 
			
		||||
            profit_state: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn with_creation_date(mut self, creation_date: Option<u64>) -> Self {
 | 
			
		||||
        self.creation_date = creation_date;
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn with_creation_update(mut self, creation_update: Option<u64>) -> Self {
 | 
			
		||||
        self.creation_update = creation_update;
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn with_profit_state(mut self, profit_state: Option<PositionProfitState>) -> Self {
 | 
			
		||||
        self.profit_state = profit_state;
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn pair(&self) -> &SymbolPair {
 | 
			
		||||
        &self.pair
 | 
			
		||||
    }
 | 
			
		||||
    pub fn state(&self) -> PositionState {
 | 
			
		||||
        self.state
 | 
			
		||||
    }
 | 
			
		||||
    pub fn amount(&self) -> f64 {
 | 
			
		||||
        self.amount
 | 
			
		||||
    }
 | 
			
		||||
    pub fn base_price(&self) -> f64 {
 | 
			
		||||
        self.base_price
 | 
			
		||||
    }
 | 
			
		||||
    pub fn pl(&self) -> f64 {
 | 
			
		||||
        self.pl
 | 
			
		||||
    }
 | 
			
		||||
    pub fn pl_perc(&self) -> f64 {
 | 
			
		||||
        self.pl_perc
 | 
			
		||||
    }
 | 
			
		||||
    pub fn price_liq(&self) -> f64 {
 | 
			
		||||
        self.price_liq
 | 
			
		||||
    }
 | 
			
		||||
    pub fn position_id(&self) -> u64 {
 | 
			
		||||
        self.position_id
 | 
			
		||||
    }
 | 
			
		||||
    pub fn profit_state(&self) -> Option<PositionProfitState> {
 | 
			
		||||
        self.profit_state
 | 
			
		||||
    }
 | 
			
		||||
    pub fn creation_date(&self) -> Option<u64> {
 | 
			
		||||
        self.creation_date
 | 
			
		||||
    }
 | 
			
		||||
    pub fn creation_update(&self) -> Option<u64> {
 | 
			
		||||
        self.creation_update
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
 | 
			
		||||
pub enum PositionProfitState {
 | 
			
		||||
    Critical,
 | 
			
		||||
    Loss,
 | 
			
		||||
    BreakEven,
 | 
			
		||||
    MinimumProfit,
 | 
			
		||||
    Profit,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl PositionProfitState {
 | 
			
		||||
    fn color(self) -> String {
 | 
			
		||||
        match self {
 | 
			
		||||
            PositionProfitState::Critical | PositionProfitState::Loss => "red",
 | 
			
		||||
            PositionProfitState::BreakEven => "yellow",
 | 
			
		||||
            PositionProfitState::MinimumProfit | PositionProfitState::Profit => "green",
 | 
			
		||||
        }
 | 
			
		||||
        .into()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
 | 
			
		||||
pub enum PositionState {
 | 
			
		||||
    Closed,
 | 
			
		||||
    Open,
 | 
			
		||||
}
 | 
			
		||||
@ -1,8 +1,8 @@
 | 
			
		||||
use std::collections::HashMap;
 | 
			
		||||
 | 
			
		||||
use crate::events::{Event, EventKind, EventMetadata, SignalKind};
 | 
			
		||||
use crate::models::{Position, PositionProfitState};
 | 
			
		||||
use crate::pairs::PairStatus;
 | 
			
		||||
use crate::positions::{Position, PositionProfitState, PositionState};
 | 
			
		||||
use dyn_clone::DynClone;
 | 
			
		||||
 | 
			
		||||
pub trait Strategy: DynClone {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user