Strategy to PositionStrategy refactoring
This commit is contained in:
parent
7e8a5cc580
commit
4801d93bfe
@ -10,7 +10,7 @@ use crate::connectors::Connector;
|
|||||||
use crate::currency::{Symbol, SymbolPair};
|
use crate::currency::{Symbol, SymbolPair};
|
||||||
use crate::events::EventKind;
|
use crate::events::EventKind;
|
||||||
use crate::pairs::PairStatus;
|
use crate::pairs::PairStatus;
|
||||||
use crate::strategy::Strategy;
|
use crate::strategy::PositionStrategy;
|
||||||
use crate::ticker::Ticker;
|
use crate::ticker::Ticker;
|
||||||
use crate::BoxError;
|
use crate::BoxError;
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ impl<'a> BfxBot<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_strategy(mut self, strategy: Box<dyn Strategy>) -> Self {
|
pub fn with_strategy(mut self, strategy: Box<dyn PositionStrategy>) -> Self {
|
||||||
self.pair_statuses
|
self.pair_statuses
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.for_each(|x| x.set_strategy(dyn_clone::clone_box(&*strategy)));
|
.for_each(|x| x.set_strategy(dyn_clone::clone_box(&*strategy)));
|
||||||
|
@ -3,7 +3,7 @@ use std::collections::HashMap;
|
|||||||
use crate::currency::SymbolPair;
|
use crate::currency::SymbolPair;
|
||||||
use crate::events::{Event, EventDispatcher, SignalKind};
|
use crate::events::{Event, EventDispatcher, SignalKind};
|
||||||
use crate::models::{Order, Position};
|
use crate::models::{Order, Position};
|
||||||
use crate::strategy::Strategy;
|
use crate::strategy::PositionStrategy;
|
||||||
|
|
||||||
pub struct PairStatus<'a> {
|
pub struct PairStatus<'a> {
|
||||||
pair: SymbolPair,
|
pair: SymbolPair,
|
||||||
@ -13,12 +13,16 @@ pub struct PairStatus<'a> {
|
|||||||
orders: HashMap<u64, Vec<Order>>,
|
orders: HashMap<u64, Vec<Order>>,
|
||||||
positions: HashMap<u64, Vec<Position>>,
|
positions: HashMap<u64, Vec<Position>>,
|
||||||
current_tick: u64,
|
current_tick: u64,
|
||||||
strategy: Option<Box<dyn Strategy + 'a>>,
|
strategy: Option<Box<dyn PositionStrategy + 'a>>,
|
||||||
signals: HashMap<u64, SignalKind>,
|
signals: HashMap<u64, SignalKind>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> PairStatus<'a> {
|
impl<'a> PairStatus<'a> {
|
||||||
pub fn new(pair: SymbolPair, current_tick: u64, strategy: Option<Box<dyn Strategy>>) -> Self {
|
pub fn new(
|
||||||
|
pair: SymbolPair,
|
||||||
|
current_tick: u64,
|
||||||
|
strategy: Option<Box<dyn PositionStrategy>>,
|
||||||
|
) -> Self {
|
||||||
PairStatus {
|
PairStatus {
|
||||||
pair,
|
pair,
|
||||||
dispatcher: EventDispatcher::new(),
|
dispatcher: EventDispatcher::new(),
|
||||||
@ -42,7 +46,7 @@ impl<'a> PairStatus<'a> {
|
|||||||
pub fn add_position(&mut self, position: Position) {
|
pub fn add_position(&mut self, position: Position) {
|
||||||
let (new_position, events, signals) = {
|
let (new_position, events, signals) = {
|
||||||
match &self.strategy {
|
match &self.strategy {
|
||||||
Some(strategy) => strategy.position_on_new_tick(&position, &self),
|
Some(strategy) => strategy.on_new_tick(&position, &self),
|
||||||
None => (position, vec![], vec![]),
|
None => (position, vec![], vec![]),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -86,7 +90,7 @@ impl<'a> PairStatus<'a> {
|
|||||||
self.current_tick
|
self.current_tick
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_strategy(&mut self, strategy: Box<dyn Strategy + 'a>) {
|
pub fn set_strategy(&mut self, strategy: Box<dyn PositionStrategy + 'a>) {
|
||||||
self.strategy = Some(strategy);
|
self.strategy = Some(strategy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ use crate::models::{Position, PositionProfitState};
|
|||||||
use crate::pairs::PairStatus;
|
use crate::pairs::PairStatus;
|
||||||
use dyn_clone::DynClone;
|
use dyn_clone::DynClone;
|
||||||
|
|
||||||
pub trait Strategy: DynClone {
|
pub trait PositionStrategy: DynClone {
|
||||||
fn position_on_new_tick(
|
fn on_new_tick(
|
||||||
&self,
|
&self,
|
||||||
position: &Position,
|
position: &Position,
|
||||||
status: &PairStatus,
|
status: &PairStatus,
|
||||||
@ -37,8 +37,8 @@ impl TrailingStop {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Strategy for TrailingStop {
|
impl PositionStrategy for TrailingStop {
|
||||||
fn position_on_new_tick(
|
fn on_new_tick(
|
||||||
&self,
|
&self,
|
||||||
position: &Position,
|
position: &Position,
|
||||||
status: &PairStatus,
|
status: &PairStatus,
|
||||||
|
Loading…
Reference in New Issue
Block a user