From 4d0d4cbfa303a96820f9bc8a090c751d51ef01bb Mon Sep 17 00:00:00 2001 From: vatsal Date: Mon, 2 Feb 2026 04:24:45 +0530 Subject: [PATCH] feat: update version to 0.2.1 and add rolling min/max indicators (#6) * feat: add session tracking and multi-leg spread backtesting Add SessionTracker for trading session management: - Market hours detection (pre-open, trading, squareoff, post-close) - Session boundary tracking with configurable timezone - Squareoff time support for intraday strategies - Session high/low/open price tracking Add SpreadBacktest for multi-leg options strategies: - Support for straddles, strangles, vertical spreads, iron condors - Coordinated entry/exit across all legs - Net premium P&L calculation with max loss/target profit exits - Helper functions for common spread configurations Extend StreamingMetrics for backtest integration: - Add equity and drawdown tracking (update_equity, current_drawdown_pct) - Add trade recording (record_trade, record_fees) - Add finalize() method to produce BacktestMetrics - Add with_initial_capital() constructor Bump version to 0.2.0. * chore: bump up version to 0.2.0 * feat: update version to 0.2.1 and add rolling min/max indicators * fix: formatting --- Cargo.lock | 2 +- Cargo.toml | 2 +- pyproject.toml | 2 +- python/raptorbt/__init__.py | 2 +- .../__pycache__/__init__.cpython-311.pyc | Bin 1392 -> 1381 bytes .../raptorbt/_raptorbt.cpython-311-darwin.so | Bin 689680 -> 739280 bytes src/core/mod.rs | 2 + src/core/session.rs | 397 ++++++++++++ src/indicators/mod.rs | 2 + src/indicators/rolling.rs | 106 ++++ src/lib.rs | 3 + src/metrics/streaming.rs | 330 ++++++++++ src/python/bindings.rs | 91 +++ src/strategies/mod.rs | 4 + src/strategies/spreads.rs | 585 ++++++++++++++++++ uv.lock | 2 +- 16 files changed, 1525 insertions(+), 5 deletions(-) create mode 100644 src/core/session.rs create mode 100644 src/indicators/rolling.rs create mode 100644 src/strategies/spreads.rs diff --git a/Cargo.lock b/Cargo.lock index ff45d14..e8471f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -502,7 +502,7 @@ dependencies = [ [[package]] name = "raptorbt" -version = "0.1.0" +version = "0.2.1" dependencies = [ "approx", "criterion", diff --git a/Cargo.toml b/Cargo.toml index 17159f5..b6a6924 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "raptorbt" -version = "0.1.0" +version = "0.2.1" edition = "2021" description = "High-performance Rust backtesting engine with Python bindings. Drop-in VectorBT replacement with up insanely faster performance at fractional memory footprint." authors = ["Alphabench "] diff --git a/pyproject.toml b/pyproject.toml index 9eeba4c..bb66548 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "raptorbt" -version = "0.1.0" +version = "0.2.1" description = "High-performance Rust backtesting engine with Python bindings. Drop-in VectorBT replacement with up insanely faster performance at fractional memory footprint." readme = "README.md" requires-python = ">=3.10" diff --git a/python/raptorbt/__init__.py b/python/raptorbt/__init__.py index 62e906f..74c9f49 100644 --- a/python/raptorbt/__init__.py +++ b/python/raptorbt/__init__.py @@ -37,7 +37,7 @@ from raptorbt._raptorbt import ( supertrend, ) -__version__ = "0.1.0" +__version__ = "0.2.1" __all__ = [ # Config classes diff --git a/python/raptorbt/__pycache__/__init__.cpython-311.pyc b/python/raptorbt/__pycache__/__init__.cpython-311.pyc index b49869a2f03fb831e37e3132b27b3d9602e0b105..c0db6a61e2d823c2f808ad7980a8cccf3a18cd7c 100644 GIT binary patch delta 39 ucmeys^^}WuIWI340}%B6sm-jM$UBL#Wa0wzjgR7)n2q!dH@h(FFaZDoiVSD~ delta 51 zcmaFL^?{3bIWI340}x!}t;}qh$UBL#e&PaiZiTe`B89@z#Jm#Ijo0Ium<{y|Hd`|5 GFaZFa;SZ|- diff --git a/python/raptorbt/_raptorbt.cpython-311-darwin.so b/python/raptorbt/_raptorbt.cpython-311-darwin.so index e29fff466bd6a38ad6910ed2ce62363b5a490f13..0840fa60e8cf856ff3987dc020b399538c904002 100755 GIT binary patch delta 217118 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

vBdndif-*9tT$6XVQoj6s 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

on3u$ENuEK_RVkLm?f9RvbCSd|~|OQVv$# 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

0EO( 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
R40ea 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 YQHL+=|8?7wm>C_XZ@Jq6+ zBp%eN3u-8Mt2q{DL8|DwII;J1RoMHwE`BLcD0KdmrLWr@MEj+r$8|K??oBeN2MITgY=0guJJ`g?x<-V>Tqk zTWC;M5XScN7Q&Dg@gIo){2|`LGQb|Az3B{(&N^YFH{IvasKMom*UzrFmAL=?vpc%{ zwQy-qTJDh-H6Mke(SI>0&_F8;AT-j_Ig`8vtH0dP;vG-RJ#ERy-GpL&y0>%!FlJ3% zDNh%8&tCbYowy4*;ibV+gdh|r3k{@;Iw3#9O^^yQNJ%dK*XzWROM=nPK1g{7kzq^7W`AwC775 z1ku`WCNY52INoyfs zI+&)T!Z0E1YgQo>db*onL#GdI}s8jTZ1JxBD`CwBT6{b*%kjo zKNf5iGkVx7yNXhwZp7IOkT^M4FOde;egh8BUUi~8%XPv{ee=%p=^eT=v}fJ-JvCnR zTHS%>Z#F%?{OSF4cs-M|{Ep0e4M{{6r%$$59u|0g<&ecousFgOSnQ=bz0&Dpy4`2w zAXrL{KC6S&6C##xbhBT{^stv_3sQLt!BK>~aH}YlMhen}NFtq91Y4M&&<0A+5uRwI zD!ouAT|#n)>-4Y0Yp>9?4co;feoeSd3xF5U^G=Z>6~R!cBPF-` zi1vyZI(r4IBhQTvH^hnCex!>H=ES%k(a9Jwx7g^wsJMYN))T{@dx?$V#)^Ds?kv?A zl<&SGwloim!_(n*EF-7<&7f>#as^E`|*&bz3g-Bi+5%5TQ7{u%l#riO%+q zciVhLu+hSz#R-c3D6k@OFDoA?Z_ymQa8vYecHJU`zS9H8FBJ~m| z8JAEtRJ77RGhCoLX9^*x;VWWblT2;8Zx~&eM%UQlcyNaPU^MAZ0)3qb1{&sPpbY|| zpP5E5xA#)%a#Jmi3y?lim`j?^5Ax2 z$X?;rDH9Q=UF;lOSiK)2D5ac z#gWI#CtDm9Gm_AVPxJbgP$jIFm{>yZgtZe}me9Cxqb?TO`8>wm+zO+HR|rjnG6pUJ z1hce@00Ar=B_F)23$2g(o&4*tZhF?_PrnbZ<15zU@t~OA36JgiXECuI*Se_?-SivM zw<{|Hoa~u4t^&u}cbv)3`B!(s#bVx>;WW+UP8USKaO&{k%7G{HRLPP3Xc zi)g@Uhu>qGFBC`ItIN_*3s0jb^u_d46QjEb^ff+JI8HxesyKg|O%=Mc$kQbDpnIcy z#rMCZr=ntga=ulqEb}z6*>+*X1kgrJ{k-M?U9R(2?#oF59)7a*oX(9t+q6O8RN!yx zjLLmzm1#2r#is2dHkuY3LT<~G#}Pl86YM57-c7eOO%VMVXi6JK`-vXv&u8%S?kd($G^~L>=Cnnh~;B>8-tXP}LinW=n*mWjrv6G&UF*U(V z_Fu`ub`slAS{4)VkCY8T+52BnilFTDuPFa4AhzcJit-XD&5V*w;s3Qo-xRPZJoTT* zj)7s7r-14D=f5lEWK2a9A-r>1{{gs;z>VKYw=^?}89V98W~PJ}G>T|#LT8ixQBZ~< zJy6RFb;&!3ya1$AcT)2cCb9cYn(%~aq(!5wni^rrGrm-3*Ebo&-0}v4nB1l?h-Kn6 z1~JD>W)PFyM8L5a{A?to#bIharB3^PfYGSU�~A&9`M8!Nxkmxy}4^2ffo>u1Af`;#TCEn6~| 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 K7rD@lzyASMFP#qn diff --git a/src/core/mod.rs b/src/core/mod.rs index c8ebc70..653cb7a 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1,9 +1,11 @@ //! Core types and utilities for RaptorBT. pub mod error; +pub mod session; pub mod timeseries; pub mod types; pub use error::{RaptorError, Result}; +pub use session::{SessionConfig, SessionTracker}; pub use timeseries::TimeSeries; pub use types::*; diff --git a/src/core/session.rs b/src/core/session.rs new file mode 100644 index 0000000..76f648a --- /dev/null +++ b/src/core/session.rs @@ -0,0 +1,397 @@ +//! Session tracking for intraday strategies. +//! +//! Handles: +//! - Session boundary detection (market open/close) +//! - Squareoff time enforcement +//! - Session high/low tracking for ORB and session-based indicators +//! - Timezone handling for IST (India Standard Time) + +use serde::{Deserialize, Serialize}; + +/// Session configuration for trading hours. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SessionConfig { + /// Market open hour (24-hour format). + pub market_open_hour: u32, + /// Market open minute. + pub market_open_minute: u32, + /// Market close hour (24-hour format). + pub market_close_hour: u32, + /// Market close minute. + pub market_close_minute: u32, + /// Squareoff minutes before market close. + pub squareoff_minutes_before_close: u32, + /// Timezone offset in hours from UTC (5 for IST = UTC+5:30). + pub timezone_offset_hours: i32, + /// Timezone offset minutes (30 for IST). + pub timezone_offset_minutes: i32, +} + +impl Default for SessionConfig { + fn default() -> Self { + // Default: NSE equity session (9:15 - 15:30 IST, squareoff at 15:25) + Self { + market_open_hour: 9, + market_open_minute: 15, + market_close_hour: 15, + market_close_minute: 30, + squareoff_minutes_before_close: 5, + timezone_offset_hours: 5, + timezone_offset_minutes: 30, + } + } +} + +impl SessionConfig { + /// Create NSE equity session config (9:15 - 15:30). + pub fn nse_equity() -> Self { + Self::default() + } + + /// Create MCX commodity session config (9:00 - 23:30). + pub fn mcx_commodity() -> Self { + Self { + market_open_hour: 9, + market_open_minute: 0, + market_close_hour: 23, + market_close_minute: 30, + squareoff_minutes_before_close: 5, + timezone_offset_hours: 5, + timezone_offset_minutes: 30, + } + } + + /// Create CDS currency session config (9:00 - 17:00). + pub fn cds_currency() -> Self { + Self { + market_open_hour: 9, + market_open_minute: 0, + market_close_hour: 17, + market_close_minute: 0, + squareoff_minutes_before_close: 5, + timezone_offset_hours: 5, + timezone_offset_minutes: 30, + } + } + + /// Get market open time in minutes from midnight. + pub fn market_open_minutes(&self) -> u32 { + self.market_open_hour * 60 + self.market_open_minute + } + + /// Get market close time in minutes from midnight. + pub fn market_close_minutes(&self) -> u32 { + self.market_close_hour * 60 + self.market_close_minute + } + + /// Get squareoff time in minutes from midnight. + pub fn squareoff_minutes(&self) -> u32 { + self.market_close_minutes().saturating_sub(self.squareoff_minutes_before_close) + } + + /// Get timezone offset in seconds. + pub fn timezone_offset_seconds(&self) -> i64 { + (self.timezone_offset_hours as i64 * 3600) + (self.timezone_offset_minutes as i64 * 60) + } +} + +/// Session tracker for managing intraday session state. +#[derive(Debug, Clone)] +pub struct SessionTracker { + config: SessionConfig, + /// Current session date (days since epoch in local timezone). + current_session_date: i64, + /// Session high price. + session_high: f64, + /// Session low price. + session_low: f64, + /// Session open price. + session_open: f64, + /// Bar index at session start. + session_start_idx: usize, + /// Whether we're currently in a trading session. + in_session: bool, + /// Whether squareoff has been triggered today. + squareoff_triggered: bool, +} + +impl SessionTracker { + /// Create a new session tracker. + pub fn new(config: SessionConfig) -> Self { + Self { + config, + current_session_date: -1, + session_high: f64::NEG_INFINITY, + session_low: f64::INFINITY, + session_open: 0.0, + session_start_idx: 0, + in_session: false, + squareoff_triggered: false, + } + } + + /// Convert nanosecond timestamp to local time components. + fn timestamp_to_local(&self, timestamp_ns: i64) -> (i64, u32, u32, u32) { + // Convert to seconds + let timestamp_s = timestamp_ns / 1_000_000_000; + + // Apply timezone offset + let local_s = timestamp_s + self.config.timezone_offset_seconds(); + + // Calculate date (days since epoch) + let days = local_s / 86400; + + // Calculate time within day + let time_in_day = (local_s % 86400) as u32; + let hours = time_in_day / 3600; + let minutes = (time_in_day % 3600) / 60; + let seconds = time_in_day % 60; + + (days, hours, minutes, seconds) + } + + /// Get minutes from midnight for a timestamp. + fn get_minutes_from_midnight(&self, timestamp_ns: i64) -> u32 { + let (_, hours, minutes, _) = self.timestamp_to_local(timestamp_ns); + hours * 60 + minutes + } + + /// Check if timestamp is within trading hours. + pub fn is_within_trading_hours(&self, timestamp_ns: i64) -> bool { + let minutes = self.get_minutes_from_midnight(timestamp_ns); + minutes >= self.config.market_open_minutes() && minutes < self.config.market_close_minutes() + } + + /// Check if it's squareoff time. + pub fn is_squareoff_time(&self, timestamp_ns: i64) -> bool { + let minutes = self.get_minutes_from_midnight(timestamp_ns); + minutes >= self.config.squareoff_minutes() + } + + /// Check if this bar starts a new session. + pub fn is_session_start(&self, prev_ts_ns: i64, curr_ts_ns: i64) -> bool { + let (prev_date, prev_h, prev_m, _) = self.timestamp_to_local(prev_ts_ns); + let (curr_date, curr_h, curr_m, _) = self.timestamp_to_local(curr_ts_ns); + + // New day + if curr_date != prev_date { + let curr_minutes = curr_h * 60 + curr_m; + return curr_minutes >= self.config.market_open_minutes(); + } + + // Same day, but crossed market open + let prev_minutes = prev_h * 60 + prev_m; + let curr_minutes = curr_h * 60 + curr_m; + + prev_minutes < self.config.market_open_minutes() + && curr_minutes >= self.config.market_open_minutes() + } + + /// Check if this bar ends the session. + pub fn is_session_end(&self, curr_ts_ns: i64, next_ts_ns: Option) -> bool { + let (curr_date, curr_h, curr_m, _) = self.timestamp_to_local(curr_ts_ns); + let curr_minutes = curr_h * 60 + curr_m; + + // At or past market close + if curr_minutes >= self.config.market_close_minutes() { + return true; + } + + // Check if next bar is in a new session + if let Some(next_ts) = next_ts_ns { + let (next_date, _, _, _) = self.timestamp_to_local(next_ts); + if next_date != curr_date { + return true; + } + } + + false + } + + /// Update session state for a new bar. + /// + /// Returns tuple of (is_new_session, is_squareoff_time, is_session_end). + pub fn update( + &mut self, + idx: usize, + timestamp_ns: i64, + open: f64, + high: f64, + low: f64, + _close: f64, + prev_timestamp_ns: Option, + next_timestamp_ns: Option, + ) -> (bool, bool, bool) { + let (date, hours, minutes, _) = self.timestamp_to_local(timestamp_ns); + let time_minutes = hours * 60 + minutes; + + // Check for new session + let is_new_session = if self.current_session_date != date { + // New date - check if within trading hours + if time_minutes >= self.config.market_open_minutes() + && time_minutes < self.config.market_close_minutes() + { + self.reset_session(idx, date, open); + true + } else { + false + } + } else if let Some(prev_ts) = prev_timestamp_ns { + if self.is_session_start(prev_ts, timestamp_ns) { + self.reset_session(idx, date, open); + true + } else { + false + } + } else { + // First bar - start session if within hours + if time_minutes >= self.config.market_open_minutes() + && time_minutes < self.config.market_close_minutes() + { + self.reset_session(idx, date, open); + true + } else { + false + } + }; + + // Update session high/low + if self.in_session { + if high > self.session_high { + self.session_high = high; + } + if low < self.session_low { + self.session_low = low; + } + } + + // Check squareoff time + let is_squareoff = + if time_minutes >= self.config.squareoff_minutes() && !self.squareoff_triggered { + self.squareoff_triggered = true; + self.in_session + } else { + false + }; + + // Check session end + let is_session_end = self.is_session_end(timestamp_ns, next_timestamp_ns); + if is_session_end { + self.in_session = false; + } + + (is_new_session, is_squareoff, is_session_end) + } + + /// Reset session state for a new trading day. + fn reset_session(&mut self, idx: usize, date: i64, open_price: f64) { + self.current_session_date = date; + self.session_start_idx = idx; + self.session_open = open_price; + self.session_high = open_price; + self.session_low = open_price; + self.in_session = true; + self.squareoff_triggered = false; + } + + /// Get current session high. + pub fn session_high(&self) -> f64 { + self.session_high + } + + /// Get current session low. + pub fn session_low(&self) -> f64 { + self.session_low + } + + /// Get current session open. + pub fn session_open(&self) -> f64 { + self.session_open + } + + /// Get session start index. + pub fn session_start_idx(&self) -> usize { + self.session_start_idx + } + + /// Check if currently in a trading session. + pub fn in_session(&self) -> bool { + self.in_session + } + + /// Get opening range (high - low) for the session. + pub fn opening_range(&self) -> f64 { + self.session_high - self.session_low + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn make_timestamp(year: i32, month: u32, day: u32, hour: u32, minute: u32) -> i64 { + // Simplified: calculate seconds from 1970-01-01 and convert to nanoseconds + // This is approximate for testing + let days_since_epoch = (year - 1970) as i64 * 365 + (month - 1) as i64 * 30 + day as i64; + let seconds = days_since_epoch * 86400 + hour as i64 * 3600 + minute as i64 * 60; + // Subtract IST offset to get UTC + let utc_seconds = seconds - (5 * 3600 + 30 * 60); + utc_seconds * 1_000_000_000 + } + + #[test] + fn test_session_config_defaults() { + let config = SessionConfig::default(); + assert_eq!(config.market_open_hour, 9); + assert_eq!(config.market_open_minute, 15); + assert_eq!(config.market_close_hour, 15); + assert_eq!(config.market_close_minute, 30); + assert_eq!(config.squareoff_minutes_before_close, 5); + } + + #[test] + fn test_squareoff_minutes() { + let config = SessionConfig::default(); + // 15:30 - 5 minutes = 15:25 = 925 minutes + assert_eq!(config.squareoff_minutes(), 925); + } + + #[test] + fn test_mcx_session() { + let config = SessionConfig::mcx_commodity(); + assert_eq!(config.market_open_hour, 9); + assert_eq!(config.market_close_hour, 23); + assert_eq!(config.market_close_minute, 30); + } + + #[test] + fn test_session_tracker_new_session() { + let config = SessionConfig::default(); + let mut tracker = SessionTracker::new(config); + + // Simulate market open at 9:15 IST + let ts = make_timestamp(2024, 1, 15, 9, 15); + let (is_new, _, _) = tracker.update(0, ts, 100.0, 101.0, 99.0, 100.5, None, None); + + assert!(is_new); + assert!(tracker.in_session()); + assert_eq!(tracker.session_open(), 100.0); + } + + #[test] + fn test_session_high_low() { + let config = SessionConfig::default(); + let mut tracker = SessionTracker::new(config); + + // First bar + let ts1 = make_timestamp(2024, 1, 15, 9, 15); + tracker.update(0, ts1, 100.0, 105.0, 95.0, 102.0, None, None); + + // Second bar + let ts2 = make_timestamp(2024, 1, 15, 9, 30); + tracker.update(1, ts2, 102.0, 110.0, 100.0, 108.0, Some(ts1), None); + + assert_eq!(tracker.session_high(), 110.0); + assert_eq!(tracker.session_low(), 95.0); + } +} diff --git a/src/indicators/mod.rs b/src/indicators/mod.rs index f22ca22..acb40b7 100644 --- a/src/indicators/mod.rs +++ b/src/indicators/mod.rs @@ -4,12 +4,14 @@ //! and return Vec outputs. NaN values are used for the warmup period. pub mod momentum; +pub mod rolling; pub mod strength; pub mod trend; pub mod volatility; pub mod volume; pub use momentum::{macd, rsi, stochastic, MacdResult, StochasticResult}; +pub use rolling::{rolling_max, rolling_min}; pub use strength::adx; pub use trend::{ema, sma, supertrend, SupertrendResult}; pub use volatility::{atr, bollinger_bands, BollingerBandsResult}; diff --git a/src/indicators/rolling.rs b/src/indicators/rolling.rs new file mode 100644 index 0000000..ee872fd --- /dev/null +++ b/src/indicators/rolling.rs @@ -0,0 +1,106 @@ +//! Rolling min/max indicators for LLV/HHV support. +//! +//! Provides rolling minimum and maximum calculations for Lowest Low Value (LLV) +//! and Highest High Value (HHV) expressions. + +use crate::core::error::RaptorError; + +/// Calculate rolling minimum (Lowest Low Value) over a period. +/// +/// Returns NaN for the first (period - 1) values where insufficient data exists. +/// +/// # Arguments +/// * `data` - Input data slice +/// * `period` - Lookback period +/// +/// # Returns +/// Vec of rolling minimum values +pub fn rolling_min(data: &[f64], period: usize) -> Result, RaptorError> { + if period == 0 { + return Err(RaptorError::invalid_parameter("period must be at least 1")); + } + + let n = data.len(); + let mut result = vec![f64::NAN; n]; + + for i in (period - 1)..n { + let start = i + 1 - period; + let min_val = + data[start..=i] + .iter() + .fold(f64::INFINITY, |a, &b| if b.is_nan() { a } else { a.min(b) }); + result[i] = if min_val == f64::INFINITY { f64::NAN } else { min_val }; + } + + Ok(result) +} + +/// Calculate rolling maximum (Highest High Value) over a period. +/// +/// Returns NaN for the first (period - 1) values where insufficient data exists. +/// +/// # Arguments +/// * `data` - Input data slice +/// * `period` - Lookback period +/// +/// # Returns +/// Vec of rolling maximum values +pub fn rolling_max(data: &[f64], period: usize) -> Result, RaptorError> { + if period == 0 { + return Err(RaptorError::invalid_parameter("period must be at least 1")); + } + + let n = data.len(); + let mut result = vec![f64::NAN; n]; + + for i in (period - 1)..n { + let start = i + 1 - period; + let max_val = + data[start..=i] + .iter() + .fold(f64::NEG_INFINITY, |a, &b| if b.is_nan() { a } else { a.max(b) }); + result[i] = if max_val == f64::NEG_INFINITY { f64::NAN } else { max_val }; + } + + Ok(result) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_rolling_min() { + let data = vec![5.0, 3.0, 8.0, 2.0, 7.0, 1.0, 9.0]; + let result = rolling_min(&data, 3).unwrap(); + + assert!(result[0].is_nan()); + assert!(result[1].is_nan()); + assert!((result[2] - 3.0).abs() < f64::EPSILON); // min(5, 3, 8) + assert!((result[3] - 2.0).abs() < f64::EPSILON); // min(3, 8, 2) + assert!((result[4] - 2.0).abs() < f64::EPSILON); // min(8, 2, 7) + assert!((result[5] - 1.0).abs() < f64::EPSILON); // min(2, 7, 1) + assert!((result[6] - 1.0).abs() < f64::EPSILON); // min(7, 1, 9) + } + + #[test] + fn test_rolling_max() { + let data = vec![5.0, 3.0, 8.0, 2.0, 7.0, 1.0, 9.0]; + let result = rolling_max(&data, 3).unwrap(); + + assert!(result[0].is_nan()); + assert!(result[1].is_nan()); + assert!((result[2] - 8.0).abs() < f64::EPSILON); // max(5, 3, 8) + assert!((result[3] - 8.0).abs() < f64::EPSILON); // max(3, 8, 2) + assert!((result[4] - 8.0).abs() < f64::EPSILON); // max(8, 2, 7) + assert!((result[5] - 7.0).abs() < f64::EPSILON); // max(2, 7, 1) + assert!((result[6] - 9.0).abs() < f64::EPSILON); // max(7, 1, 9) + } + + #[test] + fn test_invalid_period() { + let data = vec![1.0, 2.0, 3.0]; + assert!(rolling_min(&data, 0).is_err()); + assert!(rolling_max(&data, 0).is_err()); + } +} diff --git a/src/lib.rs b/src/lib.rs index 186d5c9..b116fc6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -41,6 +41,7 @@ fn _raptorbt(_py: Python<'_>, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(python::bindings::run_options_backtest, m)?)?; m.add_function(wrap_pyfunction!(python::bindings::run_pairs_backtest, m)?)?; m.add_function(wrap_pyfunction!(python::bindings::run_multi_backtest, m)?)?; + m.add_function(wrap_pyfunction!(python::bindings::run_spread_backtest, m)?)?; // Register indicator functions m.add_function(wrap_pyfunction!(python::bindings::sma, m)?)?; @@ -53,6 +54,8 @@ fn _raptorbt(_py: Python<'_>, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(python::bindings::adx, m)?)?; m.add_function(wrap_pyfunction!(python::bindings::vwap, m)?)?; m.add_function(wrap_pyfunction!(python::bindings::supertrend, m)?)?; + m.add_function(wrap_pyfunction!(python::bindings::rolling_min, m)?)?; + m.add_function(wrap_pyfunction!(python::bindings::rolling_max, m)?)?; Ok(()) } diff --git a/src/metrics/streaming.rs b/src/metrics/streaming.rs index 7a2276f..77bb280 100644 --- a/src/metrics/streaming.rs +++ b/src/metrics/streaming.rs @@ -2,9 +2,12 @@ //! //! Enables single-pass calculation of mean, variance, Sharpe ratio, and Sortino ratio. +use crate::core::types::BacktestMetrics; + /// Streaming metrics calculator using Welford's algorithm. /// /// Allows incremental calculation of statistics without storing all values. +/// Also tracks equity and drawdown for backtesting. #[derive(Debug, Clone)] pub struct StreamingMetrics { /// Number of observations. @@ -27,6 +30,59 @@ pub struct StreamingMetrics { count_positive: usize, /// Count of negative returns. count_negative: usize, + + // === Equity and drawdown tracking === + /// Initial capital. + #[allow(dead_code)] + initial_capital: f64, + /// Peak equity value (for drawdown calculation). + peak_equity: f64, + /// Current equity value. + current_equity: f64, + /// Maximum drawdown percentage. + max_drawdown_pct: f64, + /// Current drawdown percentage. + current_drawdown: f64, + /// Bars since peak (for max drawdown duration). + bars_since_peak: usize, + /// Maximum drawdown duration in bars. + max_drawdown_duration: usize, + + // === Trade tracking === + /// Number of trades. + trade_count: usize, + /// Number of winning trades. + winning_trades: usize, + /// Number of losing trades. + losing_trades: usize, + /// Sum of winning trade P&L. + sum_wins: f64, + /// Sum of losing trade P&L. + sum_losses: f64, + /// Sum of trade return percentages. + sum_trade_returns: f64, + /// Sum of squared trade return percentages (for SQN). + sum_trade_returns_sq: f64, + /// Best trade return percentage. + best_trade_pct: f64, + /// Worst trade return percentage. + worst_trade_pct: f64, + /// Sum of winning trade durations. + sum_winning_duration: usize, + /// Sum of losing trade durations. + sum_losing_duration: usize, + /// Current consecutive wins. + current_consecutive_wins: usize, + /// Current consecutive losses. + current_consecutive_losses: usize, + /// Maximum consecutive wins. + max_consecutive_wins: usize, + /// Maximum consecutive losses. + max_consecutive_losses: usize, + /// Total holding period (bars). + total_holding_period: usize, + /// Total fees paid. + total_fees: f64, } impl Default for StreamingMetrics { @@ -38,6 +94,11 @@ impl Default for StreamingMetrics { impl StreamingMetrics { /// Create a new streaming metrics calculator. pub fn new() -> Self { + Self::with_initial_capital(0.0) + } + + /// Create a new streaming metrics calculator with initial capital. + pub fn with_initial_capital(initial_capital: f64) -> Self { Self { count: 0, mean: 0.0, @@ -49,6 +110,32 @@ impl StreamingMetrics { sum_negative: 0.0, count_positive: 0, count_negative: 0, + // Equity tracking + initial_capital, + peak_equity: initial_capital, + current_equity: initial_capital, + max_drawdown_pct: 0.0, + current_drawdown: 0.0, + bars_since_peak: 0, + max_drawdown_duration: 0, + // Trade tracking + trade_count: 0, + winning_trades: 0, + losing_trades: 0, + sum_wins: 0.0, + sum_losses: 0.0, + sum_trade_returns: 0.0, + sum_trade_returns_sq: 0.0, + best_trade_pct: f64::NEG_INFINITY, + worst_trade_pct: f64::INFINITY, + sum_winning_duration: 0, + sum_losing_duration: 0, + current_consecutive_wins: 0, + current_consecutive_losses: 0, + max_consecutive_wins: 0, + max_consecutive_losses: 0, + total_holding_period: 0, + total_fees: 0.0, } } @@ -218,6 +305,249 @@ impl StreamingMetrics { self.profit_factor() } + // === Equity tracking methods === + + /// Update equity and calculate drawdown. + pub fn update_equity(&mut self, equity: f64) { + self.current_equity = equity; + + if equity > self.peak_equity { + self.peak_equity = equity; + self.bars_since_peak = 0; + } else { + self.bars_since_peak += 1; + if self.bars_since_peak > self.max_drawdown_duration { + self.max_drawdown_duration = self.bars_since_peak; + } + } + + // Calculate current drawdown percentage + if self.peak_equity > 0.0 { + self.current_drawdown = (self.peak_equity - equity) / self.peak_equity * 100.0; + if self.current_drawdown > self.max_drawdown_pct { + self.max_drawdown_pct = self.current_drawdown; + } + } + } + + /// Get current drawdown percentage. + #[inline] + pub fn current_drawdown_pct(&self) -> f64 { + self.current_drawdown + } + + /// Get maximum drawdown percentage. + #[inline] + pub fn max_drawdown_pct(&self) -> f64 { + self.max_drawdown_pct + } + + // === Trade tracking methods === + + /// Record a completed trade. + /// + /// # Arguments + /// * `pnl` - Trade profit/loss + /// * `return_pct` - Trade return percentage + /// * `duration` - Trade duration in bars + pub fn record_trade(&mut self, pnl: f64, return_pct: f64, duration: usize) { + self.trade_count += 1; + self.sum_trade_returns += return_pct; + self.sum_trade_returns_sq += return_pct * return_pct; + self.total_holding_period += duration; + + // Track best/worst trades + if return_pct > self.best_trade_pct { + self.best_trade_pct = return_pct; + } + if return_pct < self.worst_trade_pct { + self.worst_trade_pct = return_pct; + } + + if pnl > 0.0 { + self.winning_trades += 1; + self.sum_wins += pnl; + self.sum_winning_duration += duration; + self.current_consecutive_wins += 1; + self.current_consecutive_losses = 0; + if self.current_consecutive_wins > self.max_consecutive_wins { + self.max_consecutive_wins = self.current_consecutive_wins; + } + } else if pnl < 0.0 { + self.losing_trades += 1; + self.sum_losses += pnl.abs(); + self.sum_losing_duration += duration; + self.current_consecutive_losses += 1; + self.current_consecutive_wins = 0; + if self.current_consecutive_losses > self.max_consecutive_losses { + self.max_consecutive_losses = self.current_consecutive_losses; + } + } + } + + /// Record fees paid. + pub fn record_fees(&mut self, fees: f64) { + self.total_fees += fees; + } + + /// Finalize metrics and produce BacktestMetrics. + /// + /// # Arguments + /// * `initial_capital` - Starting capital + /// * `final_value` - Ending portfolio value + /// * `returns` - Array of period returns for ratio calculations + pub fn finalize( + &self, + initial_capital: f64, + final_value: f64, + returns: &[f64], + ) -> BacktestMetrics { + // Calculate return metrics from the returns array + let mut return_metrics = StreamingMetrics::new(); + for &r in returns { + if !r.is_nan() { + return_metrics.update(r); + } + } + + let total_return_pct = if initial_capital > 0.0 { + (final_value - initial_capital) / initial_capital * 100.0 + } else { + 0.0 + }; + + // Calculate trade-based metrics + let win_rate_pct = if self.trade_count > 0 { + self.winning_trades as f64 / self.trade_count as f64 * 100.0 + } else { + 0.0 + }; + + let profit_factor = if self.sum_losses > 0.0 { + self.sum_wins / self.sum_losses + } else if self.sum_wins > 0.0 { + f64::INFINITY + } else { + 0.0 + }; + + let avg_trade_return_pct = if self.trade_count > 0 { + self.sum_trade_returns / self.trade_count as f64 + } else { + 0.0 + }; + + let avg_win_pct = if self.winning_trades > 0 { + self.sum_wins / self.winning_trades as f64 / initial_capital * 100.0 + } else { + 0.0 + }; + + let avg_loss_pct = if self.losing_trades > 0 { + -(self.sum_losses / self.losing_trades as f64 / initial_capital * 100.0) + } else { + 0.0 + }; + + let avg_winning_duration = if self.winning_trades > 0 { + self.sum_winning_duration as f64 / self.winning_trades as f64 + } else { + 0.0 + }; + + let avg_losing_duration = if self.losing_trades > 0 { + self.sum_losing_duration as f64 / self.losing_trades as f64 + } else { + 0.0 + }; + + let avg_holding_period = if self.trade_count > 0 { + self.total_holding_period as f64 / self.trade_count as f64 + } else { + 0.0 + }; + + // Expectancy: average profit per trade + let expectancy = if self.trade_count > 0 { + (self.sum_wins - self.sum_losses) / self.trade_count as f64 + } else { + 0.0 + }; + + // SQN (System Quality Number) + let sqn = if self.trade_count > 1 { + let mean_return = self.sum_trade_returns / self.trade_count as f64; + let variance = + (self.sum_trade_returns_sq / self.trade_count as f64) - (mean_return * mean_return); + let std_dev = variance.max(0.0).sqrt(); + if std_dev > 0.0 { + (mean_return / std_dev) * (self.trade_count as f64).sqrt() + } else { + 0.0 + } + } else { + 0.0 + }; + + // Sharpe ratio (annualized, assuming 252 trading days) + let sharpe_ratio = return_metrics.sharpe_ratio(252.0); + + // Sortino ratio (annualized) + let sortino_ratio = return_metrics.sortino_ratio(252.0); + + // Calmar ratio (annualized return / max drawdown) + let calmar_ratio = if self.max_drawdown_pct > 0.0 { + total_return_pct / self.max_drawdown_pct + } else if total_return_pct > 0.0 { + f64::INFINITY + } else { + 0.0 + }; + + // Omega ratio + let omega_ratio = return_metrics.omega_ratio(); + + // Best/worst trade handling (handle edge cases) + let best_trade_pct = + if self.best_trade_pct == f64::NEG_INFINITY { 0.0 } else { self.best_trade_pct }; + let worst_trade_pct = + if self.worst_trade_pct == f64::INFINITY { 0.0 } else { self.worst_trade_pct }; + + BacktestMetrics { + total_return_pct, + sharpe_ratio, + sortino_ratio, + calmar_ratio, + omega_ratio, + max_drawdown_pct: self.max_drawdown_pct, + max_drawdown_duration: self.max_drawdown_duration, + win_rate_pct, + profit_factor, + expectancy, + sqn, + total_trades: self.trade_count, + total_closed_trades: self.trade_count, + total_open_trades: 0, + open_trade_pnl: 0.0, + winning_trades: self.winning_trades, + losing_trades: self.losing_trades, + start_value: initial_capital, + end_value: final_value, + total_fees_paid: self.total_fees, + best_trade_pct, + worst_trade_pct, + avg_trade_return_pct, + avg_win_pct, + avg_loss_pct, + avg_winning_duration, + avg_losing_duration, + max_consecutive_wins: self.max_consecutive_wins, + max_consecutive_losses: self.max_consecutive_losses, + avg_holding_period, + exposure_pct: 0.0, // TODO: calculate based on time in market + } + } + /// Reset all metrics. pub fn reset(&mut self) { *self = Self::new(); diff --git a/src/python/bindings.rs b/src/python/bindings.rs index 734d5b9..4fca545 100644 --- a/src/python/bindings.rs +++ b/src/python/bindings.rs @@ -15,6 +15,9 @@ use crate::strategies::options::{ }; use crate::strategies::pairs::{PairsBacktest, PairsConfig}; use crate::strategies::single::SingleBacktest; +use crate::strategies::spreads::{ + LegConfig, OptionType as SpreadOptionType, SpreadBacktest, SpreadConfig, SpreadType, +}; use super::numpy_bridge::*; @@ -673,6 +676,68 @@ pub fn run_pairs_backtest<'py>( Ok(convert_result(result)) } +/// Run spread backtest (multi-leg options). +#[pyfunction] +#[pyo3(signature = (timestamps, underlying_close, legs_premiums, leg_configs, entries, exits, config=None, spread_type="custom", max_loss=None, target_profit=None))] +pub fn run_spread_backtest<'py>( + _py: Python<'py>, + timestamps: PyReadonlyArray1, + underlying_close: PyReadonlyArray1, + legs_premiums: Vec>, + leg_configs: Vec<(String, f64, i32, usize)>, // (option_type, strike, quantity, lot_size) + entries: PyReadonlyArray1, + exits: PyReadonlyArray1, + config: Option<&PyBacktestConfig>, + spread_type: &str, + max_loss: Option, + target_profit: Option, +) -> PyResult { + let ts = numpy_to_vec_i64(timestamps); + let underlying = numpy_to_vec_f64(underlying_close); + let premiums: Vec> = legs_premiums.into_iter().map(numpy_to_vec_f64).collect(); + let entry_signals = numpy_to_vec_bool(entries); + let exit_signals = numpy_to_vec_bool(exits); + + // Convert leg configs + let rust_leg_configs: Vec = leg_configs + .into_iter() + .map(|(opt_type, strike, quantity, lot_size)| { + let option_type = + SpreadOptionType::from_str(&opt_type).unwrap_or(SpreadOptionType::Call); + LegConfig::new(option_type, strike, quantity, lot_size) + }) + .collect(); + + // Parse spread type + let spread_type_enum = match spread_type.to_lowercase().as_str() { + "straddle" => SpreadType::Straddle, + "strangle" => SpreadType::Strangle, + "vertical_call" | "verticalcall" => SpreadType::VerticalCall, + "vertical_put" | "verticalput" => SpreadType::VerticalPut, + "iron_condor" | "ironcondor" => SpreadType::IronCondor, + "iron_butterfly" | "ironbutterfly" => SpreadType::IronButterfly, + "butterfly_call" | "butterflycall" => SpreadType::ButterflyCall, + "butterfly_put" | "butterflyput" => SpreadType::ButterflyPut, + "calendar" => SpreadType::Calendar, + "diagonal" => SpreadType::Diagonal, + _ => SpreadType::Custom, + }; + + let spread_config = SpreadConfig { + base: config.map(|c| BacktestConfig::from(c)).unwrap_or_default(), + spread_type: spread_type_enum, + leg_configs: rust_leg_configs, + max_loss, + target_profit, + close_at_eod: false, + }; + + let backtest = SpreadBacktest::new(spread_config); + let result = backtest.run(&ts, &underlying, &premiums, &entry_signals, &exit_signals); + + Ok(convert_result(result)) +} + /// Run multi-strategy backtest. #[pyfunction] #[pyo3(signature = (timestamps, open, high, low, close, volume, strategies, config=None, combine_mode="any"))] @@ -903,6 +968,32 @@ pub fn supertrend<'py>( Ok((vec_to_numpy_f64(py, result.supertrend), direction_array)) } +/// Rolling minimum (Lowest Low Value). +#[pyfunction] +pub fn rolling_min<'py>( + py: Python<'py>, + data: PyReadonlyArray1, + period: usize, +) -> PyResult<&'py PyArray1> { + let vec = numpy_to_vec_f64(data); + let result = indicators::rolling::rolling_min(&vec, period) + .map_err(|e| pyo3::exceptions::PyValueError::new_err(e.to_string()))?; + Ok(vec_to_numpy_f64(py, result)) +} + +/// Rolling maximum (Highest High Value). +#[pyfunction] +pub fn rolling_max<'py>( + py: Python<'py>, + data: PyReadonlyArray1, + period: usize, +) -> PyResult<&'py PyArray1> { + let vec = numpy_to_vec_f64(data); + let result = indicators::rolling::rolling_max(&vec, period) + .map_err(|e| pyo3::exceptions::PyValueError::new_err(e.to_string()))?; + Ok(vec_to_numpy_f64(py, result)) +} + // ============================================================================ // Helper Functions // ============================================================================ diff --git a/src/strategies/mod.rs b/src/strategies/mod.rs index 88e54e9..4c5f920 100644 --- a/src/strategies/mod.rs +++ b/src/strategies/mod.rs @@ -5,9 +5,13 @@ pub mod multi; pub mod options; pub mod pairs; pub mod single; +pub mod spreads; pub use basket::BasketBacktest; pub use multi::MultiStrategyBacktest; pub use options::OptionsBacktest; pub use pairs::PairsBacktest; pub use single::SingleBacktest; +pub use spreads::{ + LegConfig, OptionType as SpreadOptionType, SpreadBacktest, SpreadConfig, SpreadType, +}; diff --git a/src/strategies/spreads.rs b/src/strategies/spreads.rs new file mode 100644 index 0000000..71769ee --- /dev/null +++ b/src/strategies/spreads.rs @@ -0,0 +1,585 @@ +//! Multi-leg options spread backtesting implementation. +//! +//! Provides high-performance spread backtesting for: +//! - Straddles and Strangles +//! - Vertical spreads (bull/bear call/put) +//! - Iron Condors and Iron Butterflies +//! - Calendar and Diagonal spreads +//! +//! Key features: +//! - Single-pass O(n) algorithm +//! - Coordinated entry/exit across all legs +//! - Net premium P&L calculation +//! - Combined Greeks tracking + +use crate::core::types::{ + BacktestConfig, BacktestMetrics, BacktestResult, Direction, ExitReason, Trade, +}; +use crate::metrics::streaming::StreamingMetrics; +use serde::{Deserialize, Serialize}; + +/// Spread type enumeration. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum SpreadType { + Straddle, + Strangle, + VerticalCall, + VerticalPut, + IronCondor, + IronButterfly, + ButterflyCall, + ButterflyPut, + Calendar, + Diagonal, + Custom, +} + +/// Option type for a leg. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum OptionType { + Call, + Put, +} + +impl OptionType { + pub fn from_str(s: &str) -> Option { + match s.to_uppercase().as_str() { + "CE" | "CALL" | "C" => Some(OptionType::Call), + "PE" | "PUT" | "P" => Some(OptionType::Put), + _ => None, + } + } +} + +/// Configuration for a single leg of a spread. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct LegConfig { + /// Option type (Call or Put). + pub option_type: OptionType, + /// Strike price. + pub strike: f64, + /// Position quantity (+1 long, -1 short). + pub quantity: i32, + /// Lot size for the option. + pub lot_size: usize, +} + +impl LegConfig { + pub fn new(option_type: OptionType, strike: f64, quantity: i32, lot_size: usize) -> Self { + Self { option_type, strike, quantity, lot_size } + } + + /// Check if this is a long position. + pub fn is_long(&self) -> bool { + self.quantity > 0 + } + + /// Check if this is a short position. + pub fn is_short(&self) -> bool { + self.quantity < 0 + } +} + +/// Configuration for spread backtest. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SpreadConfig { + /// Base backtest configuration. + pub base: BacktestConfig, + /// Spread type. + pub spread_type: SpreadType, + /// Leg configurations. + pub leg_configs: Vec, + /// Maximum loss threshold (optional, for early exit). + pub max_loss: Option, + /// Target profit threshold (optional, for early exit). + pub target_profit: Option, + /// Whether to close at end of day. + pub close_at_eod: bool, +} + +impl Default for SpreadConfig { + fn default() -> Self { + Self { + base: BacktestConfig::default(), + spread_type: SpreadType::Custom, + leg_configs: Vec::new(), + max_loss: None, + target_profit: None, + close_at_eod: false, + } + } +} + +/// State for a single leg position. +#[derive(Debug, Clone)] +struct LegPosition { + /// Entry premium price. + pub entry_premium: f64, + /// Entry index. + #[allow(dead_code)] + pub entry_idx: usize, + /// Current premium price. + pub current_premium: f64, + /// Leg configuration. + pub config: LegConfig, +} + +impl LegPosition { + fn new(config: LegConfig, entry_premium: f64, entry_idx: usize) -> Self { + Self { entry_premium, entry_idx, current_premium: entry_premium, config } + } + + /// Calculate unrealized P&L for this leg. + fn unrealized_pnl(&self) -> f64 { + // For short positions: profit when premium decreases + // For long positions: profit when premium increases + let premium_change = self.current_premium - self.entry_premium; + let quantity = self.config.quantity as f64; + let lot_size = self.config.lot_size as f64; + -quantity * premium_change * lot_size + } +} + +/// Spread position state. +#[derive(Debug, Clone)] +struct SpreadPosition { + /// Individual leg positions. + pub legs: Vec, + /// Entry bar index. + pub entry_idx: usize, + /// Entry net premium (positive = credit, negative = debit). + pub entry_net_premium: f64, + /// Entry timestamp. + pub entry_time: i64, + /// Whether position is open. + pub is_open: bool, +} + +impl SpreadPosition { + fn new(legs: Vec, entry_idx: usize, entry_time: i64) -> Self { + let entry_net_premium: f64 = legs + .iter() + .map(|leg| leg.entry_premium * leg.config.quantity as f64 * leg.config.lot_size as f64) + .sum(); + + Self { legs, entry_idx, entry_net_premium, entry_time, is_open: true } + } + + /// Calculate total unrealized P&L across all legs. + fn total_unrealized_pnl(&self) -> f64 { + self.legs.iter().map(|leg| leg.unrealized_pnl()).sum() + } + + /// Update leg premiums. + fn update_premiums(&mut self, leg_premiums: &[f64]) { + for (leg, &premium) in self.legs.iter_mut().zip(leg_premiums.iter()) { + leg.current_premium = premium; + } + } + + /// Close the position and return P&L. + fn close(&mut self) -> f64 { + self.is_open = false; + self.total_unrealized_pnl() + } +} + +/// Spread backtest runner. +pub struct SpreadBacktest { + config: SpreadConfig, +} + +impl SpreadBacktest { + /// Create a new spread backtest. + pub fn new(config: SpreadConfig) -> Self { + Self { config } + } + + /// Run the spread backtest. + /// + /// # Arguments + /// * `timestamps` - Timestamp array + /// * `underlying_close` - Underlying close prices + /// * `legs_premiums` - Premium series for each leg (Vec of Vec) + /// * `entries` - Entry signals + /// * `exits` - Exit signals + /// + /// # Returns + /// Backtest result with metrics, trades, and equity curve + pub fn run( + &self, + timestamps: &[i64], + _underlying_close: &[f64], + legs_premiums: &[Vec], + entries: &[bool], + exits: &[bool], + ) -> BacktestResult { + let n = timestamps.len(); + + // Validate inputs + if legs_premiums.len() != self.config.leg_configs.len() { + return self.empty_result(n); + } + + for premiums in legs_premiums { + if premiums.len() != n { + return self.empty_result(n); + } + } + + let mut metrics = StreamingMetrics::with_initial_capital(self.config.base.initial_capital); + let mut equity_curve = Vec::with_capacity(n); + let mut drawdown_curve = Vec::with_capacity(n); + let mut returns = Vec::with_capacity(n); + let mut trades: Vec = Vec::new(); + let mut trade_id: u64 = 0; + + let mut cash = self.config.base.initial_capital; + let mut position: Option = None; + let mut prev_equity = cash; + + // Single-pass O(n) algorithm + for i in 0..n { + // Get current leg premiums + let current_premiums: Vec = legs_premiums.iter().map(|p| p[i]).collect(); + + // Update position premiums if open + if let Some(ref mut pos) = position { + pos.update_premiums(¤t_premiums); + } + + // Calculate unrealized P&L for exit checks + let unrealized_pnl = position.as_ref().map(|p| p.total_unrealized_pnl()).unwrap_or(0.0); + + // Check for exit signals or conditions + let should_exit = position.is_some() + && (exits[i] + || self.check_max_loss(&position, unrealized_pnl) + || self.check_target_profit(&position, unrealized_pnl)); + + if should_exit { + if let Some(mut pos) = position.take() { + let pnl = pos.close(); + let fees = self.calculate_fees(&pos); + let net_pnl = pnl - fees; + + cash += net_pnl; + + // Record trade + trade_id += 1; + let exit_reason = if exits[i] { + ExitReason::Signal + } else if self.check_max_loss(&Some(pos.clone()), pnl) { + ExitReason::StopLoss + } else { + ExitReason::TakeProfit + }; + + let entry_premium = pos.entry_net_premium; + let exit_premium: f64 = current_premiums + .iter() + .zip(self.config.leg_configs.iter()) + .map(|(&p, cfg)| p * cfg.quantity as f64 * cfg.lot_size as f64) + .sum(); + + trades.push(Trade { + id: trade_id, + symbol: "SPREAD".to_string(), + entry_idx: pos.entry_idx, + exit_idx: i, + entry_price: entry_premium, + exit_price: exit_premium, + size: 1.0, + direction: Direction::Long, // Spreads are treated as "long spread" + pnl: net_pnl, + return_pct: if entry_premium.abs() > 0.0 { + net_pnl / entry_premium.abs() * 100.0 + } else { + 0.0 + }, + entry_time: pos.entry_time, + exit_time: timestamps[i], + fees, + exit_reason, + }); + + metrics.record_trade( + net_pnl, + net_pnl / entry_premium.abs() * 100.0, + i - pos.entry_idx, + ); + } + } + + // Check for entry signals + if position.is_none() && entries[i] { + let legs: Vec = self + .config + .leg_configs + .iter() + .zip(current_premiums.iter()) + .map(|(cfg, &premium)| LegPosition::new(cfg.clone(), premium, i)) + .collect(); + + let new_position = SpreadPosition::new(legs, i, timestamps[i]); + + // Calculate entry fees + let entry_fees = self.calculate_entry_fees(&new_position); + cash -= entry_fees; + + position = Some(new_position); + } + + // Update equity tracking + let equity = cash + position.as_ref().map(|p| p.total_unrealized_pnl()).unwrap_or(0.0); + equity_curve.push(equity); + + let daily_return = + if prev_equity > 0.0 { (equity - prev_equity) / prev_equity } else { 0.0 }; + returns.push(daily_return); + prev_equity = equity; + + // Update drawdown + metrics.update_equity(equity); + drawdown_curve.push(metrics.current_drawdown_pct()); + } + + // Close any remaining open position at end + if let Some(mut pos) = position.take() { + let pnl = pos.close(); + let fees = self.calculate_fees(&pos); + cash += pnl - fees; + } + + // Finalize metrics + let final_metrics = metrics.finalize(self.config.base.initial_capital, cash, &returns); + + BacktestResult { metrics: final_metrics, equity_curve, drawdown_curve, trades, returns } + } + + /// Check if max loss threshold is hit. + fn check_max_loss(&self, _position: &Option, unrealized_pnl: f64) -> bool { + if let Some(max_loss) = self.config.max_loss { + if unrealized_pnl < -max_loss { + return true; + } + } + false + } + + /// Check if target profit threshold is hit. + fn check_target_profit(&self, _position: &Option, unrealized_pnl: f64) -> bool { + if let Some(target) = self.config.target_profit { + if unrealized_pnl > target { + return true; + } + } + false + } + + /// Calculate entry fees for a position. + fn calculate_entry_fees(&self, position: &SpreadPosition) -> f64 { + let total_premium: f64 = position + .legs + .iter() + .map(|leg| leg.entry_premium.abs() * leg.config.lot_size as f64) + .sum(); + total_premium * self.config.base.fees + } + + /// Calculate exit fees for a position. + fn calculate_fees(&self, position: &SpreadPosition) -> f64 { + let total_premium: f64 = position + .legs + .iter() + .map(|leg| leg.current_premium.abs() * leg.config.lot_size as f64) + .sum(); + total_premium * self.config.base.fees * 2.0 // Entry + Exit + } + + /// Create an empty result (used for validation failures). + fn empty_result(&self, n: usize) -> BacktestResult { + BacktestResult { + metrics: BacktestMetrics::default(), + equity_curve: vec![self.config.base.initial_capital; n], + drawdown_curve: vec![0.0; n], + trades: Vec::new(), + returns: vec![0.0; n], + } + } +} + +/// Convenience function to create a straddle spread config. +pub fn create_straddle_config( + base: BacktestConfig, + strike: f64, + lot_size: usize, + short: bool, +) -> SpreadConfig { + let quantity = if short { -1 } else { 1 }; + SpreadConfig { + base, + spread_type: SpreadType::Straddle, + leg_configs: vec![ + LegConfig::new(OptionType::Call, strike, quantity, lot_size), + LegConfig::new(OptionType::Put, strike, quantity, lot_size), + ], + ..Default::default() + } +} + +/// Convenience function to create a strangle spread config. +pub fn create_strangle_config( + base: BacktestConfig, + call_strike: f64, + put_strike: f64, + lot_size: usize, + short: bool, +) -> SpreadConfig { + let quantity = if short { -1 } else { 1 }; + SpreadConfig { + base, + spread_type: SpreadType::Strangle, + leg_configs: vec![ + LegConfig::new(OptionType::Call, call_strike, quantity, lot_size), + LegConfig::new(OptionType::Put, put_strike, quantity, lot_size), + ], + ..Default::default() + } +} + +/// Convenience function to create an iron condor spread config. +pub fn create_iron_condor_config( + base: BacktestConfig, + short_put_strike: f64, + long_put_strike: f64, + short_call_strike: f64, + long_call_strike: f64, + lot_size: usize, +) -> SpreadConfig { + SpreadConfig { + base, + spread_type: SpreadType::IronCondor, + leg_configs: vec![ + LegConfig::new(OptionType::Put, short_put_strike, -1, lot_size), + LegConfig::new(OptionType::Put, long_put_strike, 1, lot_size), + LegConfig::new(OptionType::Call, short_call_strike, -1, lot_size), + LegConfig::new(OptionType::Call, long_call_strike, 1, lot_size), + ], + ..Default::default() + } +} + +/// Convenience function to create a vertical spread config. +pub fn create_vertical_spread_config( + base: BacktestConfig, + option_type: OptionType, + long_strike: f64, + short_strike: f64, + lot_size: usize, +) -> SpreadConfig { + let spread_type = match option_type { + OptionType::Call => SpreadType::VerticalCall, + OptionType::Put => SpreadType::VerticalPut, + }; + + SpreadConfig { + base, + spread_type, + leg_configs: vec![ + LegConfig::new(option_type, long_strike, 1, lot_size), + LegConfig::new(option_type, short_strike, -1, lot_size), + ], + ..Default::default() + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::core::types::StopConfig; + use crate::core::types::TargetConfig; + + fn sample_data() -> (Vec, Vec, Vec>, Vec, Vec) { + let n = 20; + let timestamps: Vec = (0..n as i64).collect(); + let underlying: Vec = (100..120).map(|x| x as f64).collect(); + + // Call and Put premiums + let call_premiums: Vec = (0..n).map(|i| 5.0 + (i as f64 * 0.2)).collect(); + let put_premiums: Vec = (0..n).map(|i| 5.0 - (i as f64 * 0.1)).collect(); + + let legs_premiums = vec![call_premiums, put_premiums]; + + let entries = vec![ + false, true, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + ]; + let exits = vec![ + false, false, false, false, false, false, false, false, false, true, false, false, + false, false, false, false, false, false, false, false, + ]; + + (timestamps, underlying, legs_premiums, entries, exits) + } + + #[test] + fn test_straddle_backtest() { + let base_config = BacktestConfig { + initial_capital: 100_000.0, + fees: 0.001, + slippage: 0.0, + stop: StopConfig::None, + target: TargetConfig::None, + upon_bar_close: true, + }; + + let config = create_straddle_config(base_config, 100.0, 50, true); + let backtest = SpreadBacktest::new(config); + + let (timestamps, underlying, legs_premiums, entries, exits) = sample_data(); + + let result = backtest.run(×tamps, &underlying, &legs_premiums, &entries, &exits); + + assert_eq!(result.trades.len(), 1); + assert!(result.equity_curve.len() == timestamps.len()); + } + + #[test] + fn test_iron_condor_backtest() { + let base_config = BacktestConfig::default(); + + let config = create_iron_condor_config( + base_config, + 95.0, // short put + 90.0, // long put + 105.0, // short call + 110.0, // long call + 50, + ); + + let backtest = SpreadBacktest::new(config); + + let n = 20; + let timestamps: Vec = (0..n as i64).collect(); + let underlying: Vec = vec![100.0; n]; + + // Four legs: short put, long put, short call, long call + let legs_premiums = vec![ + vec![3.0; n], // short put + vec![1.5; n], // long put + vec![3.0; n], // short call + vec![1.5; n], // long call + ]; + + let mut entries = vec![false; n]; + entries[1] = true; + + let mut exits = vec![false; n]; + exits[15] = true; + + let result = backtest.run(×tamps, &underlying, &legs_premiums, &entries, &exits); + + assert_eq!(result.trades.len(), 1); + } +} diff --git a/uv.lock b/uv.lock index 8a412b3..c1170e5 100644 --- a/uv.lock +++ b/uv.lock @@ -4,5 +4,5 @@ requires-python = ">=3.10" [[package]] name = "raptorbt" -version = "0.1.0" +version = "0.2.0" source = { editable = "." }