order submission
This commit is contained in:
		
							parent
							
								
									293ea60919
								
							
						
					
					
						commit
						8a7b3d4e22
					
				| @ -2,19 +2,31 @@ use std::convert::{TryFrom, TryInto}; | |||||||
| 
 | 
 | ||||||
| use async_trait::async_trait; | use async_trait::async_trait; | ||||||
| use bitfinex::api::Bitfinex; | use bitfinex::api::Bitfinex; | ||||||
|  | use bitfinex::orders::{OrderForm, OrderMeta}; | ||||||
| use bitfinex::ticker::TradingPairTicker; | use bitfinex::ticker::TradingPairTicker; | ||||||
| 
 | 
 | ||||||
| use crate::currency::{Symbol, SymbolPair}; | use crate::currency::{Symbol, SymbolPair}; | ||||||
| use crate::orders::Order; | use crate::orders::{Order, OrderKind}; | ||||||
| use crate::positions::{Position, PositionState}; | use crate::positions::{Position, PositionState}; | ||||||
| use crate::BoxError; | use crate::BoxError; | ||||||
| 
 | 
 | ||||||
|  | #[derive(Eq, PartialEq, Hash, Clone)] | ||||||
|  | pub enum ExchangeKind { | ||||||
|  |     Bitfinex, | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[async_trait] | #[async_trait] | ||||||
| pub trait Connector { | pub trait Connector { | ||||||
|     async fn active_positions(&self, pair: &SymbolPair) -> Result<Vec<Position>, BoxError>; |     async fn active_positions(&self, pair: &SymbolPair) -> Result<Vec<Position>, BoxError>; | ||||||
|     async fn current_prices(&self, pair: &SymbolPair) -> Result<TradingPairTicker, BoxError>; |     async fn current_prices(&self, pair: &SymbolPair) -> Result<TradingPairTicker, BoxError>; | ||||||
|     async fn active_orders(&self, pair: &SymbolPair) -> Result<Vec<Order>, BoxError>; |     async fn active_orders(&self, pair: &SymbolPair) -> Result<Vec<Order>, BoxError>; | ||||||
|     async fn submit_order(&self) -> Result<u64, BoxError>; |     async fn submit_order( | ||||||
|  |         &self, | ||||||
|  |         pair: &SymbolPair, | ||||||
|  |         amount: f64, | ||||||
|  |         price: f64, | ||||||
|  |         kind: &OrderKind, | ||||||
|  |     ) -> Result<(), BoxError>; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct BfxWrapper { | pub struct BfxWrapper { | ||||||
| @ -65,6 +77,26 @@ impl TryInto<Position> for bitfinex::positions::Position { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | impl From<&OrderKind> for bitfinex::orders::OrderKind { | ||||||
|  |     fn from(o: &OrderKind) -> Self { | ||||||
|  |         match o { | ||||||
|  |             OrderKind::Limit => Self::Limit, | ||||||
|  |             OrderKind::ExchangeLimit => Self::ExchangeLimit, | ||||||
|  |             OrderKind::Market => Self::Market, | ||||||
|  |             OrderKind::ExchangeMarket => Self::ExchangeMarket, | ||||||
|  |             OrderKind::Stop => Self::Stop, | ||||||
|  |             OrderKind::ExchangeStop => Self::ExchangeStop, | ||||||
|  |             OrderKind::StopLimit => Self::StopLimit, | ||||||
|  |             OrderKind::ExchangeStopLimit => Self::ExchangeStopLimit, | ||||||
|  |             OrderKind::TrailingStop => Self::TrailingStop, | ||||||
|  |             OrderKind::Fok => Self::Fok, | ||||||
|  |             OrderKind::ExchangeFok => Self::ExchangeFok, | ||||||
|  |             OrderKind::Ioc => Self::Ioc, | ||||||
|  |             OrderKind::ExchangeIoc => Self::ExchangeIoc, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[async_trait] | #[async_trait] | ||||||
| impl Connector for BfxWrapper { | impl Connector for BfxWrapper { | ||||||
|     async fn active_positions(&self, pair: &SymbolPair) -> Result<Vec<Position>, BoxError> { |     async fn active_positions(&self, pair: &SymbolPair) -> Result<Vec<Position>, BoxError> { | ||||||
| @ -87,7 +119,19 @@ impl Connector for BfxWrapper { | |||||||
|         unimplemented!() |         unimplemented!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async fn submit_order(&self) -> Result<u64, BoxError> { |     async fn submit_order( | ||||||
|         unimplemented!() |         &self, | ||||||
|  |         pair: &SymbolPair, | ||||||
|  |         amount: f64, | ||||||
|  |         price: f64, | ||||||
|  |         kind: &OrderKind, | ||||||
|  |     ) -> Result<(), BoxError> { | ||||||
|  |         let order_form = match &self.affiliate_code { | ||||||
|  |             Some(affiliate_code) => OrderForm::new(pair.trading_repr(), price, amount, kind.into()) | ||||||
|  |                 .with_meta(OrderMeta::new(affiliate_code.clone())), | ||||||
|  |             None => OrderForm::new(pair.trading_repr(), price, amount, kind.into()), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         Ok(self.bfx.orders.submit_order(&order_form).await?) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user