Class: Honeymaker::Clients::Bitvavo

Inherits:
Honeymaker::Client show all
Defined in:
lib/honeymaker/clients/bitvavo.rb

Constant Summary collapse

URL =
"https://api.bitvavo.com"
ACCESS_WINDOW =
"10000"
RATE_LIMITS =
{ default: 100, orders: 100 }.freeze
DEFAULT_OPERATOR_ID =

Bitvavo requires a mandatory operatorId on every order create/cancel (errorCode 203). It’s a positive int64 the caller sets themselves to attribute an order to a trader/bot for audit; the value is cosmetic.

1

Constants inherited from Honeymaker::Client

Honeymaker::Client::OPTIONS

Instance Attribute Summary

Attributes inherited from Honeymaker::Client

#api_key, #api_secret

Instance Method Summary collapse

Methods inherited from Honeymaker::Client

#initialize, rate_limits, #validate

Constructor Details

This class inherits a constructor from Honeymaker::Client

Instance Method Details

#cancel_order(market:, order_id:, operator_id: nil) ⇒ Object



80
81
82
83
84
# File 'lib/honeymaker/clients/bitvavo.rb', line 80

def cancel_order(market:, order_id:, operator_id: nil)
  delete_signed("/v2/order", {
    market: market, orderId: order_id, operatorId: operator_id || DEFAULT_OPERATOR_ID
  })
end

#get_assetsObject



15
16
17
# File 'lib/honeymaker/clients/bitvavo.rb', line 15

def get_assets
  get_public("/v2/assets")
end

#get_balancesObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/honeymaker/clients/bitvavo.rb', line 41

def get_balances
  result = get_raw_balance
  return result if result.failure?

  balances = {}
  Array(result.data).each do |balance|
    symbol = balance["symbol"]
    next unless symbol
    free = BigDecimal((balance["available"] || "0").to_s)
    locked = BigDecimal((balance["inOrder"] || "0").to_s)
    next if free.zero? && locked.zero?
    balances[symbol] = { free: free, locked: locked }
  end

  Result::Success.new(balances)
end

#get_candles(market:, interval:, start_time: nil, end_time: nil, limit: nil) ⇒ Object



31
32
33
34
35
# File 'lib/honeymaker/clients/bitvavo.rb', line 31

def get_candles(market:, interval:, start_time: nil, end_time: nil, limit: nil)
  get_public("/v2/#{market}/candles", {
    interval: interval, start: start_time, end: end_time, limit: limit
  })
end

#get_deposit_history(symbol: nil, limit: nil, start_time: nil, end_time: nil) ⇒ Object



93
94
95
# File 'lib/honeymaker/clients/bitvavo.rb', line 93

def get_deposit_history(symbol: nil, limit: nil, start_time: nil, end_time: nil)
  get_signed("/v2/deposit", { symbol: symbol, limit: limit, start: start_time, end: end_time })
end

#get_markets(market: nil) ⇒ Object



19
20
21
# File 'lib/honeymaker/clients/bitvavo.rb', line 19

def get_markets(market: nil)
  get_public("/v2/markets", { market: market })
end

#get_order(market:, order_id:) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/honeymaker/clients/bitvavo.rb', line 72

def get_order(market:, order_id:)
  result = get_signed("/v2/order", { market: market, orderId: order_id })
  return result if result.failure?

  raw = result.data
  Result::Success.new(normalize_order("#{raw['market']}-#{raw['orderId']}", raw))
end

#get_raw_balance(symbol: nil) ⇒ Object



37
38
39
# File 'lib/honeymaker/clients/bitvavo.rb', line 37

def get_raw_balance(symbol: nil)
  get_signed("/v2/balance", { symbol: symbol })
end

#get_ticker_book(market: nil) ⇒ Object



27
28
29
# File 'lib/honeymaker/clients/bitvavo.rb', line 27

def get_ticker_book(market: nil)
  get_public("/v2/ticker/book", { market: market })
end

#get_ticker_price(market: nil) ⇒ Object



23
24
25
# File 'lib/honeymaker/clients/bitvavo.rb', line 23

def get_ticker_price(market: nil)
  get_public("/v2/ticker/price", { market: market })
end

#get_trades(market:, limit: nil, start_time: nil, end_time: nil, trade_id_from: nil, trade_id_to: nil) ⇒ Object



86
87
88
89
90
91
# File 'lib/honeymaker/clients/bitvavo.rb', line 86

def get_trades(market:, limit: nil, start_time: nil, end_time: nil, trade_id_from: nil, trade_id_to: nil)
  get_signed("/v2/trades", {
    market: market, limit: limit, start: start_time, end: end_time,
    tradeIdFrom: trade_id_from, tradeIdTo: trade_id_to
  })
end

#get_transactions(limit: nil, start_time: nil, end_time: nil) ⇒ Object

— History —



109
110
111
# File 'lib/honeymaker/clients/bitvavo.rb', line 109

def get_transactions(limit: nil, start_time: nil, end_time: nil)
  get_signed("/v2/transactions", { limit: limit, start: start_time, end: end_time })
end

#get_withdrawal_history(symbol: nil, limit: nil, start_time: nil, end_time: nil) ⇒ Object



97
98
99
# File 'lib/honeymaker/clients/bitvavo.rb', line 97

def get_withdrawal_history(symbol: nil, limit: nil, start_time: nil, end_time: nil)
  get_signed("/v2/withdrawal", { symbol: symbol, limit: limit, start: start_time, end: end_time })
end

#place_order(market:, side:, order_type:, amount: nil, amount_quote: nil, price: nil, time_in_force: nil, client_order_id: nil, operator_id: nil) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/honeymaker/clients/bitvavo.rb', line 58

def place_order(market:, side:, order_type:, amount: nil, amount_quote: nil, price: nil,
                time_in_force: nil, client_order_id: nil, operator_id: nil)
  result = post_signed("/v2/order", {
    market: market, side: side, orderType: order_type,
    amount: amount, amountQuote: amount_quote, price: price,
    timeInForce: time_in_force, clientOrderId: client_order_id,
    operatorId: operator_id || DEFAULT_OPERATOR_ID
  })
  return result if result.failure?

  raw = result.data
  Result::Success.new({ order_id: "#{raw['market']}-#{raw['orderId']}", raw: raw })
end

#withdraw(symbol:, amount:, address:, payment_id: nil) ⇒ Object



101
102
103
104
105
# File 'lib/honeymaker/clients/bitvavo.rb', line 101

def withdraw(symbol:, amount:, address:, payment_id: nil)
  post_signed("/v2/withdrawal", {
    symbol: symbol, amount: amount, address: address, paymentId: payment_id
  })
end