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