TA指标库
优宽量化的TA指标库优化了常用指标算法,支持JavaScript、Python、Rust、C++语言的策略调用。
javascript
function main(){
// 由于这是测试代码,未采用商品期货策略的通用架构,此处仅通过 exchange.IO("status") 函数判断是否成功连接期货公司前置机,连接成功后立即执行测试代码。股票、证券无需使用 exchange.IO("status") 判断连接状态
while(true) {
if (exchange.IO("status")) {
exchange.SetContractType("rb888")
var records = exchange.GetRecords()
// K线需要有足够的长度才能计算指标数据
if (records && records.length > 100) {
break
}
}
Sleep(1000)
}
var r = exchange.GetRecords()
var macd = TA.MACD(r)
var atr = TA.ATR(r, 14)
// 打印最后一组指标值
Log(macd[0][r.length-1], macd[1][r.length-1], macd[2][r.length-1])
Log(atr[atr.length-1])
}
python
# Python 需要单独安装 talib 库
import talib
def main():
while True:
if exchange.IO("status"):
exchange.SetContractType("rb888")
records = exchange.GetRecords()
# records 为 None 或空数组 [] 时,判断结果均为假
if records and len(records) > 100:
break
Sleep(1000)
r = exchange.GetRecords()
macd = TA.MACD(r)
atr = TA.ATR(r, 14)
Log(macd[0][-1], macd[1][-1], macd[2][-1])
Log(atr[-1])
rust
fn main() {
loop {
if exchange.IO("status").unwrap_or_default() == "true" {
let _ = exchange.SetContractType("rb888");
if let Ok(records) = exchange.GetRecords(None, None, None) {
// K线需要有足够的长度才能计算指标数据
if records.len() > 100 {
break;
}
}
}
Sleep(1000);
}
let r = exchange.GetRecords(None, None, None).unwrap();
let macd = TA.MACD(&r, None, None, None);
let atr = TA.ATR(&r, 14);
// 打印最后一组指标值
Log!(macd[0][r.len() - 1], macd[1][r.len() - 1], macd[2][r.len() - 1]);
Log!(atr[atr.len() - 1]);
}
c++
void main() {
while (true) {
if (exchange.IO("status") != 0) {
exchange.SetContractType("rb888");
auto records = exchange.GetRecords();
if (records.Valid && records.size() > 100) {
break;
}
}
Sleep(1000);
}
auto r = exchange.GetRecords();
auto macd = TA.MACD(r);
auto atr = TA.ATR(r, 14);
Log(macd[0][macd[0].size() - 1], macd[1][macd[1].size() - 1], macd[2][macd[2].size() - 1]);
Log(atr[atr.size() - 1]);
}