资源加载中... loading...

扩展API接口

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

创建ApiKey

优宽量化交易平台支持扩展API接口的权限管理,可以设置API KEY的权限。 在平台账号设置页面的「API接口」选项,点击「创建新的ApiKey」按钮创建扩展API KEY。 可以在创建API KEY时编辑「API权限」输入框,输入*符号开启所有扩展API接口权限。 如果要指定具体接口权限,需要输入对应的扩展API函数名。使用逗号间隔,例如:GetRobotDetail,DeleteRobot。 即给予了这个API KEY调用获取实盘详细信息接口、删除实盘接口的权限。

API KEY管理页面也可以对已经创建的API KEY进行修改禁用删除操作。

扩展API接口返回码

扩展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验证和直接验证。

token验证

使用md5加密方式验证,PythonGolang语言调用例子:

#!/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为:xxxSecretKey为:yyy, 访问以下链接即可向实盘Id为186515的实盘发送交互指令消息,消息内容为字符串:"ok12345"

https://www.youquant.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,"ok12345"]

支持直接验证方式下,获取请求中的Body数据,仅支持CommandRobot接口。例如在Trading ViewWebHook 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格式:

    https://www.youquant.comimg

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

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

  • 文本格式:

    https://www.youquant.comimg

    XXXUSDTPERP 穿过(Crossing) 39700.00 close: {{close}}
    

    Id186515的实盘即可收到交互命令:XXXUSDTPERP 穿过(Crossing) 39700.00 close: 39739.4

PythonGolang语言调用例子:

#!/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接口详解

  • 优宽量化交易平台扩展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

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
    }
}

返回值字段说明(字面意思较明显的不再赘述):

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

无参数

GetRobotGroupList

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

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

无参数

GetPlatformList

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
    }
}
  • all: 已添加/配置的交易所对象个数。
  • platforms: 交易所相关信息。
    • eid: 在优宽量化交易平台上交易所的Id,一些配置、参数中会使用到eid
    • profiles: 前置机配置信息。

无参数

GetRobotList

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
    }
}
  • robots: 实盘信息
    • group_id: 实盘分组Id;如果策略实盘在默认分组中则没有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

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

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

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

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

{
    "code":0,
    "data":{
        "result":4,
        "error":null
    }
}
  • result: 实盘状态码,4即被停止。

robotId参数用于指定所要停止的实盘Id,可以用GetRobotList方法获取账号下实盘的信息,其中包含实盘Id。

robotId true number

RestartRobot

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

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

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

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

{
    "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字段结构如下:
      "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时可为空。例如上例中的AuthCodeName。 Username: 资金账号。 Password: 资金账号的密码。
  • name: 策略名称
  • node: 托管者ID 指定在哪个托管者上运行,不写该属性就是自动分配运行。
  • period: 默认K线周期 K线周期参数,60即为60秒。
  • strategy: 策略ID 可以用GetStrategyList方法获取到。

settings false JSON对象

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

GetRobotDetail

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
    }
}
  • 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参数用于指定所要获取详细信息的实盘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

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
    }
}
  • balance: 账户余额 此处的数值是由于精度控制,使用的是整数表示,换算成实际数值需要除以1e8(即:10的8次方),实际此处得出:229.44702436

GetExchangeList

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
    }
}
  • meta: 交易所配置元数据。
  • profiles: 前置机配置信息。

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

isSummary true bool

DeleteNode

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

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

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

nid true number

DeleteRobot

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

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

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

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

deleteLogs true bool

GetStrategyList

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
    }
}
  • all: 筛选查询出的策略总数。
  • strategies: 查询出的具体策略信息。

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

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

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

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

{
    "appid":"test",
    "args":[],
    "exchanges":[{"pair":"FUTURES","pid":123}],
    "name":"测试",
    "group":123,
    "node":123,
    "period":60,
    "strategy":123
}
  • group: 指定实盘分组。
  • args: 策略参数,如果策略没有参数即为空数组。
  • exchanges: 交易所对象配置,可以参考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时可为空。例如上例中的AuthCodeName

PluginRun

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
    }
}
  • result: 调试工具成功执行传入的JavaScript代码后,返回的测试结果数据。

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

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

settings true JSON对象

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

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

GetRobotLogs

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
    }
}
  • logs: 日志信息;查询出的若干条日志数据在Arr字段中。 logs中第一个数据结构为实盘数据库中策略日志表中的日志记录。 logs中第二个数据结构为实盘数据库中收益日志表中的日志记录。 logs中第三个数据结构为实盘数据库中图表日志表中的日志记录。
  • summary: 实盘状态栏数据。

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

robotId true number logMinId参数用于指定Log日志的最小Id。

logMinId true number logMaxId参数用于指定Log日志的最大Id。

logMaxId true number logOffset参数用于设置偏移,由logMinIdlogMaxId确定范围后,根据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线数据。

内置库 交易终端