rs-backtester

Crates.iors-backtester
lib.rsrs-backtester
version0.1.4
created_at2025-01-02 14:00:49.333091+00
updated_at2025-11-16 15:55:13.014386+00
descriptionFinancial backesting library
homepage
repositoryhttps://github.com/nicferrari/backtester
max_upload_size
id1501564
size485,949
(nicferrari)

documentation

README

rs-backtester

Latest version License Documentation

rs-backtester is a financial backtesting library entirely written in Rust with the purpose of being easy-to-use yet flexible enough to allow a quick implementation of different strategies

Get started

To get started:

  • Import the necessary modules:
use std::error::Error;
use rs_backtester::backtester::Backtest;
use rs_backtester::data::Data;
use rs_backtester::strategies::sma_cross;
use rs_backtester::report::report_horizontal;
  • Define an instance of the Data class. Market data can be retrieved either through yahoo-finance or read from a CSV file
let quotes = Data::load("test_data//NVDA.csv","NVDA")?;
  • As an alternative, you can retrieve data directly from yahoo finance with the following which makes use of the crate yahoo-finance-api
let quotes = Data::new_from_yahoo("GOOG","1d","6mo")?;
  • Create a function which returns a Strategy or use one provided by the library.
    A Strategy is basically a vector of Choices (e.g. BUY, SHORTSELL, ...) and the indicator(s) used
let sma_cross_strategy = sma_cross(quotes.clone(), 10, 20);
  • Create an instance of the Backtest class
let sma_cross_bt = Backtest::new(sma_cross_strategy,100_000f64);
  • Now:
    • you can read a report of the backtest
      report_horizontal(sma_cross_tester);
      
    • you can see the list of trades
      sma_cross_tester.print_all_trades();
      
    • you can chart it (with indicators)
      plot(sma_cross_tester,plot_config)?;
      

    • you can save it to CSV for inspection
      sma_cross_bt.to_csv("bt.csv")?;
      
    • you can also compare multiple strategies at once
      report_vertical(&[&buynhold_bt, &sma_bt, &sma_cross_bt, &rsi_bt]);
      
    • and you can also play with your strategy modifying it by inverting it or transform it in long or short-only
      let sma_cross_long = sma_cross_strategy.long_only();
      

Examples

  • backtesting: how to test a strategy, with and without commission fees
  • compare: how to compare different strategies
  • modify_strategy: how to modify a strategy in long-only, short-only, reverse
  • trades: how to obtain list of trades (with stats) in a Backtest or see details of a single trade
  • strategy: how to build a custom strategy
  • log: how to log (to csv) parts or whole Backtest
  • chart: how to save a plot (.png) of the backtest

What's new

  • 0.1.4 introduces several reworks, optimizations and clean-ups
  • More details in the changelog

Disclaimer

This software is provided for educational and research purposes only.
The results generated by this library do not guarantee future performance and should not be interpreted as financial advice.
Users are solely responsible for any decisions made based on the outputs of this software.
The authors and contributors of this project disclaim any liability for losses or damages arising from the use of this library.

Commit count: 48

cargo fmt