bts-rs 0.8.0

Backtest your trading strategy.
Documentation
# BTS: BackTest Strategy

**BTS** is a Rust library designed for backtesting trading strategies on candlestick data.
It enables testing technical indicators, custom strategies, and simulating trading performance
on historical or generated data.

## **Key Features**

- **Technical Indicators**: Uses with popular indicators (Impulse MACD, Parabolic SAR, VWAP, etc.) and allows easy addition of new ones.
- **Backtesting**: Simulates trading strategies on historical or generated data.
- **Market Engine**: Processes candles one by one to test strategies under realistic conditions.
- **Performance Metrics**: Calculates P&L (Profit & Loss), drawdown, Sharpe ratio, and more.
- **Flexibility**: Compatible with indicators crates for seamless integration.
- **Order & Position Management**: Supports market orders, limit orders, take-profit,
  stop-loss, and trailing stops.

## **Usage Example**
```rust
use bts_rs::prelude::*;

// Candlestick data
let data = vec![
    CandleBuilder::builder().open(100.0).high(110.0).low(95.0).close(105.0).volume(1000.0).build().unwrap(),
    CandleBuilder::builder().open(105.0).high(115.0).low(100.0).close(110.0).volume(1000.0).build().unwrap(),
];

// Initialize backtest
let mut bts = Backtest::new(data, 1000.0, None).unwrap();

// Custom strategy
bts.run(|bt, candle| {
    // Example: Buy if closing price > opening price
    if candle.close() > candle.open() {
        let order = Order::from((OrderType::Market(candle.close()), 1.0, OrderSide::Buy));
        bt.place_order(candle, order)?;
    }
    Ok(())
}).unwrap();

// Results
println!("Final balance: {}", bts.balance());
println!("Number of positions: {}", bts.positions().count());
println!("Number of events: {}", bts.events().count());
```

See more examples in [examples](examples) folder.

## **Performance Metrics**

The backtesting engine automatically calculates the following metrics:
- **Profit & Loss (P&L)**: Total profits or losses.
- **Drawdown**: Maximum capital decline.
- **Sharpe Ratio**: Risk-adjusted return measure.
- **Win Rate**: Percentage of winning trades.

## **Integration with Other Crates**

BTS is compatible with popular indicators crates for technical analysis, allowing you to easily integrate your trading strategy.

## **Advanced Features**

- **Custom Strategies**: Implement your own trading logic.
- **Event Tracking**: Detailed logging of all trading events.
- **Risk Management**: Built-in support for stop-loss and take-profit rules.
- **Performance Optimization**: Uses efficient data structures for order/position management.
- **Parameters Optimization**: Computes the best parameters *(indicators, RR, etc...)* for your strategy.
- **Draw chart and metrics**: Draws the candlesticks data, balance, positions and metrics.

## **Error Handling**

BTS provides comprehensive error handling for:
- Insufficient funds
- Invalid orders/positions
- Market data errors
- Configuration issues
and more.

## **Getting Started**

Add BTS to your `Cargo.toml`:
```toml
[dependencies]
bts_rs = "*"
```

Then import and use it in your project:
```rust
use bts_rs::prelude::*;
```

## Contributing

Contributions are welcome! See [Contributing](CONTRIBUTING.md) file to contribute to this project.

## **License**

This project is licensed under the [MIT License](LICENSE).

*Generated by Mistral.ai*