Cobinhood

This is an unofficial Ruby wrapper for the Cobinhood exchange REST and WebSocket APIs.

Notice
  • This is Alpha software. All issues should be aggressively reported for quick resolution!
  • RESTful interface is fully implemented.
  • Websocket is not done.
  • Pull Requests are very welcome!

Installation

Add this line to your application's Gemfile:

gem 'cobinhood'

And then execute:

$ bundle

Or install it yourself as:

$ gem install cobinhood

Features

Current

  • Basic implementation of REST API
    • Easy to use authentication
    • Methods return parsed JSON
    • No need to generate timestamps
    • No need to generate signatures

Planned

  • Basic implementation of WebSocket API

    • Pass procs or lambdas to event handlers
    • Single and multiple streams supported
    • Runs on EventMachine
  • Exception handling with responses

  • High level abstraction

Getting Started

REST Client

Require Cobinhood:

require 'cobinhood'

Create a new instance of the REST Client:

# If you only plan on touching public API endpoints, you can forgo any arguments
client = Cobinhood::Client::REST.new

# Otherwise provide an api_key as keyword arguments
client = Cobinhood::Client::REST.new api_key: 'your.api_key'

ALTERNATIVELY, set your API key in exported environment variable:

export COBINHOOD_API_KEY=your.api_key

Then you can instantiate client without parameters as in first variation above.

Create various requests:

# Ping the server
client.time
  # => {"time"=>1527470756975}

# Get candle data
client.candles "ABT-BTC", timeframe: '1m'
  # => {"candles"=>[
  #   {"timeframe"=>"1m", "trading_pair_id"=>"ABT-BTC", "timestamp"=>1527384360000, "volume"=>"0",
  #     "open"=>"0.00012873", "close"=>"0.00012873", "high"=>"0.00012873", "low"=>"0.00012873"
  #   },
  #   {"timeframe"=>"1m", "trading_pair_id"=>"ABT-BTC", "timestamp"=>1527384420000, "volume"=>"0",
  #     "open"=>"0.00012873", "close"=>"0.00012873", "high"=>"0.00012873", "low"=>"0.00012873"
  #   },
  #   {"timeframe"=>"1m", "trading_pair_id"=>"ABT-BTC", ...


# Place an order
client.place_order 'ABT-BTC', side: :ask, type: :limit, price: 0.000127, size: 22
  # => {
  #   "order"=>{
  #     "id"=>"298e5465-7282-47ca-9a1f-377c56487f5f",
  #     "trading_pair_id"=>"ABT-BTC",
  #     "side"=>"ask",
  #     "type"=>"limit",
  #     "price"=>"0.000127",
  #     "size"=>"22",
  #     "filled"=>"0",
  #     "state"=>"queued",
  #     "timestamp"=>1527471152779,
  #     "eq_price"=>"0",
  #     "completed_at"=>nil,
  #     "source"=>"exchange"
  #     }
  #   }


# Get deposit address
client.get_deposit_addresses
  => { "deposit_addresses"=>[
    { "address"=>"0x8bdFCC26CaA363234528288471107D90525d6BF923",
      "blockchain_id"=>"ethereum",
      "created_at"=>1527263083623,
      "currency"=>"FXT",
      "type"=>"exchange"
      },
    ...

Required and optional parameters, as well as enum values, can currently be found on the Cobinhood GitHub Page. Parameters should always be passed to client methods as keyword arguments in snake_case form. trading_pair_id, when a required parameter is simply passed as first parameter for most API calls.

REST Endpoints

REST endpoints are in order as documented on the Cobinhood Github page (linked above). The following lists only the method names, aliases (if any) and parameters of the methods to access endpoints. For the most part, method names follow naming of the endpoint's URL and alias method follows the title/name given in Cobinhood API documentation. There were some deviations where there would otherwise be name clashes/overloading.

System Endpoints


time

* required params: none

info
  • required params: none

Market Endpoints


currencies
  • alias: get_all_currencies

* required params: none

trading_pairs
  • alias: get_all_trading_pairs

* required params: none

order_book trading_pair_id
  • alias: get_order_book

* required params: trading_pair_id

precisions trading_pair_id
  • alias: get_order_book_precisions

* required params: trading_pair_id

stats

* required params: none

tickers trading_pair_id
  • alias: get_ticker

* required params: none

market_trades trading_pair_id
  • alias: get_recent_trades
  • required params: none

Chart Endpoints


candles trading_pair_id, options={}
  • required params: trading_pair_id, timeframe

Trading Endpoints


order order_id
  • alias: get_order

* required params: order_id

order_trades order_id
  • alias: get_trades_of_an_order

* required params: order_id

orders
  • alias: get_all_orders

* required params: none

place_order trading_pair_id, options={}

* required params: side, type, size, price (except market orders)

modify_order order_id, options={}

* required params: order_id, size, price

cancel_order order_id

* required params: order_id

order_history trading_pair_id=nil, options={}
  • alias: get_order_history

* required params: none

get_trade trade_id
  • alias: trade

* required params: trade_id

trades trading_pair_id, options={}
  • required params: trading_pair_id

Wallet Endpoints


balances
  • alias: get_wallet_balances

* required params: none

ledger
  • alias: get_ledger_entries

* required params: none

deposit_addresses
  • alias: get_deposit_addresses

* required params: none

withdrawal_addresses
  • alias: get_withdrawal_addresses

* required params: none

withdrawal withdrawal_id
  • alias: get_withdrawal

* required params: withdrawal_id

withdrawals
  • alias: get_all_withdrawals

* required params: none

deposit deposit_id
  • alias: get_deposit

* required params: deposit_id

deposits
  • alias: get_all_deposits
  • required params: none

WebSocket Client

  • COMING SOON!

Development

  • RSPECs coming soon!

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/mwlang/cobinhood.

Inspiration

The inspiration for architectural layout of this gem comes nearly one-for-one from the Binance gem by craysiii.

License

The gem is available as open source under the terms of the MIT License.