Skip to content

Commit

Permalink
kucoin: add place order and list orders command
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Dec 11, 2021
1 parent c87eb8f commit 819b636
Show file tree
Hide file tree
Showing 3 changed files with 312 additions and 300 deletions.
131 changes: 131 additions & 0 deletions examples/kucoin/orders.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package main

import (
"context"

"github.com/c9s/bbgo/pkg/exchange/kucoin/kucoinapi"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)

// go run ./examples/kucoin orders
var ordersCmd = &cobra.Command{
Use: "orders",

// SilenceUsage is an option to silence usage when an error occurs.
SilenceUsage: true,

RunE: func(cmd *cobra.Command, args []string) error {
req := client.TradeService.NewListOrdersRequest()

symbol, err := cmd.Flags().GetString("symbol")
if err != nil {
return err
}

if len(symbol) == 0 {
return errors.New("--symbol option is required")
}

req.Symbol(symbol)


status, err := cmd.Flags().GetString("status")
if err != nil {
return err
}

if len(status) > 0 {
req.Status(status)
}

page, err := req.Do(context.Background())
if err != nil {
return err
}

logrus.Infof("page: %+v", page)
return nil
},
}

func init() {
ordersCmd.Flags().String("symbol", "", "symbol, BTC-USDT, LTC-USDT...etc")
ordersCmd.Flags().String("status", "", "status, active or done")
rootCmd.AddCommand(ordersCmd)

placeOrderCmd.Flags().String("symbol", "", "symbol")
placeOrderCmd.Flags().String("price", "", "price")
placeOrderCmd.Flags().String("size", "", "size")
placeOrderCmd.Flags().String("order-type", string(kucoinapi.OrderTypeLimit), "order type")
placeOrderCmd.Flags().String("side", "", "buy or sell")
ordersCmd.AddCommand(placeOrderCmd)
}

// usage:
// go run ./examples/kucoin orders place --symbol LTC-USDT --price 50 --size 1 --order-type limit --side buy
var placeOrderCmd = &cobra.Command{
Use: "place",

// SilenceUsage is an option to silence usage when an error occurs.
SilenceUsage: true,

RunE: func(cmd *cobra.Command, args []string) error {
req := client.TradeService.NewPlaceOrderRequest()

orderType, err := cmd.Flags().GetString("order-type")
if err != nil {
return err
}

req.OrderType(kucoinapi.OrderType(orderType))


side, err := cmd.Flags().GetString("side")
if err != nil {
return err
}
req.Side(kucoinapi.SideType(side))


symbol, err := cmd.Flags().GetString("symbol")
if err != nil {
return err
}

if len(symbol) == 0 {
return errors.New("--symbol is required")
}

req.Symbol(symbol)

switch kucoinapi.OrderType(orderType) {
case kucoinapi.OrderTypeLimit:
price, err := cmd.Flags().GetString("price")
if err != nil {
return err
}
req.Price(price)

case kucoinapi.OrderTypeMarket:

}


size, err := cmd.Flags().GetString("size")
if err != nil {
return err
}
req.Size(size)

response, err := req.Do(context.Background())
if err != nil {
return err
}

logrus.Infof("place order response: %+v", response)
return nil
},
}

22 changes: 13 additions & 9 deletions pkg/exchange/kucoin/kucoinapi/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,19 @@ import (
"github.com/c9s/bbgo/pkg/types"
"github.com/c9s/bbgo/pkg/util"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
)

const defaultHTTPTimeout = time.Second * 15
const RestBaseURL = "https://api.kucoin.com/api"
const SandboxRestBaseURL = "https://openapi-sandbox.kucoin.com/api"

type TradeType string

const (
TradeTypeSpot TradeType = "TRADE"
TradeTypeMargin TradeType = "MARGIN"
)

type SideType string

const (
Expand All @@ -50,8 +56,8 @@ const (
type OrderType string

const (
OrderTypeMarket OrderType = "market"
OrderTypeLimit OrderType = "limit"
OrderTypeMarket OrderType = "market"
OrderTypeLimit OrderType = "limit"
)

type InstrumentType string
Expand All @@ -78,9 +84,9 @@ type RestClient struct {
client *http.Client

Key, Secret, Passphrase string
KeyVersion string
KeyVersion string

AccountService *AccountService
AccountService *AccountService
MarketDataService *MarketDataService
TradeService *TradeService
}
Expand All @@ -92,14 +98,14 @@ func NewClient() *RestClient {
}

client := &RestClient{
BaseURL: u,
BaseURL: u,
KeyVersion: "2",
client: &http.Client{
Timeout: defaultHTTPTimeout,
},
}

client.AccountService = &AccountService{ client: client }
client.AccountService = &AccountService{client: client}
client.MarketDataService = &MarketDataService{client: client}
client.TradeService = &TradeService{client: client}
return client
Expand Down Expand Up @@ -210,8 +216,6 @@ func (c *RestClient) newAuthenticatedRequest(method, refURL string, params url.V
req.Header.Add("KC-API-TIMESTAMP", timestamp)
req.Header.Add("KC-API-PASSPHRASE", sign(c.Secret, c.Passphrase))
req.Header.Add("KC-API-KEY-VERSION", c.KeyVersion)

log.Infof("%+v", req.Header)
return req, nil
}

Expand Down
Loading

0 comments on commit 819b636

Please sign in to comment.