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…
Reference in New Issue
Block a user