class Binance

Public Class Methods

new(api_key=nil, api_secret=nil, options={}) click to toggle source
# File lib/binance_ruby.rb, line 11
def initialize(api_key=nil, api_secret=nil, options={})
  @api_key      = api_key
  @api_secret   = api_secret
  @base_uri     = options[:base_uri] ||= 'https://www.binance.com/api'
end

Public Instance Methods

aggregate_trade_list(pair) click to toggle source
# File lib/binance_ruby.rb, line 31
def aggregate_trade_list(pair)
  opts = {'symbol' => pair}
  response = get_public 'aggTrades', opts
end
cancel_order(opts={}) click to toggle source
# File lib/binance_ruby.rb, line 126
def cancel_order(opts={})
  required_opts = %w{ symbol }
  leftover = required_opts - opts.keys.map(&:to_s)
  if leftover.length > 0 || (opts["orderId"].nil? && opts["origClientOrderId"].nil?)
    raise ArgumentError.new("Required options not given : symbol and either orderId or origClientOrderId}")
  end
  response = delete_private '/order?', opts
end
candles(pair, interval) click to toggle source
# File lib/binance_ruby.rb, line 36
def candles(pair, interval)
  opts = {'symbol' => pair, 'interval' => interval}
  response = get_public 'klines', opts
end
get_account(opts={}) click to toggle source

Private Data #######

# File lib/binance_ruby.rb, line 66
def get_account(opts={})
  response = get_private '/account?', opts
end
get_all_orders(opts={}) click to toggle source
# File lib/binance_ruby.rb, line 108
def get_all_orders(opts={})
  required_opts = %w{ symbol }
  leftover = required_opts - opts.keys.map(&:to_s)
  if leftover.length > 0
    raise ArgumentError.new("Required options, not given. Input must include #{leftover}")
  end
  response = get_private '/allOrders?', opts
end
get_open_orders(opts={}) click to toggle source
# File lib/binance_ruby.rb, line 99
def get_open_orders(opts={})
  required_opts = %w{ symbol }
  leftover = required_opts - opts.keys.map(&:to_s)
  if leftover.length > 0
    raise ArgumentError.new("Required options, not given. Input must include #{leftover}")
  end
  response = get_private '/openOrders?', opts
end
get_order(opts={}) click to toggle source
# File lib/binance_ruby.rb, line 90
def get_order(opts={})
  required_opts = %w{ symbol }
  leftover = required_opts - opts.keys.map(&:to_s)
  if leftover.length > 0 || (opts["orderId"].nil? && opts["origClientOrderId"].nil?)
    raise ArgumentError.new("Required options not given : symbol and either orderId or origClientOrderId}")
  end
  response = get_private '/order?', opts
end
get_public(method, opts={}) click to toggle source
# File lib/binance_ruby.rb, line 56
def get_public(method, opts={})
  url = @base_uri + '/v1/' + method
  r = self.class.get(url, query: opts)
  resp = JSON.parse(r.body)
end
get_trades(opts={}) click to toggle source
# File lib/binance_ruby.rb, line 117
def get_trades(opts={})
  required_opts = %w{ symbol }
  leftover = required_opts - opts.keys.map(&:to_s)
  if leftover.length > 0
    raise ArgumentError.new("Required options, not given. Input must include #{leftover}")
  end
  response = get_private '/myTrades?', opts
end
order_book(pair) click to toggle source
# File lib/binance_ruby.rb, line 26
def order_book(pair)
  opts = {'symbol' => pair}
  response = get_public 'depth', opts
end
server_time() click to toggle source

Public Data ########

# File lib/binance_ruby.rb, line 21
def server_time
  response = get_public('time')
  response["serverTime"]
end
set_order(opts={}) click to toggle source
# File lib/binance_ruby.rb, line 81
def set_order(opts={})
  opts[:type] == "MARKET" ? required_opts = %w{ symbol side type timeInForce quantity price } : required_opts = %w{ symbol side type quantity }
  leftover = required_opts - opts.keys.map(&:to_s)
  if leftover.length > 0
    raise ArgumentError.new("Required options, not given. Input must include #{leftover}")
  end
  response = post_private '/order?', opts
end
test_order(opts={}) click to toggle source

Mandatory parameters for order : symbol side type timeInForce quantity price

# File lib/binance_ruby.rb, line 72
def test_order(opts={})
  opts[:type] == "MARKET" ? required_opts = %w{ symbol side type timeInForce quantity price } : required_opts = %w{ symbol side type quantity }
  leftover = required_opts - opts.keys.map(&:to_s)
  if leftover.length > 0
    raise ArgumentError.new("Required options, not given. Input must include #{leftover}")
  end
  response = post_private '/order/test?', opts
end
ticker_all() click to toggle source
# File lib/binance_ruby.rb, line 48
def ticker_all
  response = get_public 'ticker/allPrices'
end
ticker_all_order_book() click to toggle source
# File lib/binance_ruby.rb, line 52
def ticker_all_order_book
  response = get_public '/ticker/allBookTickers'
end
ticker_day(pair) click to toggle source

interval list : 1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M

# File lib/binance_ruby.rb, line 43
def ticker_day(pair)
  opts = {'symbol' => pair}
  response = get_public 'ticker/24hr', opts
end

Private Instance Methods

delete_private(method, opts={}) click to toggle source
# File lib/binance_ruby.rb, line 153
def delete_private(method, opts={})
  header = {"X-MBX-APIKEY":@api_key }
  r = self.class.delete(set_request(method, opts), headers: header)
  resp = JSON.parse(r.body)
end
get_private(method, opts={}) click to toggle source

Create request #####

# File lib/binance_ruby.rb, line 141
def get_private(method, opts={})
  header = {"X-MBX-APIKEY":@api_key }
  r = self.class.get(set_request(method, opts), headers: header)
  resp = JSON.parse(r.body)
end
post_private(method, opts={}) click to toggle source
# File lib/binance_ruby.rb, line 147
def post_private(method, opts={})
  header = {"X-MBX-APIKEY":@api_key }
  r = self.class.post(set_request(method, opts), headers: header)
  resp = JSON.parse(r.body)
end
set_request(method, opts={}) click to toggle source
# File lib/binance_ruby.rb, line 159
def set_request(method, opts={})
  options = Array.new
  unless opts.empty?
    opts.each do |key, value|
      options << key + "=" + value
    end
    data = options.join('&') + '&timestamp=' + DateTime.now.strftime('%Q').to_s
  else
    data = '&timestamp=' + DateTime.now.strftime('%Q').to_s
  end

  digest = OpenSSL::Digest.new('sha256')
  signature = OpenSSL::HMAC.hexdigest(digest, @api_secret, data)

  url = @base_uri + '/v3' + method + data + "&signature=" + signature
  return url
end