use nano_core::traits::{OrderBook, Strategy};
use nano_core::types::{Fill, Order, OrderId, Price};
use nano_strategy::{BaseStrategy, StrategyState};
pub struct SimpleStrategy {
base: BaseStrategy,
}
impl SimpleStrategy {
pub fn new(name: &str, tick_value: f64) -> Self {
let mut base = BaseStrategy::new(name, tick_value);
base.set_state(StrategyState::Ready);
Self { base }
}
}
impl Strategy for SimpleStrategy {
fn name(&self) -> &str {
self.base.name()
}
fn on_market_data(&mut self, book: &dyn OrderBook) -> Vec<Order> {
// Update base strategy with new market data
self.base.on_market_data(book);
// Your strategy logic here
// Return orders to submit
Vec::new()
}
fn on_fill(&mut self, fill: &Fill) {
// Delegate to base for position tracking
self.base.on_fill(fill);
}
fn on_order_ack(&mut self, order_id: OrderId) {
// Handle order acknowledgment
}
fn on_order_reject(&mut self, order_id: OrderId, reason: &str) {
tracing::warn!("Order {} rejected: {}", order_id, reason);
}
fn on_order_cancel(&mut self, order_id: OrderId) {
// Handle order cancellation
}
fn position(&self) -> i64 {
self.base.position()
}
fn pnl(&self) -> f64 {
self.base.pnl()
}
fn is_ready(&self) -> bool {
self.base.is_ready()
}
fn reset(&mut self) {
self.base.reset();
}
}