gemini

package
v0.0.0-...-a2c5123 Latest Latest
Warning

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

Go to latest
Published: Sep 26, 2018 License: MIT Imports: 15 Imported by: 0

README

GoCryptoTrader package Gemini

Build Status Software License GoDoc Coverage Status Go Report Card

This gemini package is part of the GoCryptoTrader codebase.

This is still in active development

You can track ideas, planned features and what's in progresss on this Trello board: https://trello.com/b/ZAhMhpOy/gocryptotrader.

Join our slack to discuss all things related to GoCryptoTrader! GoCryptoTrader Slack

Gemini Exchange

Current Features
  • REST Support
How to enable
  // Exchanges will be abstracted out in further updates and examples will be
  // supplied then
How to do REST public/private calls
  • If enabled via "configuration".json file the exchange will be added to the IBotExchange array in the go var bot Bot and you will only be able to use the wrapper interface functions for accessing exchange data. View routines.go for an example of integration usage with GoCryptoTrader. Rudimentary example below:

main.go

var g exchange.IBotExchange

for i := range bot.exchanges {
  if bot.exchanges[i].GetName() == "Gemini" {
    g = bot.exchanges[i]
  }
}

// Public calls - wrapper functions

// Fetches current ticker information
tick, err := g.GetTickerPrice()
if err != nil {
  // Handle error
}

// Fetches current orderbook information
ob, err := g.GetOrderbookEx()
if err != nil {
  // Handle error
}

// Private calls - wrapper functions - make sure your APIKEY and APISECRET are
// set and AuthenticatedAPISupport is set to true

// Fetches current account information
accountInfo, err := g.GetExchangeAccountInfo()
if err != nil {
  // Handle error
}
  • If enabled via individually importing package, rudimentary example below:
// Public calls

// Fetches current ticker information
ticker, err := g.GetTicker()
if err != nil {
  // Handle error
}

// Fetches current orderbook information
ob, err := g.GetOrderBook()
if err != nil {
  // Handle error
}

// Private calls - make sure your APIKEY and APISECRET are set and
// AuthenticatedAPISupport is set to true

// GetUserInfo returns account info
accountInfo, err := g.GetUserInfo(...)
if err != nil {
  // Handle error
}

// Submits an order and the exchange and returns its tradeID
tradeID, err := g.Trade(...)
if err != nil {
  // Handle error
}
Please click GoDocs chevron above to view current GoDoc information for this package

Contribution

Please feel free to submit any pull requests or suggest any desired features to be added.

When submitting a PR, please abide by our coding guidelines:

  • Code must adhere to the official Go formatting guidelines (i.e. uses gofmt).
  • Code must be documented adhering to the official Go commentary guidelines.
  • Code must adhere to our coding style.
  • Pull requests need to be based on and opened against the master branch.

Donations

If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to:

1F5zVDgNjorJ51oGebSvNCrSAHpwGkUdDB

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Session manager
	Session map[int]*Gemini
)

Functions

func AddSession

func AddSession(g *Gemini, sessionID int, apiKey, apiSecret, role string, needsHeartbeat, isSandbox bool) error

AddSession adds a new session to the gemini base

Types

type Auction

type Auction struct {
	LastAuctionEID               int64   `json:"last_auction_eid"`
	ClosedUntilMs                int64   `json:"closed_until_ms"`
	LastAuctionPrice             float64 `json:"last_auction_price,string"`
	LastAuctionQuantity          float64 `json:"last_auction_quantity,string"`
	LastHighestBidPrice          float64 `json:"last_highest_bid_price,string"`
	LastLowestAskPrice           float64 `json:"last_lowest_ask_price,string"`
	NextAuctionMS                int64   `json:"next_auction_ms"`
	NextUpdateMS                 int64   `json:"next_update_ms"`
	MostRecentIndicativePrice    float64 `json:"most_recent_indicative_price,string"`
	MostRecentIndicativeQuantity float64 `json:"most_recent_indicative_quantity,string"`
	MostRecentHighestBidPrice    float64 `json:"most_recent_highest_bid_price,string"`
	MostRecentLowestAskPrice     float64 `json:"most_recent_lowest_ask_price,string"`
}

Auction is generalized response type

type AuctionHistory

type AuctionHistory struct {
	AuctionID       int64   `json:"auction_id"`
	AuctionPrice    float64 `json:"auction_price,string"`
	AuctionQuantity float64 `json:"auction_quantity,string"`
	EID             int64   `json:"eid"`
	HighestBidPrice float64 `json:"highest_bid_price,string"`
	LowestAskPrice  float64 `json:"lowest_ask_price,string"`
	AuctionResult   string  `json:"auction_result"`
	Timestamp       int64   `json:"timestamp"`
	TimestampMS     int64   `json:"timestampms"`
	EventType       string  `json:"event_type"`
}

AuctionHistory holds auction history information

type Balance

type Balance struct {
	Currency  string  `json:"currency"`
	Amount    float64 `json:"amount,string"`
	Available float64 `json:"available,string"`
}

Balance is a simple balance type

type DepositAddress

type DepositAddress struct {
	Currency string `json:"currency"`
	Address  string `json:"address"`
	Label    string `json:"label"`
	Message  string `json:"message"`
}

DepositAddress holds assigned deposit address for a specific currency

type ErrorCapture

type ErrorCapture struct {
	Result  string `json:"result"`
	Reason  string `json:"reason"`
	Message string `json:"message"`
}

ErrorCapture is a generlized error response from the server

type Gemini

type Gemini struct {
	exchange.Base
	Role              string
	RequiresHeartBeat bool
}

Gemini is the overarching type across the Gemini package, create multiple instances with differing APIkeys for segregation of roles for authenticated requests & sessions by appending new sessions to the Session map using AddSession, if sandbox test is needed append a new session with with the same API keys and change the IsSandbox variable to true.

func (*Gemini) CancelAllExchangeOrders

func (g *Gemini) CancelAllExchangeOrders() error

CancelAllExchangeOrders cancels all orders associated with a currency pair

func (*Gemini) CancelExchangeOrder

func (g *Gemini) CancelExchangeOrder(orderID int64) error

CancelExchangeOrder cancels an order by its corresponding ID number

func (*Gemini) CancelOrder

func (g *Gemini) CancelOrder(OrderID int64) (Order, error)

CancelOrder will cancel an order. If the order is already canceled, the message will succeed but have no effect.

func (*Gemini) CancelOrders

func (g *Gemini) CancelOrders(CancelBySession bool) (OrderResult, error)

CancelOrders will cancel all outstanding orders created by all sessions owned by this account, including interactive orders placed through the UI. If sessions = true will only cancel the order that is called on this session asssociated with the APIKEY

func (*Gemini) GetAuction

func (g *Gemini) GetAuction(currencyPair string) (Auction, error)

GetAuction returns auction information

func (*Gemini) GetAuctionHistory

func (g *Gemini) GetAuctionHistory(currencyPair string, params url.Values) ([]AuctionHistory, error)

GetAuctionHistory returns the auction events, optionally including publications of indicative prices, since the specific timestamp.

currencyPair - example "btcusd" params -- [optional]

since - [timestamp] Only returns auction events after the specified

timestamp.

limit_auction_results - [integer] The maximum number of auction

events to return.

include_indicative - [bool] Whether to include publication of

indicative prices and quantities.

func (*Gemini) GetBalances

func (g *Gemini) GetBalances() ([]Balance, error)

GetBalances returns available balances in the supported currencies

func (*Gemini) GetDepositAddress

func (g *Gemini) GetDepositAddress(depositAddlabel, currency string) (DepositAddress, error)

GetDepositAddress returns a deposit address

func (*Gemini) GetExchangeAccountInfo

func (g *Gemini) GetExchangeAccountInfo() (exchange.AccountInfo, error)

GetExchangeAccountInfo Retrieves balances for all enabled currencies for the Gemini exchange

func (*Gemini) GetExchangeDepositAddress

func (g *Gemini) GetExchangeDepositAddress(cryptocurrency pair.CurrencyItem) (string, error)

GetExchangeDepositAddress returns a deposit address for a specified currency

func (*Gemini) GetExchangeFundTransferHistory

func (g *Gemini) GetExchangeFundTransferHistory() ([]exchange.FundHistory, error)

GetExchangeFundTransferHistory returns funding history, deposits and withdrawals

func (*Gemini) GetExchangeHistory

func (g *Gemini) GetExchangeHistory(p pair.CurrencyPair, assetType string) ([]exchange.TradeHistory, error)

GetExchangeHistory returns historic trade data since exchange opening.

func (*Gemini) GetExchangeOrderInfo

func (g *Gemini) GetExchangeOrderInfo(orderID int64) (exchange.OrderDetail, error)

GetExchangeOrderInfo returns information on a current open order

func (*Gemini) GetOrderStatus

func (g *Gemini) GetOrderStatus(orderID int64) (Order, error)

GetOrderStatus returns the status for an order

func (*Gemini) GetOrderbook

func (g *Gemini) GetOrderbook(currencyPair string, params url.Values) (Orderbook, error)

GetOrderbook returns the current order book, as two arrays, one of bids, and one of asks

params - limit_bids or limit_asks [OPTIONAL] default 50, 0 returns all Values Type is an integer ie "params.Set("limit_asks", 30)"

func (*Gemini) GetOrderbookEx

func (g *Gemini) GetOrderbookEx(p pair.CurrencyPair, assetType string) (orderbook.Base, error)

GetOrderbookEx returns orderbook base on the currency pair

func (*Gemini) GetOrders

func (g *Gemini) GetOrders() ([]Order, error)

GetOrders returns active orders in the market

func (*Gemini) GetSymbols

func (g *Gemini) GetSymbols() ([]string, error)

GetSymbols returns all available symbols for trading

func (*Gemini) GetTicker

func (g *Gemini) GetTicker(currencyPair string) (Ticker, error)

GetTicker returns information about recent trading activity for the symbol

func (*Gemini) GetTickerPrice

func (g *Gemini) GetTickerPrice(p pair.CurrencyPair, assetType string) (ticker.Price, error)

GetTickerPrice returns the ticker for a currency pair

func (*Gemini) GetTradeHistory

func (g *Gemini) GetTradeHistory(currencyPair string, timestamp int64) ([]TradeHistory, error)

GetTradeHistory returns an array of trades that have been on the exchange

currencyPair - example "btcusd" timestamp - [optional] Only return trades on or after this timestamp.

func (*Gemini) GetTradeVolume

func (g *Gemini) GetTradeVolume() ([][]TradeVolume, error)

GetTradeVolume returns a multi-arrayed volume response

func (*Gemini) GetTrades

func (g *Gemini) GetTrades(currencyPair string, params url.Values) ([]Trade, error)

GetTrades eturn the trades that have executed since the specified timestamp. Timestamps are either seconds or milliseconds since the epoch (1970-01-01).

currencyPair - example "btcusd" params -- since, timestamp [optional] limit_trades integer Optional. The maximum number of trades to return. include_breaks boolean Optional. Whether to display broken trades. False by default. Can be '1' or 'true' to activate

func (*Gemini) ModifyExchangeOrder

func (g *Gemini) ModifyExchangeOrder(orderID int64, action exchange.ModifyOrder) (int64, error)

ModifyExchangeOrder will allow of changing orderbook placement and limit to market conversion

func (*Gemini) NewOrder

func (g *Gemini) NewOrder(symbol string, amount, price float64, side, orderType string) (int64, error)

NewOrder Only limit orders are supported through the API at present. returns order ID if successful

func (*Gemini) PostHeartbeat

func (g *Gemini) PostHeartbeat() (string, error)

PostHeartbeat sends a maintenance heartbeat to the exchange for all heartbeat maintaned sessions

func (*Gemini) Run

func (g *Gemini) Run()

Run implements the Gemini wrapper

func (*Gemini) SendAuthenticatedHTTPRequest

func (g *Gemini) SendAuthenticatedHTTPRequest(method, path string, params map[string]interface{}, result interface{}) (err error)

SendAuthenticatedHTTPRequest sends an authenticated HTTP request to the exchange and returns an error

func (*Gemini) SendHTTPRequest

func (g *Gemini) SendHTTPRequest(path string, result interface{}) error

SendHTTPRequest sends an unauthenticated request

func (*Gemini) SetDefaults

func (g *Gemini) SetDefaults()

SetDefaults sets package defaults for gemini exchange

func (*Gemini) Setup

func (g *Gemini) Setup(exch config.ExchangeConfig)

Setup sets exchange configuration parameters

func (*Gemini) Start

func (g *Gemini) Start(wg *sync.WaitGroup)

Start starts the Gemini go routine

func (*Gemini) SubmitExchangeOrder

func (g *Gemini) SubmitExchangeOrder(p pair.CurrencyPair, side exchange.OrderSide, orderType exchange.OrderType, amount, price float64, clientID string) (int64, error)

SubmitExchangeOrder submits a new order

func (*Gemini) UpdateOrderbook

func (g *Gemini) UpdateOrderbook(p pair.CurrencyPair, assetType string) (orderbook.Base, error)

UpdateOrderbook updates and returns the orderbook for a currency pair

func (*Gemini) UpdateTicker

func (g *Gemini) UpdateTicker(p pair.CurrencyPair, assetType string) (ticker.Price, error)

UpdateTicker updates and returns the ticker for a currency pair

func (*Gemini) WithdrawCrypto

func (g *Gemini) WithdrawCrypto(address, currency string, amount float64) (WithdrawalAddress, error)

WithdrawCrypto withdraws crypto currency to a whitelisted address

func (*Gemini) WithdrawCryptoExchangeFunds

func (g *Gemini) WithdrawCryptoExchangeFunds(address string, cryptocurrency pair.CurrencyItem, amount float64) (string, error)

WithdrawCryptoExchangeFunds returns a withdrawal ID when a withdrawal is submitted

func (*Gemini) WithdrawFiatExchangeFunds

func (g *Gemini) WithdrawFiatExchangeFunds(currency pair.CurrencyItem, amount float64) (string, error)

WithdrawFiatExchangeFunds returns a withdrawal ID when a withdrawal is submitted

func (*Gemini) WithdrawFiatExchangeFundsToInternationalBank

func (g *Gemini) WithdrawFiatExchangeFundsToInternationalBank(currency pair.CurrencyItem, amount float64) (string, error)

WithdrawFiatExchangeFundsToInternationalBank returns a withdrawal ID when a withdrawal is submitted

type Order

type Order struct {
	OrderID           int64    `json:"order_id,string"`
	ID                int64    `json:"id,string"`
	ClientOrderID     string   `json:"client_order_id"`
	Symbol            string   `json:"symbol"`
	Exchange          string   `json:"exchange"`
	Price             float64  `json:"price,string"`
	AvgExecutionPrice float64  `json:"avg_execution_price,string"`
	Side              string   `json:"side"`
	Type              string   `json:"type"`
	Timestamp         int64    `json:"timestamp,string"`
	TimestampMS       int64    `json:"timestampms"`
	IsLive            bool     `json:"is_live"`
	IsCancelled       bool     `json:"is_cancelled"`
	IsHidden          bool     `json:"is_hidden"`
	Options           []string `json:"options"`
	WasForced         bool     `json:"was_forced"`
	ExecutedAmount    float64  `json:"executed_amount,string"`
	RemainingAmount   float64  `json:"remaining_amount,string"`
	OriginalAmount    float64  `json:"original_amount,string"`
	Message           string   `json:"message"`
}

Order contains order information

type OrderResult

type OrderResult struct {
	Result  string `json:"result"`
	Details struct {
		CancelledOrders []string `json:"cancelledOrders"`
		CancelRejects   []string `json:"cancelRejects"`
	} `json:"details"`
	Message string `json:"message"`
}

OrderResult holds cancelled order information

type Orderbook

type Orderbook struct {
	Bids []OrderbookEntry `json:"bids"`
	Asks []OrderbookEntry `json:"asks"`
}

Orderbook contains orderbook information for both bid and ask side

type OrderbookEntry

type OrderbookEntry struct {
	Price  float64 `json:"price,string"`
	Amount float64 `json:"amount,string"`
}

OrderbookEntry subtype of orderbook information

type Ticker

type Ticker struct {
	Ask    float64 `json:"ask,string"`
	Bid    float64 `json:"bid,string"`
	Last   float64 `json:"last,string"`
	Volume struct {
		Currency  float64
		USD       float64
		BTC       float64
		ETH       float64
		Timestamp int64
	}
}

Ticker holds returned ticker data from the exchange

type Trade

type Trade struct {
	Timestamp   int64   `json:"timestamp"`
	Timestampms int64   `json:"timestampms"`
	TID         int64   `json:"tid"`
	Price       float64 `json:"price,string"`
	Amount      float64 `json:"amount,string"`
	Exchange    string  `json:"exchange"`
	Side        string  `json:"type"`
}

Trade holds trade history for a specific currency pair

type TradeHistory

type TradeHistory struct {
	Price           float64 `json:"price,string"`
	Amount          float64 `json:"amount,string"`
	Timestamp       int64   `json:"timestamp"`
	TimestampMS     int64   `json:"timestampms"`
	Type            string  `json:"type"`
	FeeCurrency     string  `json:"fee_currency"`
	FeeAmount       float64 `json:"fee_amount,string"`
	TID             int64   `json:"tid"`
	OrderID         int64   `json:"order_id,string"`
	Exchange        string  `json:"exchange"`
	IsAuctionFilled bool    `json:"is_auction_fill"`
	ClientOrderID   string  `json:"client_order_id"`
}

TradeHistory holds trade history information

type TradeVolume

type TradeVolume struct {
	AccountID         int64   `json:"account_id"`
	Symbol            string  `json:"symbol"`
	BaseCurrency      string  `json:"base_currency"`
	NotionalCurrency  string  `json:"notional_currency"`
	Date              string  `json:"date_date"`
	TotalVolumeBase   float64 `json:"total_volume_base"`
	MakerBuySellRatio float64 `json:"maker_buy_sell_ratio"`
	BuyMakerBase      float64 `json:"buy_maker_base"`
	BuyMakerNotional  float64 `json:"buy_maker_notional"`
	BuyMakerCount     float64 `json:"buy_maker_count"`
	SellMakerBase     float64 `json:"sell_maker_base"`
	SellMakerNotional float64 `json:"sell_maker_notional"`
	SellMakerCount    float64 `json:"sell_maker_count"`
	BuyTakerBase      float64 `json:"buy_taker_base"`
	BuyTakerNotional  float64 `json:"buy_taker_notional"`
	BuyTakerCount     float64 `json:"buy_taker_count"`
	SellTakerBase     float64 `json:"sell_taker_base"`
	SellTakerNotional float64 `json:"sell_taker_notional"`
	SellTakerCount    float64 `json:"sell_taker_count"`
}

TradeVolume holds Volume information

type WithdrawalAddress

type WithdrawalAddress struct {
	Address string  `json:"address"`
	Amount  float64 `json:"amount"`
	TXHash  string  `json:"txHash"`
	Message string  `json:"message"`
}

WithdrawalAddress holds withdrawal information

Jump to

Keyboard shortcuts

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