Skip to main content

StrategyContext

Struct StrategyContext 

Source
#[non_exhaustive]
pub struct StrategyContext<'a> { pub candles: &'a [Candle], pub index: usize, pub position: Option<&'a Position>, pub equity: f64, pub indicators: &'a HashMap<String, Vec<Option<f64>>>, pub extremes: Option<&'a PositionExtremes>, pub indicator_index: Option<usize>, }
Expand description

Context passed to strategy on each candle.

Provides access to historical data, current position, and pre-computed indicators.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§candles: &'a [Candle]

All candles up to and including current

§index: usize

Current candle index (0-based)

§position: Option<&'a Position>

Current position (if any)

§equity: f64

Current portfolio equity

§indicators: &'a HashMap<String, Vec<Option<f64>>>

Pre-computed indicator values (keyed by indicator name)

§extremes: Option<&'a PositionExtremes>

Price extremes since the open position was entered.

None when no position is open, when no condition in the strategy reads it, or when the context was built outside the engine’s bar loop — conditions that need it fall back to scanning from the entry bar.

§indicator_index: Option<usize>

Index override for indicator / indicator_prev lookups; None means index.

htf() keeps candles in base-bar index space while its indicator map holds a per-bar [prev, curr] pair, so indicator lookups address slot 1 while candle lookups keep index.

Implementations§

Source§

impl<'a> StrategyContext<'a>

Source

pub fn current_candle(&self) -> &Candle

Get current candle

Source

pub fn previous_candle(&self) -> Option<&Candle>

Get previous candle (None if at start)

Source

pub fn candle_at(&self, index: usize) -> Option<&Candle>

Get candle at specific index (None if out of bounds)

Source

pub fn indicator(&self, name: &str) -> Option<f64>

Get indicator value at current index

Source

pub fn indicator_at(&self, name: &str, index: usize) -> Option<f64>

Get indicator value at specific index

Source

pub fn indicator_prev(&self, name: &str) -> Option<f64>

Get indicator value at previous index

Source

pub fn has_position(&self) -> bool

Check if we have a position

Source

pub fn is_long(&self) -> bool

Check if we have a long position

Source

pub fn is_short(&self) -> bool

Check if we have a short position

Source

pub fn close(&self) -> f64

Get current close price

Source

pub fn open(&self) -> f64

Get current open price

Source

pub fn high(&self) -> f64

Get current high price

Source

pub fn low(&self) -> f64

Get current low price

Source

pub fn volume(&self) -> i64

Get current volume

Source

pub fn timestamp(&self) -> i64

Get current timestamp

Source

pub fn signal_long(&self) -> Signal

Create a Long signal from the current candle’s timestamp and close price.

Source

pub fn signal_short(&self) -> Signal

Create a Short signal from the current candle’s timestamp and close price.

Source

pub fn signal_exit(&self) -> Signal

Create an Exit signal from the current candle’s timestamp and close price.

Source

pub fn crossed_above(&self, fast_name: &str, slow_name: &str) -> bool

Check if crossover occurred (fast crosses above slow)

Source

pub fn crossed_below(&self, fast_name: &str, slow_name: &str) -> bool

Check if crossover occurred (fast crosses below slow)

Source

pub fn indicator_crossed_above(&self, name: &str, threshold: f64) -> bool

Check if indicator crossed above a threshold.

Returns true when prev <= threshold and current > threshold. The inclusive lower bound (<=) means a signal fires even when the previous bar sat exactly on the threshold, the same inclusive-previous convention crossed_above uses for indicator-vs-indicator crossings.

Source

pub fn indicator_crossed_below(&self, name: &str, threshold: f64) -> bool

Check if indicator crossed below a threshold.

Returns true when prev >= threshold and current < threshold. See indicator_crossed_above for the rationale behind the inclusive/exclusive choice on each side.

Auto Trait Implementations§

§

impl<'a> Freeze for StrategyContext<'a>

§

impl<'a> RefUnwindSafe for StrategyContext<'a>

§

impl<'a> Send for StrategyContext<'a>

§

impl<'a> Sync for StrategyContext<'a>

§

impl<'a> Unpin for StrategyContext<'a>

§

impl<'a> UnsafeUnpin for StrategyContext<'a>

§

impl<'a> UnwindSafe for StrategyContext<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PlanCallbackArgs for T

Source§

impl<T> PlanCallbackOut for T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more