engine/strategies/
constant_symmetric.rs1use super::Strategy;
2use crate::types::{Observation, Order, OrderRequest, Side};
3
4pub struct ConstantSymmetricStrategy {
5 half_spread: f64,
6 order_counter: u64,
7}
8
9impl ConstantSymmetricStrategy {
10 pub fn new(half_spread: f64) -> Self {
11 Self {
12 half_spread,
13 order_counter: 0,
14 }
15 }
16}
17
18impl Strategy for ConstantSymmetricStrategy {
19 fn on_tick(&mut self, obs: &Observation, requests: &mut Vec<OrderRequest>) {
20 let mid = (obs.best_bid + obs.best_ask) / 2.0;
21 let bid = (mid - self.half_spread) * 1.0;
22 let ask = (mid + self.half_spread) * 1.0;
23
24 requests.push(OrderRequest::CancelAll);
25
26 self.order_counter += 1;
27 requests.push(OrderRequest::New(Order::new(
28 self.order_counter,
29 Side::Buy,
30 bid,
31 1.0,
32 )));
33
34 self.order_counter += 1;
35 requests.push(OrderRequest::New(Order::new(
36 self.order_counter,
37 Side::Sell,
38 ask,
39 1.0,
40 )));
41 }
42
43 fn as_any(&self) -> &dyn std::any::Any {
44 self
45 }
46 fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
47 self
48 }
49}