输入/搜索内容
欢迎使用优宽量化交易平台
编程语言
JavaScript
TypeScript
Python
C++
My语言(麦语言)
PINE语言
Blockly可视化
Workflow工作流
支持的协议
密钥安全性
实盘
策略库
托管者
部署托管者
一键租用托管者
手动部署托管者
托管者操作注意事项
全局指定IP地址
命令行版本托管者程序的参数
实盘数据迁移
托管者监控
交易所
策略编辑器
回测系统
策略入口函数
策略框架与API函数
模板类库
策略参数
交互控件
商品期货
期权交易
股票证券
C++策略编写说明
JavaScript策略编写说明
内置库
扩展API接口
MCP 服务
交易终端
数据探索
Alpha因子分析工具
调试工具
远程编辑
完整策略的导入与导出
多语言支持
实盘、策略分组
实盘展示
策略分享与出租
实盘消息推送
实盘报错、异常退出的常见原因
交易所特殊说明、兼容记录

优宽量化交易平台已内置集成了常用的第三方库。

优宽量化的TA指标库优化了常用指标算法,支持JavaScriptPythonC++语言的策略调用。

开源TA库代码优宽量化交易平台API手册

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])
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]); }

以下是CCI指标调用示例代码,更多talib指标函数请参阅优宽量化交易平台API手册

javascript
function main() { while(!exchange.IO("status")) { Sleep(1000) } exchange.SetContractType("rb888") var records = exchange.GetRecords() var cci = talib.CCI(records, 14) Log(cci) }
python
import talib def main(): while not exchange.IO("status"): Sleep(1000) exchange.SetContractType("rb888") records = exchange.GetRecords() # 14这个参数可以省略 cci = talib.CCI(records.High, records.Low, records.Close, 14) Log(cci)
c++
void main() { while(exchange.IO("status") == 0) { Sleep(1000); } exchange.SetContractType("rb888"); auto records = exchange.GetRecords(); auto cci = talib.CCI(records, 14); Log(cci); }

  • http://mikemcl.github.io/decimal.js/
    javascript
    function main() { var x = -1.2 var a = Decimal.abs(x) var b = new Decimal(x).abs() Log(a.equals(b)) // true var y = 2.2 var sum = Decimal.add(x, y) Log(sum.equals(new Decimal(x).plus(y))) // true }
  • http://underscorejs.org/
    javascript
    function main() { var sum = _.reduce([1, 2, 3], function(memo, num){return memo + num}, 0) Log(sum) }
  • http://ta-lib.org/
    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() // 打印所有指标数据,在优宽量化交易平台上,JavaScript语言策略已集成talib库 Log(talib.MACD(r)) Log(talib.MACD(r, 12, 26, 9)) }
  • 动态加载JavaScript库
    如需使用其他第三方JavaScript库,可通过以下方式动态加载:
    javascript
    function main() { // via. https://cdnjs.com/libraries eval(HttpQuery("https://cdnjs.cloudflare.com/ajax/libs/mathjs/13.2.0/math.min.js")) Log(math.round(math.e, 3)) // 2.718 Log(math.atan2(3, -3) / math.pi) // 0.75 Log(math.log(10000, 10)) // 4 Log(math.sqrt(-4)) // {"mathjs":"Complex","re":0,"im":2} }

  • https://nlohmann.github.io/json/
    c++
    void main() { json table = R"({"type": "table", "title": "持仓信息", "cols": ["列1", "列2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]})"_json; LogStatus("`" + table.dump() + "`"); LogStatus("第一行消息\n`" + table.dump() + "`\n第三行消息"); json arr = R"([])"_json; arr.push_back(table); arr.push_back(table); LogStatus("`" + arr.dump() + "`"); table = R"({ "type" : "table", "title" : "持仓操作", "cols" : ["列1", "列2", "Action"], "rows" : [ ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "平仓"}] ] })"_json; LogStatus("`" + table.dump() + "`", "\n`" + R"({"type": "button", "cmd": "coverAll", "name": "平仓"})"_json.dump() + "`"); }