GithubHelp home page GithubHelp logo

nntaoli-project / goex Goto Github PK

View Code? Open in Web Editor NEW
1.8K 97.0 613.0 2.1 MB

Cryptocurrency Exchange Rest API SDK For Golang Wrapper Support okx,huobi,binance

License: MIT License

Go 100.00%
huobi binance okx api-rest quant

goex's Introduction

Introduction

  • Unified and standardize the interfaces of various cryptocurrency trading platforms.

goex

Donate

  • [BTC] 1GoEXwVvXG7kNdQSFaUNF35A3izHojLGxP
  • [USDT-TRC20] TGoExC6xvzE4wSA9cYZnwcPaXEjibA5Vtc

Example

package main

import (
	goexv2 "github.com/nntaoli-project/goex/v2"
	"github.com/nntaoli-project/goex/v2/logger"
	"github.com/nntaoli-project/goex/v2/model"
	"github.com/nntaoli-project/goex/v2/options"
	"log"
)

func main() {
	logger.SetLevel(logger.DEBUG)                             //设置日志输出级别
	//goexv2.DefaultHttpCli.SetProxy("socks5://127.0.0.1:1080") //socks代理
	goexv2.DefaultHttpCli.SetTimeout(5)                       // 5 second

	_, _, err := goexv2.OKx.Spot.GetExchangeInfo() //建议调用
	if err != nil {
		panic(err)
	}
	btcUSDTCurrencyPair, err := goexv2.OKx.Spot.NewCurrencyPair(model.BTC, model.USDT)//建议这样构建CurrencyPair
	if err != nil {
		panic(err)
	}
		
	//共有api调用
	log.Println(goexv2.OKx.Spot.GetTicker(btcUSDTCurrencyPair))

	//私有API调用
	okxPrvApi := goexv2.OKx.Spot.NewPrvApi(
		options.WithApiKey(""), 
		options.WithApiSecretKey(""), 
		options.WithPassphrase(""))
	
	//创建订单
	order, _, err := okxPrvApi.CreateOrder(btcUSDTCurrencyPair, 0.01, 18000, model.Spot_Buy, model.OrderType_Limit)
	log.Println(err)
	log.Println(order)
}

Filled The OrderClientID

ord, resp, err := okxPrvApi.CreateOrder(btcUSDTCurrencyPair, 0.01, 23000,
		model.Spot_Buy, model.OrderType_Limit,
		model.OptionParameter{}.OrderClientID("goex123027892")) //client id: goex123027892

Thanks

JetBrains

goex's People

Contributors

aagz avatar aleksandrshepelev avatar beaquant avatar bigbigbigfish avatar burdenbear avatar dependabot[bot] avatar evzpav avatar f0cii avatar guotie avatar hxzqlh avatar kuri-su avatar locxiang avatar memclutter avatar mistyworm avatar nlat31 avatar nntaoli avatar oudingfan avatar testwill avatar theblueresearcher avatar viaweb3 avatar xiaojun207 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goex's Issues

okex future ws can not work?

you use okex ws:
wss://real.okex.com:10440/ws/v1
badly,it can not work.

now okex ws :
wss://real.okex.com:8443/ws/v3

can u fix it ,thanks.

http代理优化建议

spot proxy可以通过

&builder.HttpClientConfig{
		HttpTimeout:  3 * time.Second,
		Proxy:        proxy,
		MaxIdleConns: 10,
	}

去设定,但是spot_ws 代码中写死只能通过 环境变量去获取,

func NewSpotWs() *SpotWs {
	spotWs := &SpotWs{}
	logger.Debugf("proxy url: %s", os.Getenv("HTTPS_PROXY"))

	spotWs.wsBuilder = goex.NewWsBuilder().
		WsUrl("wss://stream.binance.com:9443/stream?streams=depth/miniTicker/ticker/trade").
		ProxyUrl(os.Getenv("HTTPS_PROXY")).
		ProtoHandleFunc(spotWs.handle).AutoReconnect()

	spotWs.reqId = 1

	return spotWs
}

这里硬编码可以优化一下,不然本地调试 spot和spot_ws需要创建两个实例,如果统一的代理方式,直接可以使用一个实例

builder.NewAPIBuilder2(&builder.HttpClientConfig{
		HttpTimeout:  3 * time.Second,
		Proxy:        proxy,
		MaxIdleConns: 10,
	}).APIKey(g.access).APISecretkey(g.secret).ApiPassphrase(g.passphrase)

库有错误

vendor\github.com\nntaoli-project\GoEx\builder\APIBuilder.go:151:23: cannot use huobi.NewHbdm(&goex.APIConfig literal) (type *huobi.Hbdm) as type goex.FutureRestAPI in return argument:
*huobi.Hbdm does not implement goex.FutureRestAPI (missing GetDeliveryTime method)

能不能加一下成交订单更多的信息

能不能加一下成交订单更多的信息
比如okex的账单,即包含了当前这个订单成交后,一个缀合哪些订单,手续费是多少等的信息
比如binance的成交订单里,能查到指定订单的成交信息,如手续费之类的

GoEx 如何使用?

# command-line-arguments
.\HuobiPro_test.go:34:13: undefined: NewHuoBiProSpot
.\HuobiPro_test.go:61:11: undefined: NewHuoBiProPoint
.\HuobiPro_test.go:63:24: undefined: HBPOINT
.\websocket_test.go:19:8: undefined: NewWsConn

这个项目改如何使用呢?是我的环境问题?

Currency And CurrencyPair 底层术语改进

  1. CurrencyA 改为 base
  2. CurrencyB 改为 quote

base asset 指一个交易对的交易对象,即写在靠前部分的资产名
quote asset 指一个交易对的定价资产,即写在靠后部分资产名

每个交易所的 API 都会进行限速,GoEx 是如何处理交易所限速的?

在 GoEx 的代码里面,我搜索了 rate , limitlimiter ,都没有找到相关的代码。所以,我暂且认为 GoEx 没有进行相关的处理工作。
个人觉得,交易所 API 有必要集成限速功能。理由如下:

  1. 超出限制后,交易所会返回错误码。以 binance 为例,达到限制返回 429,超过限制返回 418。不对相关错误码进行处理的 API 不是完整的 API。
  2. 交易所 API 模块可以设计成单例模式,进行全局管理。

Bitfinex adaptTimestamp are invalid

Hi,

It seems that Bitfinex date extraction does not return a valid timestamp (at least regarding the Ticker) :
1514294 is missing 10^3 seconds to be the valid date :

Bitfinex Ticker timestamp

Timestamp Corresponding date Expected date
1514294 18/1/1970 13:38:14 26/12/2017 14:13:20
1514294000 26/12/2017 14:13:20 26/12/2017 14:13:20

Best regards,

初始化 币安 报错

初始化

api := builder.DefaultAPIBuilder.BuildFuture(goex.BINANCE)
fmt.Println(api)

返回错误信息

/go/pkg/mod/github.com/nntaoli-project/[email protected]/bitmex/bitmex.go:164:3: cannot use leverRate (type int) as type float64 in field value
/go/pkg/mod/github.com/nntaoli-project/[email protected]/bitmex/bitmex.go:236:17: cannot use p.Leverage (type int) as type float64 in assignment

Panic on OKCoin GetTicker() with certain currency pairs

Super weird, not sure why. But this will throw an error:

  okcoinAPI := okcoin.New(http.DefaultClient, okcoinAccessKey, okcoinSecretKey)
  result, err := okcoinAPI.GetTicker(goex.BTC_USD)
  if err != nil {
    log.Fatal(err)
  }
fmt.Printf("Close: %v\n", result.Last)

panic: interface conversion: interface {} is nil, not map[string]interface {}

If I change the currency pair to BTC_CNY the error goes away.

ToFloat64这个方法是不是该这么写

func ToFloat64(v interface{}) float64 {
if v == nil {
return 0.0
}

switch v.(type) {
case float64:
	return v.(float64)
case string:
	vStr := v.(string)
	vF, err := strconv.ParseFloat(vStr, 64)
	if err == nil {
		return vF
	}else{
		panic("to float64 error.")
	}
default:
	panic("to float64 error.")
}

}

请问这.......

刚go get的,没做任务更改。

github.com/nntaoli-project/goex/kucoin

..\github.com\nntaoli-project\goex\kucoin\kucoin.go:105:37: cannot use params (type map[string]string) as type *kucoin.CreateOrderModel in argument to kc.service.CreateOrder
..\github.com\nntaoli-project\goex\kucoin\kucoin.go:135:37: cannot use params (type map[string]string) as type *kucoin.CreateOrderModel in argument to kc.service.CreateOrder
..\github.com\nntaoli-project\goex\kucoin\kucoin.go:165:37: cannot use params (type map[string]string) as type *kucoin.CreateOrderModel in argument to kc.service.CreateOrder
..\github.com\nntaoli-project\goex\kucoin\kucoin.go:195:37: cannot use params (type map[string]string) as type *kucoin.CreateOrderModel in argument to kc.service.CreateOrder
错误: 进程退出代码 2.

okex websocket

OKEX_Future_Ws的 GetDepthWithWs / GetTickerWithWs 返回是否应该为ws.Subscribe(),否则重连后无法重新订阅

订单结构,下单接口的修改以适应FAK,IOC等不同类型的订单

部分交易所支持了FAK, IOC,maker only等订单,比如okex
在下单中会额外有一个指定订单类型的字段,用fak等订单可以很大程度优化某些策略下单逻辑的执行速度,希望能考虑支持。
工程量确实比较大,需要的改动有:

type Order struct {
	Price      float64
	Amount     float64
	AvgPrice   float64
	DealAmount float64
	Fee        float64
	Cid        string //客户端自定义ID
	OrderID2   string
	OrderID    int //deprecated
	OrderTime  int
	Status     TradeStatus
	Currency   CurrencyPair
	Side       TradeSide

        OrderType int //新增的订单类型字段
}
PlaceFutureOrder2(currencyPair CurrencyPair, contractType, price, amount string, orderType, openType, matchPrice, leverRate int) (Order, error)

PlaceFutureOrder2和原来的接口区分开以向下兼容,
参数中加入订单类型字段OrderType int,
下单应该返回一个订单的状态,而不单单是订单ID,

能否作为一个大的版本迭代的计划,可以先支持几个主流交易所,然后一步步开始升级迭代,支持更多交易所,社区也可以贡献代码

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.