简介
OKEX go 版本的 v5sdk,仅供学习交流使用。
(文档持续完善中)
项目说明
install
go get github.com/movooc/v5sdk_go
REST 调用
// 设置您的APIKey
apikey := APIKeyInfo{
ApiKey: "xxxx",
SecKey: "xxxx",
PassPhrase: "xxxx",
}
// 第三个参数代表是否为模拟环境,更多信息查看接口说明
cli := NewRESTClient("https://www.okex.win", &apikey, true)
rsp, err := cli.Get(context.Background(), "/api/v5/account/balance", nil)
if err != nil {
return
}
fmt.Println("Response:")
fmt.Println("\thttp code: ", rsp.Code)
fmt.Println("\t总耗时: ", rsp.TotalUsedTime)
fmt.Println("\t请求耗时: ", rsp.ReqUsedTime)
fmt.Println("\t返回消息: ", rsp.Body)
fmt.Println("\terrCode: ", rsp.V5Response.Code)
fmt.Println("\terrMsg: ", rsp.V5Response.Msg)
fmt.Println("\tdata: ", rsp.V5Response.Data)
更多示例请查看 rest/rest_test.go
websocket 订阅
私有频道
ep := "wss://ws.okex.com:8443/ws/v5/private?brokerId=9999"
// 填写您自己的APIKey信息
apikey := "xxxx"
secretKey := "xxxxx"
passphrase := "xxxxx"
// 创建ws客户端
r, err := NewWsClient(ep)
if err != nil {
log.Println(err)
return
}
// 设置连接超时
r.SetDailTimeout(time.Second * 2)
err = r.Start()
if err != nil {
log.Println(err)
return
}
defer r.Stop()
var res bool
// 私有频道需要登录
res, _, err = r.Login(apikey, secretKey, passphrase)
if res {
fmt.Println("登录成功!")
} else {
fmt.Println("登录失败!", err)
return
}
var args []map[string]string
arg := make(map[string]string)
arg["ccy"] = "BTC"
args = append(args, arg)
start := time.Now()
// 订阅账户频道
res, _, err = r.PrivAccout(OP_SUBSCRIBE, args)
if res {
usedTime := time.Since(start)
fmt.Println("订阅成功!耗时:", usedTime.String())
} else {
fmt.Println("订阅失败!", err)
}
time.Sleep(100 * time.Second)
start = time.Now()
// 取消订阅账户频道
res, _, err = r.PrivAccout(OP_UNSUBSCRIBE, args)
if res {
usedTime := time.Since(start)
fmt.Println("取消订阅成功!", usedTime.String())
} else {
fmt.Println("取消订阅失败!", err)
}
更多示例请查看 ws/ws_priv_channel_test.go
公有频道
ep := "wss://ws.okex.com:8443/ws/v5/public?brokerId=9999"
// 创建ws客户端
r, err := NewWsClient(ep)
if err != nil {
log.Println(err)
return
}
// 设置连接超时
r.SetDailTimeout(time.Second * 2)
err = r.Start()
if err != nil {
log.Println(err)
return
}
defer r.Stop()
var args []map[string]string
arg := make(map[string]string)
arg["instType"] = FUTURES
//arg["instType"] = OPTION
args = append(args, arg)
start := time.Now()
// 订阅产品频道
res, _, err := r.PubInstruemnts(OP_SUBSCRIBE, args)
if res {
usedTime := time.Since(start)
fmt.Println("订阅成功!", usedTime.String())
} else {
fmt.Println("订阅失败!", err)
}
time.Sleep(30 * time.Second)
start = time.Now()
// 取消订阅产品频道
res, _, err = r.PubInstruemnts(OP_UNSUBSCRIBE, args)
if res {
usedTime := time.Since(start)
fmt.Println("取消订阅成功!", usedTime.String())
} else {
fmt.Println("取消订阅失败!", err)
}
更多示例请查看 ws/ws_pub_channel_test.go
websocket 交易
ep := "wss://ws.okex.com:8443/ws/v5/private?brokerId=9999"
// 填写您自己的APIKey信息
apikey := "xxxx"
secretKey := "xxxxx"
passphrase := "xxxxx"
var res bool
var req_id string
// 创建ws客户端
r, err := NewWsClient(ep)
if err != nil {
log.Println(err)
return
}
// 设置连接超时
r.SetDailTimeout(time.Second * 2)
err = r.Start()
if err != nil {
log.Println(err)
return
}
defer r.Stop()
res, _, err = r.Login(apikey, secretKey, passphrase)
if res {
fmt.Println("登录成功!")
} else {
fmt.Println("登录失败!", err)
return
}
start := time.Now()
param := map[string]interface{}{}
param["instId"] = "BTC-USDT"
param["tdMode"] = "cash"
param["side"] = "buy"
param["ordType"] = "market"
param["sz"] = "200"
req_id = "00001"
// 单个下单
res, _, err = r.PlaceOrder(req_id, param)
if res {
usedTime := time.Since(start)
fmt.Println("下单成功!", usedTime.String())
} else {
usedTime := time.Since(start)
fmt.Println("下单失败!", usedTime.String(), err)
}
更多示例请查看 ws/ws_jrpc_test.go
wesocket 推送
websocket 推送数据分为两种类型数据:普通推送数据
和深度类型数据
。
ws/wImpl/BookData.go
// 普通推送
type MsgData struct {
Arg map[string]string `json:"arg"`
Data []interface{} `json:"data"`
}
// 深度数据
type DepthData struct {
Arg map[string]string `json:"arg"`
Action string `json:"action"`
Data []DepthDetail `json:"data"`
}
如果需要对推送数据做处理用户可以自定义回调函数:
- 全局消息处理的回调函数
该回调函数会处理所有从服务端接受到的数据。
/*
添加全局消息处理的回调函数
*/
func (a *WsClient) AddMessageHook(fn ReceivedDataCallback) error {
a.onMessageHook = fn
return nil
}
使用方法参见 ws/ws_test.go 中测试用例 TestAddMessageHook。
- 订阅消息处理回调函数
可以处理所有非深度类型的数据,包括 订阅/取消订阅,普通推送数据。
/*
添加订阅消息处理的回调函数
*/
func (a *WsClient) AddBookMsgHook(fn ReceivedMsgDataCallback) error {
a.onBookMsgHook = fn
return nil
}
使用方法参见 ws/ws_test.go 中测试用例 TestAddBookedDataHook。
- 深度消息处理的回调函数
这里需要说明的是,Wsclient 提供了深度数据管理和自动 checksum 的功能,用户如果需要关闭此功能,只需要调用 EnableAutoDepthMgr 方法。
/*
添加深度消息处理的回调函数
*/
func (a *WsClient) AddDepthHook(fn ReceivedDepthDataCallback) error {
a.onDepthHook = fn
return nil
}
使用方法参见 ws/ws_pub_channel_test.go 中测试用例 TestOrderBooks。
- 错误消息类型回调函数
func (a *WsClient) AddErrMsgHook(fn ReceivedDataCallback) error {
a.OnErrorHook = fn
return nil
}
联系方式
邮箱:caron_co@163.com
微信:caron_co