#算法交易 #交易 #回测 #

RustyTrader

RustyTrader 是一个用于回测交易策略的 Rust 库。它旨在易于使用,适用于单一股票或合约。

1 个不稳定版本

0.1.0 2024年3月29日

#137金融

MIT 许可证

25KB
513

License: MIT codecov

RustyTrader

RustyTrader 是一个用 Rust 编写的简单交易回测器。它使用 Instrument 结构体遍历数据并执行策略,相同的架构也可以用于在实时交易中执行策略。

使用方法

将以下内容添加到您的 Cargo.toml 中

[dependencies]
rusty_trader = "0.1.0"

示例


use rusty_trader::strategy::Strategy;
use RustyTrader::core::candle::{CandleSticks};
use RustyTrader::engine::backtest::BackTester;

创建策略

pub struct SMAStrategy{
    name: String,
    lookback: usize,
    sma: f64,
    sma_para: usize
}
impl Strategy for SMAStrategy {
    fn lookback(&self) -> usize {
        self.lookback
    }
    // for preprocessing the data
    fn on_bar(&mut self, ohlc: &CandleSticks) {
        let len = ohlc.candles.len();
        let price = &ohlc.candles[len - self.lookback..];
        self.sma = price[price.len() - self.sma_para..].iter()
            .map(|x| x.close).sum::<f64>() / self.sma_para as f64;
    }
    fn buy_signal(&self, ohlc: &CandleSticks) -> bool {
        let len = ohlc.candles.len();
        if ohlc.candles[len - 1].close > self.sma {
            return true;
        }
        false
    }
    fn sell_signal(&self, ohlc: &CandleSticks) -> bool {
        let len = ohlc.candles.len();
        if ohlc.candles[len - 1].close < self.sma {
            return true;
        }
        false
    }
    fn close_buy_signal(&self, ohlc: &CandleSticks) -> bool {
        let len = ohlc.candles.len();
        if ohlc.candles[len - 1].close < self.sma {
            return true;
        }
        false
    }
    fn close_sell_signal(&self, ohlc: &CandleSticks) -> bool {
        let len = ohlc.candles.len();
        if ohlc.candles[len - 1].close > self.sma {
            return true;
        }
        false
    }
}

每个策略都应该实现 Strategy trait,该 trait 具有以下方法

  • lookback: 返回策略的回测周期
  • on_bar: 预处理数据
  • buy_signal: 如果生成买入信号则返回 true
  • sell_signal: 如果生成卖出信号则返回 true
  • close_buy_signal: 如果生成关闭买入信号则返回 true
  • close_sell_signal: 如果生成关闭卖出信号则返回 true

回测策略

fn main() {
    let strategy = SMAStrategy{ name: "SMA".to_string(), lookback: 20, sma: 0.0, sma_para: 5 };
    let file = r"ES_5min.txt";
    
    let back_tester = BackTester{ data_file: file.to_string(), quantity: 1, commission: 0.0008, stop_loss: 0.99, take_profit: 1.03 };
    let pnl = back_tester.run(Box::new(strategy));
    println!("{:?}", pnl);

}

许可证

本项目许可协议为 MIT 许可证 - 请参阅 LICENSE.md 文件以获取详细信息

功能

  • 回测
  • 实时交易
  • 数据源
  • 风险管理
  • 优化
  • 报告
  • 可视化

该项目仍处于开发初期阶段,许多功能尚未实现。

依赖

~15MB
~296K SLoC