stuff
This commit is contained in:
parent
2705e393df
commit
370a57dbb9
70
rustybot/src/events.rs
Normal file
70
rustybot/src/events.rs
Normal file
@ -0,0 +1,70 @@
|
||||
use std::collections::HashMap;
|
||||
use std::future::Future;
|
||||
|
||||
use tokio::task::JoinHandle;
|
||||
use crate::BoxError;
|
||||
|
||||
enum SignalKind {
|
||||
ClosePosition,
|
||||
OpenPosition,
|
||||
}
|
||||
|
||||
struct EventMetadata {
|
||||
position_id: Option<u64>,
|
||||
order_id: Option<u64>,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Hash)]
|
||||
enum EventKind {
|
||||
NewMinimum,
|
||||
NewMaximum,
|
||||
ReachedLoss,
|
||||
ReachedBreakEven,
|
||||
ReachedMinProfit,
|
||||
ReachedGoodProfit,
|
||||
ReachedMaxLoss,
|
||||
TrailingStopSet,
|
||||
TrailingStopMoved,
|
||||
OrderSubmitted,
|
||||
NewTick,
|
||||
}
|
||||
|
||||
struct Event {
|
||||
kind: EventKind,
|
||||
tick: u64,
|
||||
metadata: Option<EventMetadata>,
|
||||
}
|
||||
|
||||
impl Event {
|
||||
pub fn new(kind: EventKind, tick: u64, metadata: Option<EventMetadata>) -> Self {
|
||||
Event {
|
||||
kind,
|
||||
tick,
|
||||
metadata,
|
||||
}
|
||||
}
|
||||
|
||||
fn has_metadata(&self) -> bool {
|
||||
self.metadata.is_some()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Dispatcher {
|
||||
event_handlers: HashMap<EventKind, Box<dyn FnMut(String) -> JoinHandle<()>>>
|
||||
}
|
||||
|
||||
impl Dispatcher {
|
||||
pub fn new() -> Self {
|
||||
Dispatcher {
|
||||
event_handlers: HashMap::new()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn register_event_handler<F: 'static, Fut: 'static>(&mut self, event: EventKind, mut f: F)
|
||||
where
|
||||
F: FnMut(String) -> Fut,
|
||||
Fut: Future<Output = ()> + Send,
|
||||
{
|
||||
self.event_handlers.insert(event, Box::new(move |args| tokio::spawn(f(args))));
|
||||
}
|
||||
}
|
3
rustybot/src/pairs.rs
Normal file
3
rustybot/src/pairs.rs
Normal file
@ -0,0 +1,3 @@
|
||||
struct PairStatus {
|
||||
|
||||
}
|
29
rustybot/src/positions.rs
Normal file
29
rustybot/src/positions.rs
Normal file
@ -0,0 +1,29 @@
|
||||
pub enum PositionState {
|
||||
Critical,
|
||||
Loss,
|
||||
BreakEven,
|
||||
MinimumProfit,
|
||||
Profit,
|
||||
}
|
||||
|
||||
impl PositionState {
|
||||
fn color(self) -> String {
|
||||
match self {
|
||||
PositionState::Critical | PositionState::Loss => { "red" }
|
||||
PositionState::BreakEven => { "yellow" }
|
||||
PositionState::MinimumProfit | PositionState::Profit => { "green" }
|
||||
}.into()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: implement position in bitfinex API before completing this struct
|
||||
pub struct PositionWrapper {
|
||||
position: String,
|
||||
net_profit_loss: f64,
|
||||
net_profit_loss_percentage: f64,
|
||||
state: PositionState
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
21
rustybot/src/ticker.rs
Normal file
21
rustybot/src/ticker.rs
Normal file
@ -0,0 +1,21 @@
|
||||
use tokio::time::{Duration, Instant};
|
||||
|
||||
pub struct Ticker {
|
||||
duration: Duration,
|
||||
start_time: Instant,
|
||||
current_tick: u64,
|
||||
}
|
||||
|
||||
impl Ticker {
|
||||
fn new(duration: Duration) -> Self {
|
||||
Ticker {
|
||||
duration,
|
||||
start_time: Instant::now(),
|
||||
current_tick: 1,
|
||||
}
|
||||
}
|
||||
|
||||
fn inc(&mut self) {
|
||||
self.current_tick += 1
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user