1 个不稳定版本
0.1.0 | 2024年3月29日 |
---|
#137 在 金融 中
25KB
513 行
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