优宽量化开放了平台的扩展API接口,支持程序化调用优宽量化交易平台的各项功能。
优宽量化交易平台支持扩展API接口的权限管理,可以设置API KEY
的权限。
在平台账号设置页面的「API接口」选项,点击「创建新的ApiKey」按钮创建扩展API KEY
。
可以在创建API KEY
时编辑「API权限」输入框,输入*
符号开启所有扩展API接口权限。
如果要指定具体接口权限,需要输入对应的扩展API函数名。使用逗号间隔,例如:GetRobotDetail,DeleteRobot
。
即给予了这个API KEY
调用获取实盘详细信息接口、删除实盘接口的权限。
在API KEY
管理页面也可以对已经创建的API KEY
进行修改、禁用、删除操作。
扩展API接口返回的结构举例如下:
{
"code":0,
"data":{
// 省略 ...
}
}
code
字段为:扩展API接口返回码。
描述 | 代码 |
---|---|
执行成功 | 0 |
错误的API KEY | 1 |
错误的签名 | 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
加密方式验证,Python
、Golang
语言调用例子:
#!/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))
package main
import (
"fmt"
"time"
"encoding/json"
"crypto/md5"
"encoding/hex"
"net/http"
"io/ioutil"
"strconv"
"net/url"
)
// 填写自己的优宽量化交易平台账号的api key
var apiKey string = ""
// 填写自己的优宽量化交易平台账号的secret key
var secretKey string = ""
var baseApi string = "https://www.youquant.com/api/v1"
func api(method string, args ... interface{}) (ret interface{}) {
// 处理args
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
为:xxx
,SecretKey
为:yyy
,
访问以下链接即可向实盘Id为186515
的实盘发送交互指令消息,消息内容为字符串:"ok12345"
。
https://www.youquant.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,"ok12345"]
支持直接验证方式下,获取请求中的Body
数据,仅支持CommandRobot
接口。例如在Trading View
的WebHook URL
中设置:
https://www.youquant.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,+""]
注意需要按照此格式设置:args=[186515,+""]
,186515
是优宽量化交易平台的实盘Id。
Trading View
消息框中设置(要发送的请求中的Body数据):
JSON格式:
{"close": {{close}}, "name": "aaa"}
Id
为186515
的实盘即可收到交互命令:{"close": 39773.75, "name": "aaa"}
。
文本格式:
XXXUSDTPERP 穿过(Crossing) 39700.00 close: {{close}}
Id
为186515
的实盘即可收到交互命令:XXXUSDTPERP 穿过(Crossing) 39700.00 close: 39739.4
。
Python
、Golang
语言调用例子:
#!/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))
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
语言描述请求参数:
{
'version' : '1.0',
'access_key': 'xxx', # AccessKey,在账户管理页面申请
'method' : 'GetNodeList', # 具体调用的方法
'args' : [], # 具体调用的method方法的参数列表
'nonce' : 1516292399361, # 时间戳,单位毫秒,允许和标准时间时间戳前后误差1小时,nonce必须比上一次访问时的nonce数值大
'sign' : '085b63456c93hfb243a757366600f9c2' # 签名
}
各个参数以字符&
分隔,参数名和参数值用符号=
连接,完整的请求URL(method=GetNodeList
为例):
https://www.youquant.com/api/v1?
access_key=xxx&
nonce=1516292399361&
args=%5B%5D&
sign=085b63456c93hfb243a757366600f9c2&
version=1.0&
method=GetNodeList
注意请求参数中没有secret_key
这个参数。
签名方式
请求参数中sign
参数加密方式如下,按照格式:
version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey
拼接字符串后,使用MD5
加密算法加密字符串,并转换为十六进制数据字符串,该值作为参数sign
的值。签名部分参考Python
代码,扩展API接口「验证方式」:
# 参数
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()
接口业务错误:
{
"code":0,
"data":{
"result":null,
"error":"Params length incorrect"
}
}
GetNodeList
方法用于获取请求中的API KEY
对应的优宽量化交易平台账号下的托管者列表。
{
"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
}
}
返回值字段说明(字面意思较明显的不再赘述):
ecs_
、unit_
前缀开头,记录了一键部署托管者服务器的相关信息(运营商名称、配置、状态等),计费周期、价格等信息,不再赘述。无参数
GetRobotGroupList
方法用于获取请求中的API KEY
对应的优宽量化交易平台账号下的实盘分组列表。
{
"code":0,
"data":{
"result":{
"items":[{
"id":2426,
"name":"C++实盘"
}]
},
"error":null
}
}
items
字段只记录创建的新分组,「默认」分组不在items
中。无参数
GetPlatformList
方法用于获取请求中的API KEY
对应的优宽量化交易平台账号下的已添加的交易所列表。
{
"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
}
}
eid
。无参数
GetRobotList
方法用于获取请求中的API KEY
对应的优宽量化交易平台账号下的实盘列表。
{
"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
}
}
group_id
字段。分页查询偏移设置。
offset
false
number
分页查询长度设置。
length
false
number
指定所要查询的实盘状态,参考扩展API接口「实盘状态码」,传-1
代表获取全部实盘。
robotStatus
false
number
指定所要查询的实盘自定义标签,可以筛选出这个标签的所有实盘。
label
false
string
查询关键字。
keyWord
false
string
以Python
语言的扩展API接口「验证方式」为例:
print(api('GetRobotList'))
:获取全部实盘信息。
print(api('GetRobotList', 'member2'))
:把自定义标签为member2的实盘信息全部打印出来。
print(api('GetRobotList', 0, 5, -1, 'member2'))
:分页从0到5列出来最多5个标签为member2的实盘。
CommandRobot
方法用于向请求中的API KEY
对应的优宽量化交易平台账号下的实盘发送交互命令,接收交互命令的实盘Id为robotId
参数指定的实盘Id,交互命令由策略中调用的GetCommand()
函数捕获返回。
{
"code":0,
"data":{
"result":false,
"error":null
}
}
robotId
参数用于指定接收交互指令的实盘Id,可以用GetRobotList
方法获取账号下实盘的信息,其中包含实盘Id。
robotId
true
number
cmd
参数是发送给实盘的交互指令,在实盘策略中的GetCommand()
函数会捕获到该交互命令,触发策略的交互逻辑。在策略代码中具体实现交互逻辑,可以参看优宽量化交易平台API手册中的GetCommand()
函数。
cmd true string
实盘策略,假设这个策略实盘处于运行中,实盘Id为123:
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
参数指定的实盘Id。
{
"code":0,
"data":{
"result":4,
"error":null
}
}
robotId
参数用于指定所要停止的实盘Id,可以用GetRobotList
方法获取账号下实盘的信息,其中包含实盘Id。
robotId true number
RestartRobot
方法用于重启请求中的API KEY
对应的优宽量化交易平台账号下的实盘,重启的实盘Id为robotId
参数指定的实盘Id。
{
"code":0,
"data":{
"result":1,
"error":null
}
}
robotId
参数用于指定所要重启的实盘Id,可以用GetRobotList
方法获取账号下实盘的信息,其中包含实盘Id。
robotId
true
number
实盘配置参数,settings
参数格式如下:
{
"appid":"test",
"args":[],
"exchanges":[
{"pair":"FUTURES","pid":123}
],
"name":"测试",
"node":123,
"period":60,
"strategy":123
}
Interval
,重启策略时希望Interval
设置为500,则args
中包含:["Interval", 500]
,即:"args": [["Interval", 500]]
。pid
配置:{"pair":"FUTURES","pid":123}
;pid
可以通过GetPlatformList
接口查询,返回的数据中id
字段即为交易所pid
。eid
配置:{"eid":"Futures_CTP","meta":{},"pair":"FUTURES_CTP"}
;传入的配置信息,优宽量化交易平台是不储存的。这些数据直接转发给托管者程序,所以每次创建或者重启实盘时必须配置该信息。meta
具体格式参看:GetExchangeList接口返回的数据中的meta
字段内容。
CTP协议为例,配置华安期货的信息,meta
字段结构如下:
"meta":{
"AppID":"xxx",
"AuthCode":"xxx",
"BrokerId":"6020",
"ClientVer":"BT_T_V001",
"MDFront":"...",
"Name":"华安期货(看穿式监管)",
"Password":"xxx",
"TDFront":"...",
"Username":"xxx",
"V2":true
}
GetExchangeList
接口返回的数据中required
为真的配置项,在配置mata
时不可为空。required
为假的配置项在配置mata
时可为空。例如上例中的AuthCode
、Name
。
Username: 资金账号。
Password: 资金账号的密码。GetStrategyList
方法获取到。settings false JSON对象
如果是使用扩展API接口创建出的实盘,重启必须使用扩展API接口RestartRobot
进行重启,并且必须传入settings
参数。在平台页面上创建的实盘,可以通过扩展API接口重启或者点击实盘页面上的按钮重启,可以传settings
参数或者不传settings
参数,只传robotId
这个参数,如果只传robotId
参数,则按照当前实盘的设置启动实盘运行。
GetRobotDetail
方法用于获取请求中的API KEY
对应的优宽量化交易平台账号下的实盘详细信息,所要被获取详细信息的实盘Id为robotId
参数指定的实盘Id。
{
"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
}
}
{"-100":"Futures_CTP","-101":"Futures_CTP"}
。robotId
参数用于指定所要获取详细信息的实盘Id,可以用GetRobotList
方法获取账号下实盘的信息,其中包含实盘Id。
robotId true number
strategy_exchange_pairs
属性说明,用以下数据为例:
[86400,[123456],["FUTURES"]]
其中第一个数据86400
,代表实盘设置的默认K线周期为1天,即86400秒。
[123456]
为实盘配置的交易所对象的eid
列表(按添加顺序)。
["FUTURES"]
为实盘配置的交易所对象设置的交易对(按添加顺序与eid
一一对应),[86400,[123456],["FUTURES"]]
对应[K线周期,交易所对象id列表,交易对列表]
。
GetAccount
方法用于获取请求中的API KEY
对应的优宽量化交易平台账号的账户信息。
{
"code":0,
"data":{
"result":{
"balance":52437600,
"concurrent":0,
"consumed":200647562400,
"currency":"CNY",
"email":"...",
"openai":false,
"settings":null,
"sns":{},
"uid":"...",
"username":"..."
},
"error":null
}
}
GetExchangeList
方法用于获取优宽量化交易平台支持的交易所列表以及需要的配置信息。
isSummary
参数为false
时,返回的数据:
{
"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
时,返回的数据:
{
"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
}
}
isSummary
参数用于指定返回的数据是否为概要信息。
isSummary true bool
DeleteNode
方法用于删除请求中的API KEY
对应的优宽量化交易平台账号的托管者节点,删除的托管者节点Id为nid
参数指定的托管者Id。
{
"code":0,
"data":{
"result":true,
"error":null
}
}
nid
参数用于指定所要删除的托管者Id,可以用GetNodeList
方法获取账号下托管者的信息。
nid true number
DeleteRobot
方法用于删除请求中的API KEY
对应的优宽量化交易平台账号下的实盘,删除的实盘Id为robotId
参数指定的实盘Id。
{
"code":0,
"data":{
"result":0,
"error":null
}
}
robotId
参数用于指定所要删除的实盘Id,可以用GetRobotList
方法获取账号下实盘的信息,其中包含实盘Id。
robotId
true
number
deleteLogs
参数用于设置是否要删除实盘日志,如果传入真值(例如:true
)即删除实盘日志。
deleteLogs true bool
GetStrategyList
方法用于获取平台策略信息。
{
"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
}
}
offset
参数用于设置查询时的偏移。
offset
true
number
length
参数用于设置查询时的长度。
length
true
number
strategyType
参数用于设置所要查询的策略类型。
strategyType
参数设置0
: 所有策略。strategyType
参数设置1
: 已公开策略。strategyType
参数设置2
: 待审核策略。strategyType
true
number
category
参数用于设置所要查询的策略种类。
category
参数设置-1
: 所有策略。category
参数设置0
: 通用策略。category
true
number
needArgs
参数用于设置所要查询的策略是否有参数。
needArgs
参数设置0
: 所有策略。needArgs
true
number
language
参数用于设置所要查询的策略的编程语言。
language
参数设置0
: JavaScript语言。language
参数设置1
: Python语言。language
参数设置2
: C++语言。language
参数设置3
: 可视化策略。language
参数设置4
: My语言。language
参数设置5
: PINE语言。language
true
number
kw
参数用于设置所要查询的策略的关键字。
kw true string
NewRobot
方法用于创建一个请求中的API KEY
对应的优宽量化交易平台账号下的实盘。
{
"code":0,
"data":{
"result":473823,
"error":null
}
}
实盘配置参数,settings
参数格式如下:
{
"appid":"test",
"args":[],
"exchanges":[{"pair":"FUTURES","pid":123}],
"name":"测试",
"group":123,
"node":123,
"period":60,
"strategy":123
}
RestartRobot
接口。settings true JSON对象
使用eid
配置时,{"eid":"Futures_CTP","meta":{},"pair":"FUTURES_CTP"}
;配置的敏感信息优宽量化交易平台是不储存的。这些数据直接转发给托管者程序,所以每次创建或者重启实盘时必须配置该信息。meta
具体格式参看:GetExchangeList
接口返回的数据中的meta
字段内容。
以CTP协议为例,配置华安期货的信息,meta
字段结构如下:
"meta":{
"AppID":"xxx",
"AuthCode":"xxx",
"BrokerId":"6020",
"ClientVer":"BT_T_V001",
"MDFront":"...",
"Name":"华安期货(看穿式监管)",
"Password":"xxx",
"TDFront":"...",
"Username":"xxx",
"V2":true
}
GetExchangeList
接口返回的数据中required
为真的配置项,在配置mata
时不可为空。required
为假的配置项在配置mata
时可为空。例如上例中的AuthCode
、Name
。
PluginRun
方法用于调用优宽量化交易平台的调试工具功能;仅支持JavaScript语言。
{
"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 FMZ\",\"Currency\":\"\",\"Instrument\":\"\",\"Direction\":\"\",\"Time\":1732525620330}],\"result\":\"\"}",
"error":null
}
}
调试工具中的设置参数,settings
配置中包括了测试代码,在source
属性中。settings
参数格式如下:
{
"exchanges":[{"pair":"FUTURES","pid":123}],
"node":123,
"period":60,
"source":"function main() {Log(\"Hello FMZ\")}"
}
RestartRobot
接口。settings true JSON对象
{"pid": 1234, "pair": "FUTURES"}
{"pid": 1223, "pair": "FUTURES"}
对于settings
中的exchanges
属性来说,在调用PluginRun
方法时只用设置一个(在调试工具页面使用时也只支持一个交易所对象)。在settings
里设置2个交易所对象不会引起报错,但是在代码中如果访问第二个交易所对象就会报错。
GetRobotLogs
方法用于获取请求中的API KEY
对应的优宽量化交易平台账号下的实盘日志信息,所要被获取日志信息的实盘Id为robotId
参数指定的实盘Id。
{
"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
}
}
robotId
参数用于指定所要获取日志信息的实盘Id,可以用GetRobotList
方法获取账号下实盘的信息,其中包含实盘Id。
robotId
true
number
logMinId
参数用于指定Log日志的最小Id。
logMinId
true
number
logMaxId
参数用于指定Log日志的最大Id。
logMaxId
true
number
logOffset
参数用于设置偏移,由logMinId
和logMaxId
确定范围后,根据logOffset
偏移(跳过多少条记录),开始作为获取数据的起始位置。
logOffset
true
number
logLimit
参数用于设置确定起始位置后,选取的数据记录条数。
logLimit
true
number
profitMinId
参数用于设置收益日志的最小Id。
profitMinId
true
number
profitMaxId
参数用于设置收益日志的最大Id。
profitMaxId
true
number
profitOffset
参数用于设置偏移(跳过多少条记录),作为起始位置。
profitOffset
true
number
profitLimit
参数用于设置确定起始位置后,选取的数据记录条数。
profitLimit
true
number
chartMinId
参数用于设置图表数据记录的最小Id。
chartMinId
true
number
chartMaxId
参数用于设置图表数据记录的最大Id。
chartMaxId
true
number
chartOffset
参数用于设置偏移。
chartOffset
true
number
chartLimit
参数用于设置获取的记录条数。
chartLimit
true
number
chartUpdateBaseId
参数用于设置查询更新后的基础Id。
chartUpdateBaseId
true
number
chartUpdateDate
参数用于设置数据记录更新时间戳,会筛选出比这个时间戳大的记录。
chartUpdateDate
true
number
summaryLimit
参数用于设置查询的状态栏数据字节数。查询实盘的状态栏数据,该参数类型为整型。设置0表示不需要查询状态栏信息,设置为非0表示需要查询的状态栏信息字节数(该接口不限制数据量,可以指定一个较大的summaryLimit参数来获取所有状态栏信息),状态栏数据储存在返回的数据的summary
字段中。
summaryLimit true number
数据库中的策略日志表
返回数据中logs
的属性值(数组结构)的第一个元素中(日志数据)Arr
属性值描述如下:
'Arr': [
[12, 5, '', '', 0, 0, '[]', 1635495362912, '', ''],
[11, 3, 'Futures_Futu', '', 0, 0, 'Buy(1826.08, 1000): TrdMarket_CN: 缺少必要的参数: secMarket', 1635495362904, '', '']
]
id | logType | eid | orderId | price | amount | extra | date | contractType | direction |
---|---|---|---|---|---|---|---|---|---|
12 | 5 | '’ | '’ | 0 | 0 | ‘[]’ | 1635495362912 | '’ | '’ |
11 | 3 | ‘Futures_Futu’ | '’ | 0 | 0 | ‘Buy(1826.08, 1000): TrdMarket_CN: 缺少必要的参数: secMarket’ | 1635495362904 | '’ | '’ |
extra
为打印的日志的附加消息。
logType
值具体代表的日志类型描述如下:
logType: | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
logType意义: | BUY | SALE | RETRACT | ERROR | PROFIT | MESSAGE | RESTART |
中文意义 | 买单类型日志 | 卖单类型日志 | 撤销 | 错误 | 收益 | 日志 | 重启 |
数据库中的收益图表日志表 该图表日志表数据与策略日志表中的收益日志一致。
"Arr": [
[202, 2515.44, 1575896700315],
[201, 1415.44, 1575896341568]
]
以其中一条日志数据为例:
[202, 2515.44, 1575896700315]
202
为日志Id,2515.44
为收益数值,1575896700315
为时间戳。
数据库中的图表日志表
"Arr": [
[23637, 0, "{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"],
[23636, 5, "{\"x\":1575960300000,\"y\":3.0735}"]
]
以其中一条日志数据为例:
[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线数据。