client-go

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 15, 2020 License: MIT

README

Xena Exchange official websocket and rest clients for go lang

For API documentation check out Help Center

Install

Add to project:

go get  github.com/xenaex/client-go
Market Data websocket example
package main

import (
	"log"
	"os"
	"os/signal"
	"time"

	"github.com/xenaex/client-go/xena"
	"github.com/xenaex/client-go/xena/xmsg"
)

func main() {
	md := xena.NewMarketData(xena.WithMarketDataURL())
	md.SetDisconnectHandler(xena.DefaultMarketDisconnectHandler)
	resp, err := md.Connect()
	if err != nil {
		log.Printf("error %s on md.Connect()", err)
	}
	log.Printf("logon message %s", resp)

	id, err := md.SubscribeOnCandles(xena.XBTUSD.String(), "1m", handler, xena.ThrottleCandles1s, xena.AggregateBook25)
	log.Println(id, err)

	interrupt := make(chan os.Signal, 1)
	signal.Notify(interrupt, os.Interrupt)
	<-interrupt
}

func handler(md xena.MarketDataClient, r *xmsg.MarketDataRequestReject, m *xmsg.MarketDataRefresh) {
	log.Println("GOT", r, m)
	time.Sleep(20 * time.Millisecond)
}
Trading websocket example

Register an account with Xena. Generate an API Key and assign relevant permissions.

package main

import (
	"log"
	"time"

	"github.com/xenaex/client-go/xena"
	"github.com/xenaex/client-go/xena/xmsg"
)

func main() {
	apiKey := "your api key"
	apiSecret := "your api secret"
	accountId := uint64(10000000) // your account.
	client := xena.NewTradingClient(apiKey, apiSecret, xena.WithTradingURL())
	client.SetDisconnectHandler(xena.DefaultTradingDisconnectHandler)

	connected := make(chan struct{})
	client.ListenLogon(func(t xena.TradingClient, m *xmsg.Logon) {
		if len(m.RejectText) == 0 {
			connected <- struct{}{}
		}
	})
	client.ListenExecutionReport(func(t xena.TradingClient, m *xmsg.ExecutionReport) {
		log.Println("GOT", m)
		time.Sleep(20 * time.Millisecond)
	})

	resp, err := client.ConnectAndLogon()
	if err != nil {
		log.Printf("logon err: %s\n", err)
		return
	} else {
		log.Printf("resp: %s\n", resp)
		if len(resp.RejectText) > 0 {
			return
		}
	}
	<-connected
	client.ListenLogon(nil)
	close(connected)

	err = client.MarketOrder(accountId, xena.ID(""), xena.XBTUSD.String(), xena.SideBuy, "1")
	if err != nil {
		log.Printf("err %s", err)
	}
	time.Sleep(15 * time.Second)
}
Trading rest example

Register an account with Xena. Generate an API Key and assign relevant permissions.

package main

import (
	"fmt"
	"math/rand"
	"os"
	"sort"
	"strconv"
	"strings"
	"time"

	"github.com/xenaex/client-go/xena"
	"github.com/xenaex/client-go/xena/xmsg"
)

func main() {
	apiKey := "your api key"
	apiSecret := "your api secret"
	accountId := uint64(10000000) // your account.

	client := xena.NewTradingREST(apiKey, apiSecret, xena.WithRestTradingHost)
	resp, err := client.SendMarketOrder(accountId, xena.ID(""), xena.XBTUSD.String(), xena.SideBuy, "1")
	if err != nil {
		fmt.Printf("error: %v\n", err)
	}
	fmt.Printf("resp: %s\n", resp)
}
Market data rest example

Register an account with Xena. Generate an API Key and assign relevant permissions.

package main

import (
	"fmt"

	"github.com/xenaex/client-go/xena"
)

func main() {
	client := xena.NewMarketDataREST(xena.WithRestMarketDataHost)
	resp, err := client.GetInstruments()
	if err != nil {
		fmt.Printf("error: %v\n", err)
	}
	fmt.Printf("resp: %s\n", resp)
}

For more examples check out "examples" folder.

Directories

Path Synopsis
examples
fixjson
Package json implements encoding and decoding of JSON as defined in RFC 7159.
Package json implements encoding and decoding of JSON as defined in RFC 7159.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL