coinbase-exchange-ruby, GDAX API的官方 ruby 库

分享于 

14分钟阅读

GitHub

  繁體 雙語
Official Ruby library for the Coinbase Exchange API
  • 源代码名称:coinbase-exchange-ruby
  • 源代码网址:http://www.github.com/coinbase/coinbase-exchange-ruby
  • coinbase-exchange-ruby源代码文档
  • coinbase-exchange-ruby源代码下载
  • Git URL:
    git://www.github.com/coinbase/coinbase-exchange-ruby.git
    Git Clone代码到本地:
    git clone http://www.github.com/coinbase/coinbase-exchange-ruby
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/coinbase/coinbase-exchange-ruby
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    GDAX ruby-库

    注意:这里库未积极维护。 请参考 node.js 客户端库以获得最新的客户端实现。

    REST客户端

    我们提供了一个交换客户端,它是交换API上的。 本自述文件的目的是提供有效使用 gem的上下文。 有关通过API提供的信息的详细概述,我们建议参考官方文档。

    我们提供同步和异步客户端。 只有两个客户机之间的功能差异是:异步客户端必须启动 inside Eventmachine reactor循环。

    同步客户端

    require'coinbase/exchange'rest_api =Coinbase::Exchange::Client.new(api_key, api_secret, api_pass)whiletruesleep10 rest_api.last_trade(product_id:"BTC-GBP") do |resp|
     p"Spot Rate: £ %.2f"% resp.price
     endend

    异步客户端

    require'coinbase/exchange'require'eventmachine'rest_api =Coinbase::Exchange::AsyncClient.new(api_key, api_secret, api_pass)EM.run {
     EM.add_periodic_timer(10) {
     rest_api.last_trade(product_id:"BTC-GBP") do |resp|
     p"Spot Rate: £ %.2f"% resp.price
     end }
    }

    用法

    安装

    
    $ gem install coinbase-exchange
    
    
    
    

    初始化

    要初始化客户端,只需传入API密钥,API密钥和在web界面上生成的API密码:

    rest_api =Coinbase::Exchange::Client.new(api_key, api_secret, api_pass)
    rest_api =Coinbase::Exchange::AsyncClient.new(api_key, api_secret, api_pass)

    默认产品

    GDAX支持多种货币交易比特币。 如果你希望交易不同的货币,你可以指定替代的默认货币。

    gbp_client =Coinbase::Exchange::Client.new(api_key, api_secret, api_pass,
     product_id:"BTC-GBP")

    沙箱

    你可以通过指定替代api端点来初始化到沙箱的连接。

    sandbox =Coinbase::Exchange::Client.new(api_key, api_secret, api_pass,
     api_url:"https://api-public.sandbox.gdax.com")

    方法

    返回数据的默认表示是从API响应主体返回的JSON blob中未经过修改的哈希。 应该在 block 中访问响应,如下所示。

    rest_api.last_trade do |resp|
     p"Spot Rate: $ %.2f"%BigDecimal(resp['price'])end

    注意,同步客户端还将返回相同的数据。 然而,这是不鼓励的,因为它将把移植代码移植到异步客户端。 下面是一个可能看起来像的例子。

    resp = rest_api.last_tradep"Spot Rate: $ %.2f"%BigDecimal(resp['price'])

    参数

    gem 将自动编码你传递给方法调用的任何附加参数。 例如要获取完整的orderbook,你必须显式地将级别参数设置为 3。

    rest_api.orderbook(level:3) do |resp|
     p"There are #{resp['bids'].count} open bids on the orderbook"p"There are #{resp['asks'].count} open asks on the orderbook"end

    返回值

    数据格式在编写财务软件时是一个敏感的问题。 表示字符串格式的货币数据。 这是一个很好的中间数据格式,用户可以应用它们自己的数据格式,但是它不是特别有用。

    我们建议使用 [BigDecimal] ( http://ruby-doc.org/stdlib-2.1.1/libdoc/bigdecimal/rdoc/BigDecimal.html ) 库来表示 ruby 中的货币数据。 如果通过调用响应项访问数据,就好像它们是响应本身的方法一样。 如果以这种方式访问数据,任何数字数据都将转换为BigDecimal格式。

    rest_api.orders(before:Time.now -60*60) do |resp|
     resp.each do |order|
     psprintf"#{order.side} ฿ %.8f for $ %.2f", order.size, order.price
     endend

    错误

    如果 gem 检测到异常,则会引发错误。 可能的错误包括:

    错误描述
    APIError所有错误的父类。
    BadRequestError服务器返回状态 400.
    NotAuthorizedError服务器返回状态 401.
    ForbiddenError服务器返回状态 403。
    NotFoundError服务器返回状态 404.
    RateLimitError服务器返回状态 429.
    InternalServerError服务器返回状态 500.

    元数据

    你可能需要对API响应的细粒度访问,而不是。 另外,我们还提供对响应头。状态和原始库所表示的原始响应的访问。

    rest_api.last_trade do |resp|
     p"Status: #{resp.response_status}"p"Headers: #{resp.response_headers}"p"Response: #{resp.raw}"end

    端点

    ( https://docs.gdax.com/#market-data

    Coinbase支持多种货币交易。 市场数据交互时,你可以通过设置product_id参数来获取关于产品以外的其他产品的信息。

    rest_api.last_trade(product_id:'BTC-GBP') do |resp|
     p"The spot rate is £ %.2f"% resp.priceend

    货币

    获取我们支持的货币列表。

    rest_api.currencies do |resp|
     resp.each do |currency|
     p"The symbol for #{currency.name} is #{currency.id}"endend

    产品

    获取我们提供的产品列表。

    rest_api.products do |resp|
     resp.each do |product|
     p"The most #{product.base_currency} you can buy with #{product.quote_currency} is %f"% product.base_max_size
     endend

    orderbook

    下载我们交换的所有已经打开订单的列表。

    rest_api.orderbook do |resp|
     p respend

    如果希望下载级别 2或者级别 3 orderbook,请将级别参数传递给该方法。

    rest_api.orderbook(level:3) do |resp|
     p"There are #{resp.bids.count} open bids on the orderbook"p"There are #{resp.asks.count} open asks on the orderbook"end

    last_trade

    下载有关最后一个交易的信息,该交易通过/ticker 端点公开。

    rest_api.last_trade do |resp|
     p"The spot rate is $ %.2f"% resp.priceend

    trade_history

    下载最近的交易。请注意,如果没有显式传递前面的参数,这将递归下载所有的交易。

    rest_api.trade_history(before:Time.now -10*60) do |resp|
     p"#{resp.count} trades have occurred in the past 10 minutes."end

    price_history

    下载价格历史记录我们建议设置启动参数。 你可能还会发现粒度参数是有用的。

    rest_api.price_history(start:Time.now -60*60, granularity:60) do |resp|
     p"In the past hour, the maximum price movement was $ %.2f"% resp.map { |candle| candle.high - candle.low }.maxend

    daily_stats

    下载过去 24小时的价格信息。

    rest_api.daily_stats do |resp|
     p"The highest price in in the past 24 hours was %.2f"% resp.high
     p"The lowest price in in the past 24 hours was %.2f"% resp.lowend

    ( https://docs.gdax.com/#accounts

    帐户

    下载有关你的帐户的信息。

    rest_api.accounts do |resp|
     resp.each do |account|
     p"#{account.id}: %.2f #{account.currency} available for trading"% account.available
     endend

    帐户

    下载有关单个帐户的信息。 你必须将帐户标识作为第一个参数传递。

    rest_api.account(account_id) do |account|
     p"Account balance is %.2f #{account.currency}"% account.balanceend

    account_history

    下载与帐户相关联的转帐,MATCHES 和费用的分类帐。 你必须将帐户标识作为第一个参数传递。

    rest_api.account_history(account_id) do |resp|
     p respend

    account_holds

    存放在开户账户上。 这将下载所有帐户的列表。

    rest_api.account_holds(account_id) do |resp|
     p respend

    ( https://docs.gdax.com/#orders

    出价

    放置采购订单需要的参数是数量和价格。

    rest_api.bid(0.25, 250) do |resp|
     p"Order ID is #{resp.id}"end

    购买

    这是投标的别名。

    rest_api.buy(0.25, 250) do |resp|
     p"Order ID is #{resp.id}"end

    放置销售订单需要的参数是金额和价格。

    rest_api.ask(0.25, 250) do |resp|
     p"Order ID is #{resp.id}"end

    这是请求的别名。

    rest_api.sell(0.25, 250) do |resp|
     p"Order ID is #{resp.id}"end

    cancel

    取消命令。这不会返回任何实体,但仍可以通过 block 在成功返回时执行。

    rest_api.cancel(order_id) dop"Order canceled successfully"end

    订单

    下载你所有订单的列表。 很可能你只关心在使用这个命令时你的开放订单。

    rest_api.orders(status:"open") do |resp|
     p"You have #{resp.count} open orders."end

    下载有关单个订单的信息。

    rest_api.order(order_id) do |resp|
     p"Order status is #{resp.status}"end

    填充

    下载填充列表。

    rest_api.fills do |resp|
     p respend

    ( https://docs.gdax.com/#transfer-funds

    从Coinbase钱包中存款。

    rest_api.deposit(wallet_id, 10) do |resp|
     p"Deposited 10 BTC"end

    为你的Coinbase钱包取钱。

    rest_api.withdraw(wallet_id, 10) do |resp|
     p"Withdrew 10 BTC"end

    其他

    server_time

    下载服务器时间。

    rest_api.server_time do |resp|
     p"The time on the server is #{resp}"end

    web socket客户端

    我们建议在继续之前阅读官方的web socket文档。

    为了方便,我们在 gem 中提供了一个 web socket接口。 这通常用于构建实时 orderbook,虽然它还可以用于更简单的目的,如跟踪市场率或者跟踪。 异步客户端类似,这取决于异步处理的Eventmachine。

    请考虑在初始化 web socket时将keepalive标志设置为 true。 这将使 web socket在关闭连接时主动刷新连接。

    websocket =Coinbase::Exchange::Websocket.new(keepalive:true)

    在启动 web socket之前,你应该通过将 block 传递给相应的方法来进入任何感兴趣的消息。 可以用于访问的方法是开放的。MATCH。更改。完成和错误。 此外,你可以使用消息在每个 web socket事件中运行 block。

    require'coinbase/exchange'require'eventmachine'websocket =Coinbase::Exchange::Websocket.new(product_id:'BTC-GBP',
     keepalive:true)
    websocket.match do |resp|
     p"Spot Rate: £ %.2f"% resp.priceendEM.run do websocket.start!
     EM.add_periodic_timer(1) {
     websocket.ping dop"Websocket is alive"end }
     EM.error_handler { |e|
     p"Websocket Error: #{e.message}" }end

    如果在React器循环之外启动,web socket客户机将使用一个非常基本的Eventmachine处理器。

    require'coinbase/exchange'websocket =Coinbase::Exchange::Websocket.new(product_id:'BTC-GBP')
    websocket.match do |resp|
     p"Spot Rate: £ %.2f"% resp.priceendwebsocket.start!

    API