1pub mod avellaneda_stoikov;
2pub mod avellaneda_stoikov_bilateral_hawkes;
3pub mod avellaneda_stoikov_bilateral_hawkes_order_flow_imbalance;
4pub mod avellaneda_stoikov_exact;
5pub mod avellaneda_stoikov_hawkes;
6pub mod avellaneda_stoikov_heston;
7pub mod constant_symmetric;
8pub mod external;
9pub mod kelly;
10pub mod kelly_rigorous;
11pub mod random;
12pub mod signal_strategy;
13pub mod zi;
14
15pub use avellaneda_stoikov::{AvellanedaStoikovParameters, AvellanedaStoikovStrategy};
16pub use avellaneda_stoikov_bilateral_hawkes::{
17 AvellanedaStoikovBilateralHawkesParameters, AvellanedaStoikovBilateralHawkesStrategy,
18};
19pub use avellaneda_stoikov_bilateral_hawkes_order_flow_imbalance::{
20 AvellanedaStoikovBilateralHawkesOrderFlowImbalanceParameters,
21 AvellanedaStoikovBilateralHawkesOrderFlowImbalanceStrategy,
22};
23pub use avellaneda_stoikov_exact::{
24 AvellanedaStoikovExactParameters, AvellanedaStoikovExactStrategy,
25};
26pub use avellaneda_stoikov_hawkes::{
27 AvellanedaStoikovHawkesParameters, AvellanedaStoikovHawkesStrategy,
28};
29pub use avellaneda_stoikov_heston::{
30 AvellanedaStoikovHestonParameters, AvellanedaStoikovHestonStrategy,
31};
32pub use constant_symmetric::ConstantSymmetricStrategy;
33pub use external::ExternalStrategy;
34pub use kelly::{KellyParameters, KellyStrategy};
35pub use kelly_rigorous::{KellyRigorousParameters, KellyRigorousStrategy};
36pub use random::RandomStrategy;
37pub use signal_strategy::{PositionSizing, SignalCombinator, SignalEngineStrategy};
38pub use zi::ZeroIntelligenceStrategy;
39
40use crate::types::{Observation, OrderRequest};
41use std::any::Any;
42
43pub trait Strategy: Any {
52 fn on_tick(&mut self, obs: &Observation, requests: &mut Vec<OrderRequest>);
55
56 fn as_any(&self) -> &dyn Any;
58
59 fn as_any_mut(&mut self) -> &mut dyn Any;
61}
62
63pub struct NoOpStrategy;
65
66impl Strategy for NoOpStrategy {
67 fn on_tick(&mut self, _obs: &Observation, _requests: &mut Vec<OrderRequest>) {}
68 fn as_any(&self) -> &dyn Any {
69 self
70 }
71 fn as_any_mut(&mut self) -> &mut dyn Any {
72 self
73 }
74}