diff --git a/README.md b/README.md new file mode 100644 index 0000000..7c95184 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# backtestingfx + +A Rust library for backtesting FX trading strategies on OHLCV data. + +Inspired by [backtesting.py](https://kernc.github.io/backtesting.py/), built specifically for forex — lot sizes, long/short positions, stop loss, take profit, and pip-based PnL. + +## Overview + +Implement the `Strategy` trait, point it at your OHLCV data, and the engine handles the rest. The library is event-driven — your strategy receives one bar at a time and interacts with a simulated broker to open and close positions. + +```rust +struct SmaCross { + period: usize, + prices: Vec, +} + +impl Strategy for SmaCross { + fn next(&mut self, bar: &Bar, broker: &mut Broker) { + self.prices.push(bar.close); + + if self.prices.len() < self.period { + return; + } + + let sma: f64 = self.prices.iter().rev().take(self.period).sum::() / self.period as f64; + + if bar.close > sma { + broker.buy(bar.close, 1.0, bar.timestamp, None, None); + } else { + broker.close_all(bar.close, bar.timestamp); + } + } +} +``` + +## Features + +- Event-driven backtesting on OHLCV bar data +- Long and short positions +- Per-position stop loss and take profit +- Full trade history with PnL per trade +- CSV data loading +- Designed to be imported into Python via PyO3 (coming soon) + +## Getting Started + +Add to your `Cargo.toml`: + +```toml +[dependencies] +backtestingfx = { git = "https://github.com/KhizarImran/backtestingfx" } +``` + +## Project Structure + +``` +src/ +├── lib.rs # crate root +├── types.rs # Bar, Position, Trade +├── strategy.rs # Strategy trait +├── broker.rs # simulated broker +├── engine.rs # backtest event loop +└── data.rs # CSV data loader +``` + +## Status + +Early development. Core types and broker are implemented. Data loading and engine are in progress. + +## License + +MIT — see [LICENSE](LICENSE)