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

优宽量化交易平台提供模块化、可定制的交易终端页面。用户可以自由添加各种数据模块、交易功能模块,甚至可以自行编写代码开发模块(交易终端插件)。

凭借高度灵活、自由的使用方式,极大地方便了手动交易、半程序化交易的用户。交易终端页面上的各种模块均可拖动、缩放,可修改模块绑定的交易对、交易所等设置,可添加多个同类型的模块。

优宽量化交易平台持续完善交易终端功能,为更好地方便手动交易,推出了交易终端的交易插件功能。

交易终端的相关数据存储在托管者程序(robot可执行文件)的运行目录下,具体路径为:logs/storage/0

原理与调试工具相同,将一段代码发送到交易终端页面选定的托管者执行,支持返回图表和表格(调试工具目前也已升级支持此功能)。与调试工具功能相同,仅能执行3分钟,该功能不计费。可用于实现辅助手动交易的简单功能,复杂策略仍需运行实盘。

创建交易终端插件,可在新建策略页面将策略类型设置为「交易插件」。交易插件支持JavaScriptPythonC++My语言

插件可以执行代码一段时间,用于执行一些简单的操作,例如冰山委托、挂单、撤单、计算等任务。与调试工具一样使用return返回结果,也可以直接返回图表和表格。
以下是几个示例,其他功能可以自行探索。

  • 返回深度快照

    javascript
    // 返回深度的快照 function main() { var tbl = { type: 'table', title: '深度快照 @ ' + _D(), cols: ['#', 'Amount', 'Ask', 'Bid', 'Amount'], rows: [] } var d = exchange.GetDepth() for (var i = 0; i < Math.min(Math.min(d.Asks.length, d.Bids.length), 15); i++) { tbl.rows.push([i, d.Asks[i].Amount, d.Asks[i].Price+'#ff0000', d.Bids[i].Price+'#0000ff', d.Bids[i].Amount]) } return tbl }
    python
    def main(): tbl = { "type": "table", "title": "深度快照 @ " + _D(), "cols": ["#", "Amount", "Ask", "Bid", "Amount"], "rows": [] } d = exchange.GetDepth() for i in range(min(min(len(d["Asks"]), len(d["Bids"])), 15)): tbl["rows"].append([i, d["Asks"][i]["Amount"], str(d["Asks"][i]["Price"]) + "#FF0000", str(d["Bids"][i]["Price"]) + "#0000FF", d["Bids"][i]["Amount"]]) return tbl
    c++
    void main() { json tbl = R"({ "type": "table", "title": "abc", "cols": ["#", "Amount", "Ask", "Bid", "Amount"], "rows": [] })"_json; tbl["title"] = "深度快照 @" + _D(); auto d = exchange.GetDepth(); for(int i = 0; i < 5; i++) { tbl["rows"].push_back({format("%d", i), format("%f", d.Asks[i].Amount), format("%f #FF0000", d.Asks[i].Price), format("%f #0000FF", d.Bids[i].Price), format("%f", d.Bids[i].Amount)}); } LogStatus("`" + tbl.dump() + "`"); // C++ 不支持return json 显示表格,可以创建实盘显示状态栏表格 }
  • 绘制跨期价差图

    javascript
    // 画跨期差价 var chart = { __isStock: true, title : { text : '差价分析图'}, xAxis: { type: 'datetime'}, yAxis : { title: {text: '差价'}, opposite: false }, series : [ {name : "diff", data : []} ] } function main() { exchange.SetContractType('rb2205') // 实际使用时,需要自行修改需要的合约代码 var recordsA = exchange.GetRecords(PERIOD_M5) exchange.SetContractType('rb2201') // 实际使用时,需要自行修改需要的合约代码 var recordsB = exchange.GetRecords(PERIOD_M5) for(var i = 0; i < Math.min(recordsA.length, recordsB.length); i++){ var diff = recordsA[recordsA.length - Math.min(recordsA.length, recordsB.length) + i].Close - recordsB[recordsB.length - Math.min(recordsA.length, recordsB.length) + i].Close chart.series[0].data.push([recordsA[recordsA.length - Math.min(recordsA.length, recordsB.length) + i].Time, diff]) } return chart }
    python
    chart = { "__isStock": True, "title": {"text": "差价分析图"}, "xAxis": {"type": "datetime"}, "yAxis": { "title": {"text": "差价"}, "opposite": False }, "series": [ {"name": "diff", "data": []} ] } def main(): exchange.SetContractType("rb2205") recordsA = exchange.GetRecords(PERIOD_M5) exchange.SetContractType("rb2201") recordsB = exchange.GetRecords(PERIOD_M5) for i in range(min(len(recordsA), len(recordsB))): diff = recordsA[len(recordsA) - min(len(recordsA), len(recordsB)) + i].Close - recordsB[len(recordsB) - min(len(recordsA), len(recordsB)) + i].Close chart["series"][0]["data"].append([recordsA[len(recordsA) - min(len(recordsA), len(recordsB)) + i]["Time"], diff]) return chart
    c++
    // C++ 不支持 return json 结构画图

策略广场中还有其他示例可供参考,例如:逐笔小量买入/卖出。

  • 添加交易终端插件模块
    在交易终端页面打开模块添加菜单,当前优宽量化交易平台账号策略库中的交易终端插件将自动显示在列表中,找到需要添加的插件并点击添加。
    • 运行插件
      点击「执行」按钮,交易终端插件即开始运行。插件不会显示日志信息,但可以返回并显示数据表格。
  • 插件运行时间
    交易终端插件的最长运行时间为3分钟,超过3分钟将自动停止运行。