rust #10

Merged
peperunas merged 127 commits from rust into master 2021-02-18 09:42:16 +00:00
2 changed files with 24 additions and 4 deletions
Showing only changes of commit 293ea60919 - Show all commits

View File

@ -8,9 +8,9 @@ use crate::pairs::PairStatus;
use crate::positions::{Position, PositionProfitState, PositionState};
use crate::BoxError;
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum SignalKind {
ClosePosition,
ClosePosition { position_id: u64 },
OpenPosition,
}
@ -80,7 +80,7 @@ pub struct EventDispatcher {
event_handlers: HashMap<EventKind, Vec<Box<dyn Fn(&Event, &PairStatus) -> JoinHandle<()>>>>,
profit_state_handlers:
HashMap<PositionProfitState, Vec<Box<dyn Fn(&Position, &PairStatus) -> JoinHandle<()>>>>,
signal_handlers: HashMap<SignalKind, Vec<Box<dyn Fn(&SignalKind) -> JoinHandle<()>>>>,
on_any_event_handlers: Vec<Box<dyn Fn(&Event, &PairStatus) -> JoinHandle<()>>>,
on_any_profit_state_handlers: Vec<Box<dyn Fn(&Position, &PairStatus) -> JoinHandle<()>>>,
}
@ -90,6 +90,7 @@ impl EventDispatcher {
EventDispatcher {
event_handlers: HashMap::new(),
profit_state_handlers: HashMap::new(),
signal_handlers: HashMap::new(),
on_any_event_handlers: Vec::new(),
on_any_profit_state_handlers: Vec::new(),
}
@ -157,4 +158,21 @@ impl EventDispatcher {
.push(Box::new(move |p, s| tokio::spawn(f(&p, s)))),
}
}
pub fn register_signal_handler<F: 'static, Fut: 'static>(&mut self, signal: SignalKind, f: F)
where
F: Fn(&SignalKind) -> Fut,
Fut: Future<Output = ()> + Send,
{
match signal {
// PositionProfitState::Any => self
// .on_any_position_state_handlers
// .push(Box::new(move |p, s| tokio::spawn(f(&p, s)))),
_ => self
.signal_handlers
.entry(signal)
.or_default()
.push(Box::new(move |s| tokio::spawn(f(s)))),
}
}
}

View File

@ -59,7 +59,9 @@ impl Strategy for TrailingStop {
} else if TrailingStop::MAX_LOSS_PERC < pl_perc && pl_perc < 0.0 {
PositionProfitState::Loss
} else {
signals.push(SignalKind::ClosePosition);
signals.push(SignalKind::ClosePosition {
position_id: position.position_id(),
});
PositionProfitState::Critical
}
};