Skip to main content

Strategy

Trait Strategy 

Source
pub trait Strategy {
    // Required method
    fn on_event(&mut self, event: &MarketEvent) -> Vec<Action>;

    // Provided method
    fn on_finished(&mut self) -> Vec<Action> { ... }
}
Expand description

A trading strategy that reacts to market events.

The backtest runner calls on_event for every market event (tick or bar) in the data feed. The strategy inspects the event and returns zero or more Actions that the engine will process.

§Example

ⓘ
use qs_backtest::{Strategy, MarketEvent};
use qs_core::types::{Action, OrderType, Side};

struct BuyAndHold { entered: bool }

impl Strategy for BuyAndHold {
    fn on_event(&mut self, event: &MarketEvent) -> Vec<Action> {
        if self.entered { return vec![]; }
        if let MarketEvent::Tick { symbol, ask, .. } = event {
            self.entered = true;
            return vec![Action::Open {
                symbol: symbol.clone(),
                side: Side::Buy,
                order_type: OrderType::Market,
                price: Some(*ask),
                size: 1.0,
                stoploss: None,
                targets: vec![],
                rules: vec![],
                group: None,
                trade_id: None,
            }];
        }
        vec![]
    }

    fn on_finished(&mut self) -> Vec<Action> {
        vec![Action::CloseAll]
    }
}

Required Methods§

Source

fn on_event(&mut self, event: &MarketEvent) -> Vec<Action>

Called for every market event in the data feed.

Return an empty Vec to take no action on this event.

Provided Methods§

Source

fn on_finished(&mut self) -> Vec<Action>

Called once after the data feed is exhausted.

Use this to emit final actions such as closing all remaining positions. The default implementation does nothing.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§