Git Product home page Git Product logo

bitvavo-go's Introduction

BITVAVO-GO

Go Report Card Go Reference

GO thread safe library (WebSockets / HTTP) for Bitvavo v2 API (see: https://docs.bitvavo.com)

Listen to all events occurring on the Bitvavo platform (tickers, tickers24h, candles, books, trades, orders, fills) using websockets. With the HTTP client you can do things like placing orders or withdraw assets from your account.

๐Ÿ“’ Features

  • WebSocket Listeners -- Read only
    • Book
    • Candles
    • Trades
    • Ticker
    • Ticker 24h
    • Orders/Fills
  • HTTP Client -- Read / Write
    • Market data endpoints
    • Account endpoints
    • Synchronization endpoints
    • Trading endpoints
    • Transfer endpoints

๐Ÿš€ Installation

go get github.com/larscom/bitvavo-go@latest

๐Ÿ’ก Usage

import "github.com/larscom/bitvavo-go/pkg/bitvavo"

๐Ÿ‘‚ WebSocket

For each event on the Bitvavo platform there is a listener available. A listener wraps a websocket connection, you can also implement your own wrapper arround the websocket. The listeners handle everything for you, like resubscribing and reauthenticating when the connection has been lost.

Public listeners

  • BookListener
  • CandlesListener
  • TickerListener
  • Ticker24hListener
  • TradesListener
package main

import "github.com/larscom/bitvavo-go/pkg/bitvavo"

func main() {
	// listen for candle (public) events
	listener := bitvavo.NewCandlesListener()
	defer listener.Close()

	chn, err := listener.Subscribe([]string{"ETH-EUR"}, []bitvavo.Interval{bitvavo.Interval1m})
	if err != nil {
		panic(err)
	}

	for event := range chn {
		if event.Error != nil {
			panic(event.Error)
		}
		log.Println(event.Value)
	}
}

Private listeners

  • OrderListener
  • FillListener
package main

import "github.com/larscom/bitvavo-go/pkg/bitvavo"

func main() {
	// listen for order (private) events
	listener := bitvavo.NewOrderListener("MY_API_KEY", "MY_API_SECRET")
	defer listener.Close()

	chn, err := listener.Subscribe([]string{"ETH-EUR"})
	if err != nil {
		panic(err)
	}

	for event := range chn {
		if event.Error != nil {
			panic(event.Error)
		}
		log.Println(event.Value)
	}
}

Create custom listener

It's possible to create your own wrapper arround the websocket and listen to multiple events at the same time.

package main

import "github.com/larscom/bitvavo-go/pkg/bitvavo"

func main() {
	onMessage := func(data bitvavo.WebSocketEventData, err error) {
			if err != nil {
				// oh no error!
			} else if data.Event == bitvavo.EventBook {
				// decode into Book
				var book bitvavo.Book
				data.Decode(&book)
			} else if data.Event == bitvavo.EventCandle {
				// decode into Candle
				var candle bitvavo.Candle
				data.Decode(&candle)
			}
			// etc
		}

		onReconnect := func() {
			// gets called when successfully reconnected
		}

		ws, err := bitvavo.NewWebSocket(context.Background(), onMessage, onReconnect)
		// do stuff with ws
}

๐ŸŒ HTTP

The HTTP client implements 2 interfaces (PrivateAPI and PublicAPI)

If you need both private and public endpoints you can create a private http client as it includes both public and private endpoints.

Private and Public endpoints

package main

import "github.com/larscom/bitvavo-go/pkg/bitvavo"

func main() {
	// private http client (includes public as well)
	client := bitvavo.NewPrivateHTTPClient("MY_API_KEY", "MY_API_SECRET")

	orders, err := client.GetOrders(context.Background(), "ETH-EUR")
	if err != nil {
		log.Fatal(err)
	}
	log.Println("Orders", orders)
}

Public endpoints only

package main

import "github.com/larscom/bitvavo-go/pkg/bitvavo"

func main() {
	// public http client
	client := bitvavo.NewPublicHTTPClient()

	markets, err := client.GetMarkets(context.Background())
	if err != nil {
		log.Fatal(err)
	}
	log.Println("Markets", markets)
}

Endpoints with params

Some endpoints have additional params which you can provide.

package main

import "github.com/larscom/bitvavo-go/pkg/bitvavo"

func main() {
	client := bitvavo.NewPublicHTTPClient()

	// limit to 100 trades
	params := &bitvavo.TradeParams{
		Limit: 100,
	}
	trades, err := client.GetTrades(context.Background(), "ETH-EUR", params)
}

๐Ÿ‘‰๐Ÿผ Run example

There is an example that uses the ticker listener for ticker events and HTTP client to retrieve the trading markets.

You can run this example by cloning this project and running:

make run or without make: go run ./example/main.go

This command will subscribe to all available trading markets and log the received tickers.

Private

If you want to test private endpoints and listeners you can place a .env file in the root of the project.

.env file

API_KEY=MY_API_KEY
API_SECRET=MY_API_SECRET

bitvavo-go's People

Contributors

larscom avatar renovate[bot] avatar

Stargazers

 avatar

Watchers

Lucian avatar  avatar  avatar

bitvavo-go's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

github-actions
.github/workflows/workflow.yml
  • actions/checkout v4
  • actions/setup-go v5
gomod
go.mod
  • go 1.22.4
  • github.com/goccy/go-json v0.10.3
  • github.com/joho/godotenv v1.5.1
  • github.com/orsinium-labs/enum v1.4.0
  • nhooyr.io/websocket v1.8.11

  • Check this box to trigger a request for Renovate to run again on this repository

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.