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

优宽量化开放了平台的扩展API接口,支持通过程序化方式调用优宽量化交易平台的各项功能。

优宽量化交易平台支持扩展API接口的权限管理,可以设置API KEY的权限。在平台账号设置页面的「API接口」选项中,点击「创建新的ApiKey」按钮即可创建扩展API KEY

在创建API KEY时,可以编辑「API权限」输入框,输入*符号以开启所有扩展API接口权限。如需指定具体接口权限,请输入对应的扩展API函数名,使用英文逗号分隔,例如:GetRobotDetail,DeleteRobot。这将赋予该API KEY调用获取实盘详细信息接口和删除实盘接口的权限。在API KEY管理页面,您还可以对已创建的API KEY进行修改禁用删除等操作。

扩展API接口返回的数据结构示例如下:

json
{ "code":0, "data":{ // 省略 ... } }

其中 code 字段表示扩展API接口的返回状态码。

描述代码
执行成功0
错误的API KEY1
错误的签名2
Nonce错误3
方法不正确4
参数不正确5
内部未知错误6

GetRobotList接口、GetRobotDetail接口、GetRobotLogs接口返回的数据中status字段为:实盘状态码。

  • 正常启动
    状态代码
    空闲中0
    运行中1
    停止中2
    已退出3
    被停止4
    策略有错误5
  • 异常
    状态代码
    策略已过期,请联系作者重新购买-1
    未找到托管者-2
    策略编译错误-3
    实盘已处于运行状态-4
    余额不足-5
    策略并发数超限-6

调用扩展API接口时支持两种验证方式:token验证和直接验证。

使用md5加密方式进行验证,以下是PythonGolang语言的调用示例:

python
#!/usr/bin/python # -*- coding: utf-8 -*- import time import json import ssl ssl._create_default_https_context = ssl._create_unverified_context try: import md5 import urllib2 from urllib import urlencode except: import hashlib as md5 import urllib.request as urllib2 from urllib.parse import urlencode accessKey = 'f27bfcXXXXXXXX013c62e98XXXXX817a' secretKey = 'ffeXXXXXXXX085ff7269XXXXXXXX6f82' def api(method, *args): d = { 'version': '1.0', 'access_key': accessKey, 'method': method, 'args': json.dumps(list(args)), 'nonce': int(time.time() * 1000), } d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest() # 注意:urllib2.urlopen 函数可能存在超时问题,可以设置超时时间,例如:urllib2.urlopen('https://www.youquant.com/api/v1', urlencode(d).encode('utf-8'), timeout=10) 设置超时时间为10秒 return json.loads(urllib2.urlopen('https://www.youquant.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8')) # 返回托管者列表 print(api('GetNodeList')) # 返回交易所列表 print(api('GetPlatformList')) # GetRobotList(offset, length, robotStatus, label),传入-1表示获取全部 print(api('GetRobotList', 0, 5, -1, 'member2')) # CommandRobot(robotId, cmd)向实盘发送命令 print(api('CommandRobot', 123, 'ok')) # StopRobot(robotId)返回实盘状态码 print(api('StopRobot', 123)) # RestartRobot(robotId)返回实盘状态码 print(api('RestartRobot', 123)) # GetRobotDetail(robotId)返回实盘详细信息 print(api('GetRobotDetail', 123))
mylang
package main import ( "fmt" "time" "encoding/json" "crypto/md5" "encoding/hex" "net/http" "io/ioutil" "strconv" "net/url" ) // 填写您的优宽量化交易平台账号的API密钥 var apiKey string = "" // 填写您的优宽量化交易平台账号的密钥 var secretKey string = "" var baseApi string = "https://www.youquant.com/api/v1" func api(method string, args ... interface{}) (ret interface{}) { // 处理参数 jsonStr, err := json.Marshal(args) if err != nil { panic(err) } params := map[string]string{ "version" : "1.0", "access_key" : apiKey, "method" : method, "args" : string(jsonStr), "nonce" : strconv.FormatInt(time.Now().UnixNano() / 1e6, 10), } data := fmt.Sprintf("%s|%s|%s|%v|%s", params["version"], params["method"], params["args"], params["nonce"], secretKey) h := md5.New() h.Write([]byte(data)) sign := h.Sum(nil) params["sign"] = hex.EncodeToString(sign) // http request client := &http.Client{} // request urlValue := url.Values{} for k, v := range params { urlValue.Add(k, v) } urlStr := urlValue.Encode() request, err := http.NewRequest("GET", baseApi + "?" + urlStr, nil) if err != nil { panic(err) } resp, err := client.Do(request) if err != nil { panic(err) } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) if err != nil { panic(err) } ret = string(b) return } func main() { settings := map[string]interface{}{ "name": "hedge test", "strategy": 1234, // K线周期参数,60表示60秒 "period": 60, "node" : 1234, "appid": "member2", "exchanges": []interface{}{ map[string]interface{}{ "pid": "1234", "pair": "FUTURES", }, }, } method := "NewRobot" fmt.Println("调用接口:", method) ret := api(method, settings) fmt.Println("main ret:", ret) }

支持不使用token验证(直接传递secret_key验证),可以生成一个用于直接访问的URL。例如直接向实盘发送交互指令的URL,可用于Trading View或其他场景的WebHook回调。对于扩展API接口CommandRobot()函数,不进行nonce校验,不限制该接口的访问频率和访问次数。

例如,创建的扩展API KEY中的AccessKey为:xxxSecretKey为:yyy,访问以下链接即可向ID为186515的实盘发送交互指令消息,消息内容为字符串:"ok12345"

plaintext
https://www.youquant.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=%5B186515%2C%22ok12345%22%5D

在支持直接验证方式下,可获取请求中的Body数据,仅支持CommandRobot接口。例如在Trading ViewWebHook URL中设置:

plaintext
https://www.youquant.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=%5B186515%2C+%22%22%5D

注意需要按照此格式设置:%5B186515%2C+%22%22%5D(编码前为:[186515, ""]),其中186515是优宽量化交易平台的实盘ID。

模拟Trading View发送WebHook URL警报:

javascript
function main() { var options = { method: "POST", body: `{"test": 123}`, headers: {"Content-Type": "application/json"} } // WebHook URL 警报会自动发送POST请求,包含需要的 headers 设置 return HttpQuery("https://www.youquant.com/api/v1?access_key=xxx&secret_key=xxx&method=CommandRobot&args=%5B186515%2C+%22%22%5D", options) }

Trading View消息框中设置(要发送的请求中的Body数据):

  • JSON格式:

    img

    text
    {"close": {{close}}, "name": "aaa"}

    ID为186515的实盘即可收到交互命令:{"close": 39773.75, "name": "aaa"}

  • 文本格式:

    img

    text
    XXX PERP 穿过(Crossing) 39700.00 close: {{close}}

    ID为186515的实盘即可收到交互命令:XXX PERP 穿过(Crossing) 39700.00 close: 39739.4

PythonGolang语言调用示例:

python
#!/usr/bin/python # -*- coding: utf-8 -*- import json import ssl ssl._create_default_https_context = ssl._create_unverified_context try: import urllib2 except: import urllib.request as urllib2 accessKey = 'your accessKey' secretKey = 'your secretKey' def api(method, *args): return json.loads(urllib2.urlopen(('https://www.youquant.com/api/v1?access_key=%s&secret_key=%s&method=%s&args=%s' % (accessKey, secretKey, method, json.dumps(list(args)))).replace(' ', '')).read().decode('utf-8')) # 如果APIKEY 没有该接口权限,调用 print(api('RestartRobot', 130350)) 会失败,返回数据:{'code': 4, 'data': None} # print(api('RestartRobot', 130350)) # 打印ID为:130350的实盘详细信息 print(api('GetRobotDetail', 130350))
mylang
package main import ( "fmt" "encoding/json" "net/http" "io/ioutil" "net/url" ) // 填写自己的优宽量化交易平台账号的api key var apiKey string = "your access_key" // 填写自己的优宽量化交易平台账号的secret key var secretKey string = "your secret_key" var baseApi string = "https://www.youquant.com/api/v1" func api(method string, args ... interface{}) (ret interface{}) { jsonStr, err := json.Marshal(args) if err != nil { panic(err) } params := map[string]string{ "access_key" : apiKey, "secret_key" : secretKey, "method" : method, "args" : string(jsonStr), } // http request client := &http.Client{} // request urlValue := url.Values{} for k, v := range params { urlValue.Add(k, v) } urlStr := urlValue.Encode() request, err := http.NewRequest("GET", baseApi + "?" + urlStr, nil) if err != nil { panic(err) } resp, err := client.Do(request) if err != nil { panic(err) } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) if err != nil { panic(err) } ret = string(b) return } func main() { method := "GetRobotDetail" fmt.Println("调用接口:", method) ret := api(method, 130350) fmt.Println("main ret:", ret) }

使用优宽量化交易平台扩展API实现TradingView报警信号交易
使用优宽量化交易平台扩展API实现TradingView报警信号交易,B站视频链接

  • 优宽量化交易平台扩展API接口
    https://www.youquant.com/api/v1?中,?符号后面跟随请求参数。使用Python语言描述请求参数:

    python
    { 'version' : '1.0', 'access_key': 'xxx', # AccessKey,在账户管理页面申请 'method' : 'GetNodeList', # 具体调用的方法 'args' : [], # 具体调用的method方法的参数列表 'nonce' : 1516292399361, # 时间戳,单位为毫秒,允许与标准时间戳前后误差1小时,nonce必须大于上一次访问时的nonce值 'sign' : '085b63456c93hfb243a757366600f9c2' # 签名 }

    各参数以字符&分隔,参数名和参数值用符号=连接,完整的请求URL(以method=GetNodeList为例):

    text
    https://www.youquant.com/api/v1? access_key=xxx& nonce=1516292399361& args=%5B%5D& sign=085b63456c93hfb243a757366600f9c2& version=1.0& method=GetNodeList

    注意:请求参数中不包含secret_key参数。

  • 签名方式
    请求参数中sign参数的加密方式如下,按照以下格式:

    text
    version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey

    拼接字符串后,使用MD5加密算法对字符串进行加密,并转换为十六进制字符串,该值作为参数sign的值。签名部分参考Python代码,扩展API接口「验证方式」

    python
    # 参数 d = { 'version': '1.0', 'access_key': accessKey, 'method': method, 'args': json.dumps(list(args)), 'nonce': int(time.time() * 1000), } # 计算sign签名 d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest()
  • 接口业务错误:

    • 参数不足:
      json
      { "code":0, "data":{ "result":null, "error":"Params length incorrect" } }

GetNodeList方法用于获取请求中API KEY对应的优宽量化交易平台账号下的托管者列表。

返回值

json
{ "code": 0, "data": { "result": { "all": 1, "nodes": [{ "build": "3.7", "city": "...", "created": "2024-10-10 22:58:30", "date": "2024-11-25 13:30:50", "forward": "...", "guid": "...", "host": "node.youquant.com:9902", "id": 123, "ip": "...", "is_owner": true, "loaded": 1, "name": "linux", "online": true, "os": "linux/amd64", "peer": "...", "public": 0, "region": "...", "tunnel": false, "version": "...", "wd": 0 }] }, "error": null } }

返回值字段说明(含义明显的字段不再赘述):

  • all: 当前账户关联的托管者总数。
  • nodes: 托管者节点的详细信息列表。
    • build: 版本号。
    • city: 所在城市。
    • is_owner: true表示私有托管者,false表示公共托管者。
    • loaded: 负载数量,即当前运行的策略实例数。
    • public: 0表示私有托管者,1表示公共托管者。
    • region: 地理位置。
    • version: 托管者的详细版本信息。
    • wd: 离线报警开关,0表示未开启。
      一键部署的托管者包含额外信息,相关字段以ecs_unit_为前缀,记录了一键部署托管者服务器的相关信息(运营商名称、配置、状态等)以及计费周期、价格等信息,此处不再详述。

参数

无参数

GetRobotGroupList方法用于获取请求中API KEY对应的优宽量化交易平台账号下的实盘分组列表。

返回值

json
{ "code":0, "data":{ "result":{ "items":[{ "id":2426, "name":"C++实盘" }] }, "error":null } }
  • items: 实盘分组信息。
    • id: 实盘分组ID。
    • name: 实盘分组名称。
      items字段仅记录创建的新分组,「默认」分组不包含在items中。

参数

无参数

GetPlatformList方法用于获取请求中API KEY对应的优宽量化交易平台账号下已添加的交易所列表。

返回值

json
{ "code": 0, "data": { "result": { "all": 1, "platforms": [{ "category": "商品期货", "date": "2024-04-23 13:38:24", "eid": "Futures_CTP", "id": 123, "label": "期货主席(看穿式监管)", "logo": "...", "name": "CTP协议", "profiles": "...", "stocks": ["FUTURES"], "website": "http://www.sfit.com.cn/" }] }, "error": null } }
  • all: 已添加或配置的交易所对象总数。
  • platforms: 交易所相关信息。
    • eid: 优宽量化交易平台上的交易所标识符,在某些配置和参数中会使用eid
    • profiles: 前置机配置信息。

参数

无参数

GetRobotList方法用于获取请求中API KEY对应的优宽量化交易平台账号下的实盘列表。

返回值

json
{ "code": 0, "data": { "result": { "all": 1, "concurrent": 0, "robots": [{ "charge_time": 1729561129, "date": "2024-09-26 21:34:28", "end_time": "2024-10-22 09:12:47", "fixed_id": 1666928, "id": 473200, "is_sandbox": 0, "name": "测试", "node_guid": "0a77f717c15843910863a4c1b2867ca2", "node_id": 1666928, "node_public": 0, "profit": 123, "public": 0, "refresh": 1729559554000, "start_time": "2024-10-11 13:38:49", "status": 4, "strategy_id": 399872, "strategy_isowner": true, "strategy_language": 0, "strategy_name": "测试", "strategy_public": 0, "uid": "0a77f717c15843910863a4c1b2867ca2", "wd": 0 }] }, "error": null } }
  • robots: 实盘信息
    • group_id: 实盘分组ID;如果实盘位于默认分组中,则不包含group_id字段。

参数

名称类型必填描述

offset

number

分页查询的偏移量设置。

length

number

分页查询的数据长度设置。

robotStatus

number

指定要查询的实盘状态,参考扩展API接口「实盘状态码」,传入-1表示获取全部实盘。

label

string

指定要查询的实盘自定义标签,可筛选出包含该标签的所有实盘。

keyWord

string

查询关键字。

备注

Python语言的扩展API接口「验证方式」为例:

print(api('GetRobotList')):获取全部实盘信息。

print(api('GetRobotList', 'member2')):打印所有自定义标签为member2的实盘信息。

print(api('GetRobotList', 0, 5, -1, 'member2')):分页查询,从偏移量0开始,最多返回5个标签为member2的实盘。

CommandRobot方法用于向请求中API KEY对应的优宽量化交易平台账号下的实盘发送交互命令。接收交互命令的实盘ID由robotId参数指定,交互命令由策略中调用的GetCommand()函数捕获并返回。

返回值

json
{ "code":0, "data":{ "result":false, "error":null } }
  • result: 交互指令是否发送成功。向未运行的实盘发送指令时,返回数据中的result为false。

参数

名称类型必填描述

robotId

number

robotId参数用于指定接收交互指令的实盘ID。可以通过GetRobotList方法获取账号下实盘的信息,其中包含实盘ID。

cmd

string

cmd参数是发送给实盘的交互指令。实盘策略中的GetCommand()函数会捕获该交互命令,触发策略的交互逻辑。策略代码中的具体交互逻辑实现,请参考优宽量化交易平台API手册中的GetCommand()函数说明。

备注

实盘策略示例(假设该策略实盘正在运行,实盘ID为123):

javascript
function main() { while (true) { var cmd = GetCommand() if (cmd) { Log(cmd) } Sleep(2000) } }

如果使用本章节的Python测试脚本访问优宽量化交易平台的扩展API:api("CommandRobot", 123, "test command"),ID为123的实盘将收到交互指令test command,并通过Log函数输出打印。

StopRobot方法用于停止请求中API KEY对应的优宽量化交易平台账户下的实盘。停止运行的实盘ID由robotId参数指定。

返回值

json
{ "code":0, "data":{ "result":4, "error":null } }
  • result: 实盘状态码,4表示已停止。

参数

名称类型必填描述

robotId

number

robotId参数用于指定需要停止的实盘ID。可通过GetRobotList方法获取账户下的实盘信息,其中包含实盘ID。

RestartRobot方法用于重启请求中API KEY对应的优宽量化交易平台账号下的实盘。重启的实盘ID由robotId参数指定。

返回值

json
{ "code":0, "data":{ "result":1, "error":null } }
  • result: 实盘状态码,1表示运行中。

参数

名称类型必填描述

robotId

number

robotId参数用于指定要重启的实盘ID。可以使用GetRobotList方法获取账号下实盘的信息,其中包含实盘ID。

settings

JSON对象

实盘配置参数。settings参数格式如下:

json
{ "appid":"test", "args":[], "exchanges":[ {"pair":"FUTURES","pid":123} ], "name":"测试", "node":123, "period":60, "strategy":123 }
  • appid: 自定义字段
    可以定义标签。
  • args: 策略参数设置
    结构为数组,每个元素为一个参数。例如,策略有一个参数Interval,重启策略时希望将Interval设置为500,则args中应包含:["Interval", 500],即:"args": [["Interval", 500]]
  • exchanges: 实盘绑定的交易所对象配置
    结构为数组,其中每个元素为一个交易所对象配置。
    • 可以绑定已在平台配置的交易所对象
      使用pid配置:{"pair":"FUTURES","pid":123}pid可以通过GetPlatformList接口查询,返回数据中的id字段即为交易所pid
    • 可以直接传入配置信息,绑定交易所对象
      使用eid配置:{"eid":"Futures_CTP","meta":{},"pair":"FUTURES_CTP"};传入的配置信息不会被优宽量化交易平台存储。这些数据会直接转发给托管者程序,因此每次创建或重启实盘时必须配置该信息。meta的具体格式请参考GetExchangeList接口返回数据中的meta字段内容。
      以CTP协议为例,配置华安期货的信息,meta字段结构如下:
      json
      "meta":{ "AppID":"xxx", "AuthCode":"xxx", "BrokerId":"6020", "ClientVer":"BT_T_V001", "MDFront":"...", "Name":"华安期货(看穿式监管)", "Password":"xxx", "TDFront":"...", "Username":"xxx", "V2":true }
      GetExchangeList接口返回数据中required为真的配置项,在配置meta时不可为空。required为假的配置项在配置meta时可为空。例如上例中的AuthCodeName
      Username: 资金账号。
      Password: 资金账号的密码。
  • name: 策略名称
  • node: 托管者ID
    指定在哪个托管者上运行。如果不设置该属性,系统将自动分配运行。
  • period: 默认K线周期
    K线周期参数,60表示60秒。
  • strategy: 策略ID
    可以使用GetStrategyList方法获取。

备注

如果实盘是使用扩展API接口创建的,重启时必须使用扩展API接口RestartRobot进行重启,并且必须传入settings参数。在平台页面上创建的实盘,可以通过扩展API接口重启或者点击实盘页面上的按钮重启。可以传入settings参数或不传入。如果只传入robotId参数,则按照实盘的当前设置启动运行。

GetRobotDetail方法用于获取请求中API KEY对应的优宽量化交易平台账号下指定实盘的详细信息。所要查询的实盘通过robotId参数指定。

返回值

json
{ "code": 0, "data": { "result": { "robot": { "charge_time": 1732520672, "charged": 1184400, "consumed": 87500000, "date": "2021-10-29 16:14:56", "debug": "{\"Nano\":1732518261405924960,\"Stderr\":\"\",\"Stdout\":\"\"}", "end_time": "2024-11-25 15:04:21", "favorite": { "added": false, "type": "R" }, "fixed_id": 123, "hits": 0, "id": 123, "is_deleted": 0, "is_manager": true, "is_sandbox": 0, "name": "测试", "node_id": 123, "pexchanges": { "-100": "Futures_CTP" }, "phash": {}, "plabels": { "-100": "Futures_CTP" }, "priority": 0, "profit": 0, "public": 0, "refresh": 1732518244000, "robot_args": "[]", "start_time": "2024-11-25 15:03:38", "status": 4, "strategy_args": "...", "strategy_exchange_pairs": "[60,[-100],[\"FUTURES_CTP\"]]", "strategy_id": 123, "strategy_last_modified": "2024-10-10 18:09:05", "strategy_name": "测试", "strategy_public": "0", "summary": "...", "uid": "03dd49e1de9c29f7a02ae015c65ef136", "username": "...", "wd": 0 } }, "error": null } }
  • charge_time: 下次扣费时间,即当前扣费后的有效截止时间。
  • charged: 已消耗的时间。
  • consumed: 已消耗的金额(0.125 CNY = 12500000 / 1e8)。
  • date: 创建日期。
  • fixed_id: 实盘运行时分配的托管者ID,如果是自动分配,该值为-1。
  • is_manager: 是否拥有管理该实盘的权限。
  • is_sandbox: 是否为模拟盘。
  • name: 实盘名称。
  • node_id: 托管者ID。
  • pexchanges: 实盘配置的交易所对象,-100为pid,"Futures_CTP"为交易所类型。该实盘的交易所配置通过eid方式创建(通过meta字段配置),因此显示pid的内容为-100;通过eid方式创建的交易所对象pid依次递减,例如:{"-100":"Futures_CTP","-101":"Futures_CTP"}
  • plabels: 实盘配置的交易所对象的标签信息。
  • profit: 实盘收益数据。
  • public: 实盘是否公开。
  • refresh: 最近活跃时间。
  • strategy_exchange_pairs: 配置的交易所对象及设置的交易对信息。
  • wd: 是否开启离线报警。

参数

名称类型必填描述

robotId

number

robotId参数用于指定需要获取详细信息的实盘ID。可通过GetRobotList方法获取账号下所有实盘的信息列表,其中包含各实盘的ID。

备注

strategy_exchange_pairs属性说明,以下列数据为例:

plaintext
[86400,[123456],["FUTURES"]]

其中第一个元素86400表示实盘配置的默认K线周期为1天(86400秒)。

[123456]为实盘配置的交易所对象eid列表(按添加顺序排列)。
["FUTURES"]为实盘配置的交易所对象设置的交易对(按添加顺序与eid一一对应)。因此[86400,[123456],["FUTURES"]]的数据结构为:[K线周期,交易所对象ID列表,交易对列表]

GetAccount方法用于获取请求中API KEY对应的优宽量化交易平台账户信息。

返回值

json
{ "code":0, "data":{ "result":{ "balance":52437600, "concurrent":0, "consumed":200647562400, "currency":"CNY", "email":"...", "openai":false, "settings":null, "sns":{}, "uid":"...", "username":"..." }, "error":null } }
  • balance: 账户余额
    该数值采用整数表示以确保精度,实际金额需除以1e8(即10的8次方)进行换算。示例中的实际余额为:0.52437600

GetExchangeList方法用于获取优宽量化交易平台支持的交易所列表及其配置信息。

返回值

isSummary参数为false时,返回的数据:

json
{ "code": 0, "data": { "result": { "exchanges": [{ "category": "商品期货", "eid": "Futures_CTP", "id": 123, "logo": "/upload/asset/236192b0caaca5fadf948.svg", "meta": "...", "name": "CTP协议", "priority": 10, "profiles": "...", "stocks": "FUTURES", "website": "http://www.sfit.com.cn/" }] }, "error": null } }

isSummary参数为true时,返回的数据:

json
{ "code": 0, "data": { "result": { "exchanges": [{ "category": "商品期货", "eid": "Futures_CTP", "id": 123, "logo": "/upload/asset/236192b0caaca5fadf948.svg", "name": "CTP协议", "priority": 10, "website": "http://www.sfit.com.cn/" }] }, "error": null } }
  • meta: 交易所配置元数据。
  • profiles: 前置机配置信息。

参数

名称类型必填描述

isSummary

bool

isSummary参数用于指定是否返回概要信息。

DeleteNode方法用于删除请求中API KEY对应的优宽量化交易平台账号的托管者节点,删除的托管者节点ID为nid参数指定的托管者ID。

返回值

json
{ "code":0, "data":{ "result":true, "error":null } }
  • result: 是否成功删除关联的托管者程序。

参数

名称类型必填描述

nid

number

nid参数用于指定要删除的托管者ID,可通过GetNodeList方法获取账号下的托管者信息。

DeleteRobot方法用于删除请求中API KEY对应的优宽量化交易平台账户下的实盘。删除的实盘ID为robotId参数指定的实盘ID。

返回值

json
{ "code":0, "data":{ "result":0, "error":null } }
  • result: 实盘删除操作的反馈结果。
    • 0: 正常删除。
    • -2: 删除成功,但无法与实盘关联的托管器联系,请手动删除文件 123.db3!

参数

名称类型必填描述

robotId

number

robotId参数用于指定要删除的实盘ID。可以使用GetRobotList方法获取账户下实盘的信息,其中包含实盘ID。

deleteLogs

bool

deleteLogs参数用于设置是否删除实盘日志。如果传入真值(例如:true),则删除实盘日志。

GetStrategyList方法用于获取平台策略信息。

返回值

json
{ "code": 0, "data": { "result": { "all": 1784, "strategies": [{ "category": 1, "date": "2024-11-24 00:36:01", "description": "...", "forked": 0, "hits": 0, "id": 401124, "is_buy": false, "is_owner": false, "language": 2, "last_modified": "2024-11-24 00:36:01", "name": "C++商品期货高频交易策略Penny Jump|C++ CTP Penny Jump (Copy)", "profile": { "avatar": "...", "nickname": "eway", "uid": "cc381d795af0912b4fbe4a1bfe00583e" }, "public": 0, "tags": "", "uid": "cc381d795af0912b4fbe4a1bfe00583e", "username": "eway" }] }, "error": null } }
  • all: 符合筛选条件的策略总数。
  • strategies: 查询返回的策略详细信息。

参数

名称类型必填描述

offset

number

offset参数用于设置查询的偏移量。

length

number

length参数用于设置查询返回的数据条数。

strategyType

number

strategyType参数用于设置要查询的策略类型。

  • strategyType参数设置为0:查询所有策略。

  • strategyType参数设置为1:查询已公开的策略。

  • strategyType参数设置为2:查询待审核的策略。

category

number

category参数用于设置要查询的策略类别。

  • category参数设置为-1:查询所有策略。

  • category参数设置为0:查询通用策略。

needArgs

number

needArgs参数用于设置查询的策略是否需要参数。

  • needArgs参数设置为0:查询所有策略。

language

number

language参数用于设置要查询策略的编程语言。

  • language参数设置为0:JavaScript语言。

  • language参数设置为1:Python语言。

  • language参数设置为2:C++语言。

  • language参数设置为3:可视化策略。

  • language参数设置为4:My语言。

  • language参数设置为5:PINE语言。

kw

string

kw参数用于设置查询策略的关键字。

  • 设置为空字符串表示不使用关键字筛选。

NewRobot方法用于创建请求中API KEY对应的优宽量化交易平台账号下的实盘。

返回值

json
{ "code":0, "data":{ "result":473823, "error":null } }
  • result: 创建成功,返回实盘Id。

参数

名称类型必填描述

settings

JSON对象

实盘配置参数,settings参数格式如下:

json
{ "appid":"test", "args":[], "exchanges":[{"pair":"FUTURES","pid":123}], "name":"测试", "group":123, "node":123, "period":60, "strategy":123 }
  • group: 指定实盘分组。
  • args: 策略参数,如果策略没有参数则为空数组。
  • exchanges: 交易所对象配置,可参考RestartRobot接口。

备注

使用eid配置时,{"eid":"Futures_CTP","meta":{},"pair":"FUTURES_CTP"};配置的敏感信息优宽量化交易平台不会存储。这些数据将直接转发给托管者程序,因此每次创建或重启实盘时必须配置该信息。meta具体格式请参考:GetExchangeList接口返回数据中的meta字段内容。

以CTP协议为例,配置华安期货的信息,meta字段结构如下:

json
"meta":{ "AppID":"xxx", "AuthCode":"xxx", "BrokerId":"6020", "ClientVer":"BT_T_V001", "MDFront":"...", "Name":"华安期货(看穿式监管)", "Password":"xxx", "TDFront":"...", "Username":"xxx", "V2":true }

GetExchangeList接口返回数据中required为真的配置项,在配置meta时不可为空。required为假的配置项在配置meta时可为空。例如上例中的AuthCodeName

PluginRun方法用于调用优宽量化交易平台的调试工具功能;仅支持JavaScript语言。

返回值

json
{ "code":0, "data":{ "result":"{\"logs\":[{\"PlatformId\":\"\",\"OrderId\":\"0\",\"LogType\":6,\"Price\":0,\"Amount\":0,\"Extra\":\"\",\"Currency\":\"\",\"Instrument\":\"\",\"Direction\":\"\",\"Time\":1732525620326},{\"PlatformId\":\"\",\"OrderId\":\"0\",\"LogType\":5,\"Price\":0,\"Amount\":0,\"Extra\":\"Hello YouQuant\",\"Currency\":\"\",\"Instrument\":\"\",\"Direction\":\"\",\"Time\":1732525620330}],\"result\":\"\"}", "error":null } }
  • result: 调试工具成功执行传入的JavaScript代码后返回的测试结果数据。

参数

名称类型必填描述

settings

JSON对象

调试工具中的设置参数,settings配置中包含测试代码,位于source属性中。settings参数格式如下:

json
{ "exchanges":[{"pair":"FUTURES","pid":123}], "node":123, "period":60, "source":"function main() {Log(\"Hello YouQuant\")}" }
  • source: 需要调试的代码。
  • node: 托管者ID,可指定在哪个托管者上运行实盘。若该值为-1,则表示自动分配。
  • exchanges: 交易所对象配置,可参考RestartRobot接口。

备注

{"pid": 1234, "pair": "FUTURES"}
{"pid": 1223, "pair": "FUTURES"}

对于settings中的exchanges属性,调用PluginRun方法时只需设置一个(在调试工具页面使用时也仅支持一个交易所对象)。在settings中设置2个交易所对象不会引发报错,但在代码中访问第二个交易所对象时将会报错。

GetRobotLogs方法用于获取请求中API KEY对应的优宽量化交易平台账号下的实盘日志信息,所要获取的日志信息对应的实盘Id由robotId参数指定。

返回值

json
{ "code": 0, "data": { "result": { "chart": "", "chartTime": 0, "logs": [{ "Total": 8, "Max": 94, "Min": 87, "Arr": [] }, { "Total": 0, "Max": 0, "Min": 0, "Arr": [] }, { "Total": 0, "Max": 0, "Min": 0, "Arr": [] }], "node_id": 123, "online": true, "refresh": 1732520711000, "status": 4, "summary": "...", "updateTime": 1732520715044, "wd": 0 }, "error": null } }
  • logs: 日志信息;查询出的若干条日志数据存储在Arr字段中。
    logs中第一个数据结构为实盘数据库中策略日志表的日志记录。
    logs中第二个数据结构为实盘数据库中收益日志表的日志记录。
    logs中第三个数据结构为实盘数据库中图表日志表的日志记录。
  • summary: 实盘状态栏数据。

参数

名称类型必填描述

robotId

number

robotId参数用于指定要获取日志信息的实盘Id,可通过GetRobotList方法获取账号下的实盘信息,其中包含实盘Id。

logMinId

number

logMinId参数用于指定日志记录的最小Id。

logMaxId

number

logMaxId参数用于指定日志记录的最大Id。

logOffset

number

logOffset参数用于设置偏移量,在由logMinIdlogMaxId确定的范围内,根据logOffset跳过指定数量的记录,从而确定数据获取的起始位置。

logLimit

number

logLimit参数用于设置从起始位置开始获取的数据记录条数。

profitMinId

number

profitMinId参数用于设置收益日志的最小Id。

profitMaxId

number

profitMaxId参数用于设置收益日志的最大Id。

profitOffset

number

profitOffset参数用于设置偏移量,跳过指定数量的记录作为起始位置。

profitLimit

number

profitLimit参数用于设置从起始位置开始获取的数据记录条数。

chartMinId

number

chartMinId参数用于设置图表数据记录的最小Id。

chartMaxId

number

chartMaxId参数用于设置图表数据记录的最大Id。

chartOffset

number

chartOffset参数用于设置偏移量。

chartLimit

number

chartLimit参数用于设置获取的记录条数。

chartUpdateBaseId

number

chartUpdateBaseId参数用于设置查询更新记录的基准Id。

chartUpdateDate

number

chartUpdateDate参数用于设置数据记录的更新时间戳,将筛选出大于此时间戳的记录。

summaryLimit

number

summaryLimit参数用于设置查询状态栏数据的字节数。该参数为整型,设置为0表示不查询状态栏信息,设置为非0值表示需要查询的状态栏信息字节数(此接口不限制数据量,可指定较大的summaryLimit参数以获取所有状态栏信息),状态栏数据存储在返回数据的summary字段中。

备注

  • 数据库中的策略日志表
    返回数据中logs的属性值(数组结构)的第一个元素中(日志数据)Arr属性值描述如下:

    plaintext
    'Arr': [ [12, 5, '', '', 0, 0, '[]', 1635495362912, '', ''], [11, 3, 'Futures_Futu', '', 0, 0, 'Buy(1826.08, 1000): TrdMarket_CN: 缺少必要的参数: secMarket', 1635495362904, '', ''] ]
    idlogTypeeidorderIdpriceamountextradatecontractTypedirection
    125''''00'[]'1635495362912''''
    113'Futures_Futu'''00'Buy(1826.08, 1000): TrdMarket_CN: 缺少必要的参数: secMarket'1635495362904''''

    extra为打印日志的附加信息。

    logType值对应的日志类型描述如下:

    logType:0123456
    logType意义:BUYSALERETRACTERRORPROFITMESSAGERESTART
    中文意义买入订单日志卖出订单日志撤单错误收益日志重启
  • 数据库中的收益图表日志表
    该图表日志表数据与策略日志表中的收益日志保持一致。

    plaintext
    "Arr": [ [202, 2515.44, 1575896700315], [201, 1415.44, 1575896341568] ]

    以其中一条日志数据为例:

    plaintext
    [202, 2515.44, 1575896700315]

    202为日志ID,2515.44为收益数值,1575896700315为时间戳。

  • 数据库中的图表日志表

    plaintext
    "Arr": [ [23637, 0, "{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"], [23636, 5, "{\"x\":1575960300000,\"y\":3.0735}"] ]

    以其中一条日志数据为例:

    plaintext
    [23637, 0, "{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"],

    23637为日志ID,0为图表数据系列索引,最后的数据"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"为日志数据,该条数据为图表上的K线数据。