no concurrent requests, nonce issue has to be fixed

This commit is contained in:
Giulio De Pasquale 2021-01-25 16:59:37 +00:00
parent 32419952a8
commit f66d7ef142

View File

@ -2,6 +2,7 @@ use std::collections::HashMap;
use std::ops::Neg; use std::ops::Neg;
use futures_util::stream::FuturesUnordered; use futures_util::stream::FuturesUnordered;
use futures_util::StreamExt;
use log::{debug, error, info, trace}; use log::{debug, error, info, trace};
use merge::Merge; use merge::Merge;
use tokio::sync::mpsc::channel; use tokio::sync::mpsc::channel;
@ -16,7 +17,6 @@ use crate::models::{
}; };
use crate::strategy::{FastOrderStrategy, OrderStrategy, PositionStrategy, TrailingStop}; use crate::strategy::{FastOrderStrategy, OrderStrategy, PositionStrategy, TrailingStop};
use crate::BoxError; use crate::BoxError;
use futures_util::StreamExt;
pub type OptionUpdate = (Option<Vec<Event>>, Option<Vec<Message>>); pub type OptionUpdate = (Option<Vec<Event>>, Option<Vec<Message>>);
@ -44,7 +44,7 @@ impl PriceManagerHandle {
} }
pub fn new(pair: SymbolPair, client: Client) -> Self { pub fn new(pair: SymbolPair, client: Client) -> Self {
let (sender, receiver) = channel(8); let (sender, receiver) = channel(1);
let price_manager = PriceManager::new(receiver, pair, client); let price_manager = PriceManager::new(receiver, pair, client);
tokio::spawn(PriceManagerHandle::run_price_manager(price_manager)); tokio::spawn(PriceManagerHandle::run_price_manager(price_manager));
@ -164,7 +164,7 @@ impl PositionManagerHandle {
} }
pub fn new(pair: SymbolPair, client: Client, strategy: Box<dyn PositionStrategy>) -> Self { pub fn new(pair: SymbolPair, client: Client, strategy: Box<dyn PositionStrategy>) -> Self {
let (sender, receiver) = channel(8); let (sender, receiver) = channel(1);
let manager = PositionManager::new(receiver, pair, client, strategy); let manager = PositionManager::new(receiver, pair, client, strategy);
@ -184,7 +184,7 @@ impl PositionManagerHandle {
.await?; .await?;
let response = recv.await?; let response = recv.await?;
println!("Got response: {:?}", response);
Ok(response) Ok(response)
} }
} }
@ -228,6 +228,8 @@ impl PositionManager {
_ => (None, None), _ => (None, None),
}; };
println!("Responding with {:?}", messages);
Ok(msg Ok(msg
.respond_to .respond_to
.send((events, messages)) .send((events, messages))
@ -281,6 +283,7 @@ impl PositionManager {
.insert(self.current_tick(), pos_post_tick.clone()); .insert(self.current_tick(), pos_post_tick.clone());
self.active_position = Some(pos_post_tick); self.active_position = Some(pos_post_tick);
println!("Returning: {:?}", messages);
return Ok((events, messages)); return Ok((events, messages));
} }
} }
@ -326,7 +329,7 @@ impl OrderManagerHandle {
} }
pub fn new(pair: SymbolPair, client: Client, strategy: Box<dyn OrderStrategy>) -> Self { pub fn new(pair: SymbolPair, client: Client, strategy: Box<dyn OrderStrategy>) -> Self {
let (sender, receiver) = channel(8); let (sender, receiver) = channel(1);
let manager = OrderManager::new(receiver, pair, client, strategy); let manager = OrderManager::new(receiver, pair, client, strategy);
@ -405,11 +408,15 @@ impl OrderManager {
info!("Closing position #{}", position_id); info!("Closing position #{}", position_id);
debug!("Retrieving open orders, positions and current prices..."); debug!("Retrieving open orders, positions and current prices...");
let (open_orders, order_book, open_positions) = tokio::join!( // let (open_orders, order_book, open_positions) = tokio::join!(
self.client.active_orders(&self.pair), // self.client.active_orders(&self.pair),
self.client.order_book(&self.pair), // self.client.order_book(&self.pair),
self.client.active_positions(&self.pair) // self.client.active_positions(&self.pair)
); // );
let open_orders = self.client.active_orders(&self.pair).await;
let order_book = self.client.order_book(&self.pair).await;
let open_positions = self.client.active_positions(&self.pair).await;
let open_orders = match open_orders { let open_orders = match open_orders {
Ok(open_orders) => open_orders, Ok(open_orders) => open_orders,
@ -599,6 +606,7 @@ impl PairManager {
messages.merge(opt_pos_messages); messages.merge(opt_pos_messages);
messages.merge(opt_order_messages); messages.merge(opt_order_messages);
println!("Messages: {:?}", messages);
// TODO: to move into Handler? // TODO: to move into Handler?
if let Some(messages) = messages { if let Some(messages) = messages {
for m in messages { for m in messages {