Rust
平台支持使用Rust编程语言编写策略。Rust 语言的策略采用预先编译后执行的模式:回测时,策略代码由平台服务器编译,并在浏览器端的回测系统中运行;实盘环境中,Rust 语言的策略在编译通过后基于托管者运行。
借助 Rust 的所有权模型与静态类型系统,您可以在优宽量化交易平台上编写内存安全、高性能的交易策略。
- 平台API自动注入
策略代码只需一个fn main()入口即可。全部平台 API(exchange、exchanges、TA、Log!/LogStatus!、_G!/_C!等)均通过 prelude 自动注入,无需任何use/mod声明即可直接调用。可能失败的 API 调用会返回Result<T>类型,可配合_C!宏实现自动重试。rustfn main() { // GetTicker返回Result<Ticker>,用_C!宏重试直到调用成功 let ticker = _C!(exchange.GetTicker(None)); Log!("Last:", ticker.Last); } - 策略参数注入为全局常量
界面上配置的策略参数将以全局常量的形式注入策略,其 Rust 类型由参数的实际值决定(数字对应f64、布尔值对应bool、字符串/密码对应&str等),可直接通过参数名引用;您也可以通过params()函数获取参数集的 JSON 文本并自行解析。 - 支持第三方crate
策略源码是唯一的代码文件(没有单独的 Cargo.toml),需在源码最顶部使用 cargo-script 风格的 frontmatter 声明依赖,构建时会自动合并进 Cargo.toml:注意:编译沙盒中没有系统 OpenSSL,因此需要 TLS 的 crate(HTTP/WebSocket 客户端等)请选择基于纯 Rust 实现的rust--- [dependencies] serde_json = "1" --- fn main() { let v: serde_json::Value = serde_json::from_str(params()).unwrap(); Log!("参数:", v.to_string()); }rustls(例如为tokio-tungstenite开启rustls-tls-webpki-roots特性),避免依赖native-tls/openssl-sys;WebSocket 连接建议优先使用内置的Dial()函数,无需引入第三方 crate。 - 编辑器支持
策略编辑器为 Rust 策略集成了rust-analyzer,可提供代码补全与实时诊断。