Skip to content

Commit

Permalink
Refine core generators
Browse files Browse the repository at this point in the history
  • Loading branch information
cjdsellers committed Nov 11, 2023
1 parent 7c594c5 commit ab953ed
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 46 deletions.
48 changes: 27 additions & 21 deletions nautilus_core/common/src/generators/client_order_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,37 +29,35 @@ pub struct ClientOrderIdGenerator {
}

impl ClientOrderIdGenerator {
#[must_use]
pub fn new(
trader_id: TraderId,
strategy_id: StrategyId,
clock: Box<dyn Clock>,
initial_count: Option<usize>,
initial_count: usize,
) -> Self {
Self {
trader_id,
strategy_id,
clock,
count: initial_count.unwrap_or(0),
count: initial_count,
}
}

pub fn set_count(&mut self, count: usize, _strategy_id: Option<StrategyId>) {
pub fn set_count(&mut self, count: usize) {
self.count = count;
}

pub fn reset(&mut self) {
self.count = 0;
}

pub fn count(&self, _strategy_id: Option<StrategyId>) -> usize {
#[must_use]
pub fn count(&self) -> usize {
self.count
}

pub fn generate(
&mut self,
_strategy_id: Option<StrategyId>,
_flipped: Option<bool>,
) -> ClientOrderId {
pub fn generate(&mut self) -> ClientOrderId {
let datetime_tag = get_datetime_tag(self.clock.timestamp_ms());
let trader_tag = self.trader_id.get_tag();
let strategy_tag = self.strategy_id.get_tag();
Expand Down Expand Up @@ -88,27 +86,33 @@ mod tests {
let trader_id = TraderId::from("TRADER-001");
let strategy_id = StrategyId::from("EMACross-001");
let clock = TestClock::new();
ClientOrderIdGenerator::new(trader_id, strategy_id, Box::new(clock), initial_count)
ClientOrderIdGenerator::new(
trader_id,
strategy_id,
Box::new(clock),
initial_count.unwrap_or(0),
)
}

#[rstest]
fn test_init() {
let generator = get_client_order_id_generator(None);
assert_eq!(generator.count(None), 0);
assert_eq!(generator.count(), 0);
}

#[rstest]
fn test_init_with_initial_count() {
let generator = get_client_order_id_generator(Some(7));
assert_eq!(generator.count(None), 7);
assert_eq!(generator.count(), 7);
}

#[rstest]
fn test_generate_client_order_id_from_start() {
let mut generator = get_client_order_id_generator(None);
let result1 = generator.generate(None, None);
let result2 = generator.generate(None, None);
let result3 = generator.generate(None, None);
let result1 = generator.generate();
let result2 = generator.generate();
let result3 = generator.generate();

assert_eq!(
result1,
ClientOrderId::new("O-19700101-0000-001-001-1").unwrap()
Expand All @@ -126,9 +130,10 @@ mod tests {
#[rstest]
fn test_generate_client_order_id_from_initial() {
let mut generator = get_client_order_id_generator(Some(5));
let result1 = generator.generate(None, None);
let result2 = generator.generate(None, None);
let result3 = generator.generate(None, None);
let result1 = generator.generate();
let result2 = generator.generate();
let result3 = generator.generate();

assert_eq!(
result1,
ClientOrderId::new("O-19700101-0000-001-001-6").unwrap()
Expand All @@ -146,10 +151,11 @@ mod tests {
#[rstest]
fn test_reset() {
let mut generator = get_client_order_id_generator(None);
generator.generate(None, None);
generator.generate(None, None);
generator.generate();
generator.generate();
generator.reset();
let result = generator.generate(None, None);
let result = generator.generate();

assert_eq!(
result,
ClientOrderId::new("O-19700101-0000-001-001-1").unwrap()
Expand Down
45 changes: 24 additions & 21 deletions nautilus_core/common/src/generators/order_list_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,37 +29,35 @@ pub struct OrderListIdGenerator {
}

impl OrderListIdGenerator {
#[must_use]
pub fn new(
trader_id: TraderId,
strategy_id: StrategyId,
clock: Box<dyn Clock>,
initial_count: Option<usize>,
initial_count: usize,
) -> Self {
Self {
trader_id,
strategy_id,
clock,
count: initial_count.unwrap_or(0),
count: initial_count,
}
}

pub fn set_count(&mut self, count: usize, _strategy_id: Option<StrategyId>) {
pub fn set_count(&mut self, count: usize) {
self.count = count;
}

pub fn reset(&mut self) {
self.count = 0;
}

pub fn count(&self, _strategy_id: Option<StrategyId>) -> usize {
#[must_use]
pub fn count(&self) -> usize {
self.count
}

pub fn generate(
&mut self,
_strategy_id: Option<StrategyId>,
_flipped: Option<bool>,
) -> OrderListId {
pub fn generate(&mut self) -> OrderListId {
let datetime_tag = get_datetime_tag(self.clock.timestamp_ms());
let trader_tag = self.trader_id.get_tag();
let strategy_tag = self.strategy_id.get_tag();
Expand Down Expand Up @@ -88,27 +86,32 @@ mod tests {
let trader_id = TraderId::from("TRADER-001");
let strategy_id = StrategyId::from("EMACross-001");
let clock = TestClock::new();
OrderListIdGenerator::new(trader_id, strategy_id, Box::new(clock), initial_count)
OrderListIdGenerator::new(
trader_id,
strategy_id,
Box::new(clock),
initial_count.unwrap_or(0),
)
}

#[rstest]
fn test_init() {
let generator = get_order_list_id_generator(None);
assert_eq!(generator.count(None), 0);
assert_eq!(generator.count(), 0);
}

#[rstest]
fn test_init_with_initial_count() {
let generator = get_order_list_id_generator(Some(7));
assert_eq!(generator.count(None), 7);
assert_eq!(generator.count(), 7);
}

#[rstest]
fn test_generate_order_list_id_from_start() {
let mut generator = get_order_list_id_generator(None);
let result1 = generator.generate(None, None);
let result2 = generator.generate(None, None);
let result3 = generator.generate(None, None);
let result1 = generator.generate();
let result2 = generator.generate();
let result3 = generator.generate();

assert_eq!(
result1,
Expand All @@ -127,9 +130,9 @@ mod tests {
#[rstest]
fn test_generate_order_list_id_from_initial() {
let mut generator = get_order_list_id_generator(Some(5));
let result1 = generator.generate(None, None);
let result2 = generator.generate(None, None);
let result3 = generator.generate(None, None);
let result1 = generator.generate();
let result2 = generator.generate();
let result3 = generator.generate();

assert_eq!(
result1,
Expand All @@ -148,10 +151,10 @@ mod tests {
#[rstest]
fn test_reset() {
let mut generator = get_order_list_id_generator(None);
generator.generate(None, None);
generator.generate(None, None);
generator.generate();
generator.generate();
generator.reset();
let result = generator.generate(None, None);
let result = generator.generate();

assert_eq!(
result,
Expand Down
7 changes: 3 additions & 4 deletions nautilus_core/common/src/generators/position_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ pub struct PositionIdGenerator {
}

impl PositionIdGenerator {
#[must_use]
pub fn new(trader_id: TraderId, clock: Box<dyn Clock>) -> Self {
Self {
trader_id,
Expand All @@ -46,6 +47,7 @@ impl PositionIdGenerator {
self.counts.clear();
}

#[must_use]
pub fn count(&self, strategy_id: StrategyId) -> usize {
*self.counts.get(&strategy_id).unwrap_or(&0)
}
Expand All @@ -58,10 +60,7 @@ impl PositionIdGenerator {
let trader_tag = self.trader_id.get_tag();
let strategy_tag = strategy.get_tag();
let flipped = if flipped { "F" } else { "" };
let id = format!(
"P-{}-{}-{}-{}{}",
datetime_tag, trader_tag, strategy_tag, next_count, flipped
);
let id = format!("P-{datetime_tag}-{trader_tag}-{strategy_tag}-{next_count}{flipped}");
PositionId::from(id.as_str())
}
}
Expand Down

0 comments on commit ab953ed

Please sign in to comment.