Skip to content

go-numb/go-bitflyer

Repository files navigation

go-bitflyer

License: MIT GoDoc

Bitflyer exchange API version1, renew at 2023/02. Updated for change FX to CFD at 2024/04/01.

Description

go-bitflyer is a go client library for Bitflyer lightning API.

Supported

  • All Public API
  • All Private API
  • GUI's Hidden API
  • Websocket

Usage

Client Functions
Public Status(&Request{}) (res, apiLimit, err)
Public Helth(&Request{}) (res, apiLimit, err)
Public Ticker(&Request{}) (res, apiLimit, err)
Public Market(&Request{}) (res, apiLimit, err)
Public Board(&Request{}) (res, apiLimit, err)
Public Executions(&Request{}) (res, apiLimit, err)
Public Fr(&Request{}) (res, apiLimit, err)
Public Chat(&Request{}) (res, apiLimit, err)
Public LeverageC(&Request{}) (res, apiLimit, err)
Private Permissions(&Request{}) (res, apiLimit, err)
Private Balance(&Request{}) (res, apiLimit, err)
Private Collateral(&Request{}) (res, apiLimit, err)
Private CollateralAccounts(&Request{}) (res, apiLimit, err)
Private Addresses(&Request{}) (res, apiLimit, err)
Private Coinins(&Request{}) (res, apiLimit, err)
Private Coinouts(&Request{}) (res, apiLimit, err)
Private Banks(&Request{}) (res, apiLimit, err)
Private Deposits(&Request{}) (res, apiLimit, err)
Private Withdrawals(&Request{}) (res, apiLimit, err)
Private ChildOrder(&Request{}) (res, apiLimit, err)
Private CancelChildOrder(&Request{}) (res, apiLimit, err)
Private ParentOrder(&Request{}) (res, apiLimit, err)
Private CancelParentOrder(&Request{}) (res, apiLimit, err)
Private Cancel(&Request{}) (res, apiLimit, err)
Private ChildOrders(&Request{}) (res, apiLimit, err)
Private DetailParentOrder(&Request{}) (res, apiLimit, err)
Private MyExecutions(&Request{}) (res, apiLimit, err)
Private BalanceHistory(&Request{}) (res, apiLimit, err)
Private Positions(&Request{}) (res, apiLimit, err)
Private CollateralHistory(&Request{}) (res, apiLimit, err)
Private Commission(&Request{}) (res, apiLimit, err)
Hidden OHLCv(&Request{}) (res, err)
Hidden Ranking(&Request{}) (res, err)
Realtime Connect(&auth, []string{"channels"...}, []string{"product_codes..."...}, chan Response) error
package main

func main() {
    client := bitflyer.New(
		os.Getenv("BF_KEY"),
		os.Getenv("BF_SECRET"))

    results, managedApiLimit, err := client.Executions(&public.Executions{
        ProductCode: "BTC_JPY",
    })
    if err != nil {
        log.Fatal(err)
    }

    for _, v := range *results {
        fmt.Println(v)
        // -> {2430391013 BUY 2.989057e+06 0.02 2025-01-01T08:47:20.577 JRF20250101-084720-050159 JRF20250101-084720-042209}...
    }
    fmt.Println(managedApiLimit.Remain)
    // API Limit remain and more
    // -> 489

	// For Ohlcv and Ranking
	hclient := hidden.New()
	ohlcv, err := hclient.OHLCv(&hidden.RequestOHLCv{
        Symbo;: "BTC_JPY",
		Period: "m",
    })
    if err != nil {
        log.Fatal(err)
    }

    for _, v := range ohlcv {
        fmt.Println(v)
        // -> O, H, L, C, V, Volume(1day), Y(null), Timestamp
		// 0: 3003659 3004234 3003143 3003503 3.131921 311.1 0 2023-02-01T21:01:00+09:00
    }
}
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/go-numb/go-bitflyer"
	"github.com/go-numb/go-bitflyer/public"
	"github.com/go-numb/go-bitflyer/realtime"
	"github.com/go-numb/go-bitflyer/types"
)

func main() {
	client := bitflyer.New(
		"xxxxxxxxxxxxxxxxxxx",
		"xxxxxxxxxxxxxxxxxxxxxxxx=")

    // cancel goroutine from this function
	ctx, cancel := context.WithCancel(context.Background())
	ws := realtime.New(ctx)
	defer ws.Close()

    // recive data and notification form websocket
	recived := make(chan realtime.Response, 3)
	// This Connect is sharping binary data, to each struct.
	// There's also a class that handles raw data. use realtime\raw.go
	go ws.Connect(
        // Connect to Private, if struct *Auth. 
		client.Auth, // or nil, when not subscribe to private channel

        // input channel and product code, create request paramater in function
		[]string{
			"executions",
			"ticker",
			"board",
		},
		[]string{
			types.BTCJPY,
		},
		recived)

	go Reciver(ctx, recived)

    sig := make(chan os.Signal)
    <-sig
	cancel()
	time.Sleep(time.Second)
	close(recived)

}

func Reciver(ctx context.Context, ch chan realtime.Response) {
	defer fmt.Println("func reciver was done")
L:
	for {
		select {
		case <-ctx.Done():
			break L
		case v := <-ch:
			switch v.Types {
			case realtime.TickerN:
				fmt.Print(v.ProductCode)
				fmt.Printf(" ticker comming, %.0f\n", v.Ticker.Ltp)
			case realtime.ExecutionsN:
				fmt.Print(v.ProductCode)
				fmt.Println(" executions comming, id: ", v.Executions[0].ID)
			case realtime.BoardSnapN:
				fmt.Print(v.ProductCode)
				fmt.Println(" board snapshot comming, ", v.Board.MidPrice)
			case realtime.BoardN:
				fmt.Print(v.ProductCode)
				fmt.Println(" board update comming, ", len(v.Board.Asks), len(v.Board.Bids))

			case realtime.ChildOrdersN:
				fmt.Println("child order comming, ", v.ChildOrders[0].ChildOrderID)
			case realtime.ParentOrdersN:
				fmt.Println("parent order comming, ", v.ParentOrders[0].ParentOrderID)

			default:
				// can be detected by the receiver as such this loop, so it tells the receiver to terminate.
				// you can check contains "scheduled maintenance" into error.
				fmt.Printf("error or undefind: %#v", v)
			}

		}
	}
}

Author

@_numbP

License

MIT

About

Crypto trade exchange API wrapper for Bitflyer with Go.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages