输入/搜索内容
欢迎使用优宽量化交易平台
编程语言
支持的协议
密钥安全性
实盘
策略库
托管者
交易所
策略编辑器
回测系统
策略入口函数
策略框架与API函数
模板类库
策略参数
交互控件
商品期货
期权交易
股票证券
Rust策略编写说明
JavaScript策略编写说明
内置库
扩展API接口
创建ApiKey
扩展API接口返回码
实盘状态码
验证方式
token验证
直接验证
扩展API接口详解
MCP 服务
交易终端
数据探索
Alpha因子分析工具
调试工具
远程编辑
完整策略的导入与导出
多语言支持
实盘、策略分组
实盘展示
策略分享与出租
实盘消息推送
实盘报错、异常退出的常见原因
交易所特殊说明、兼容记录

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

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