Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

The unofficial Python client for the Coinbase Pro API

License

NotificationsYou must be signed in to change notification settings

danpaquin/coinbasepro-python

Repository files navigation

Build Status

The Python client for theCoinbase Pro API (formerly known asthe GDAX)

Provided under MIT License by Daniel Paquin.

Note: this library may be subtly broken or buggy. The code is released underthe MIT License – please take the following message to heart:

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS ORCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHERIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Benefits

  • A simple to use python wrapper for both public and authenticated endpoints.
  • In about 10 minutes, you could be programmatically trading on one of thelargest Bitcoin exchanges in theworld!
  • Do not worry about handling the nuances of the API with easy-to-use methodsfor every API endpoint.
  • Gain an advantage in the market by getting under the hood of CB Pro to learnwhat and who is behind every tick.

Under Development

  • Test Scripts
  • Additional Functionality for the real-time order book
  • FIX API ClientLooking for assistance

Getting Started

This README is documentation on the syntax of the python client presented inthis repository. See function docstrings for full syntax details.
This API attempts to present a clean interface to CB Pro, but in order to use itto its full potential, you must familiarize yourself with the official CB Prodocumentation.

pipinstallcbpro#orpipinstallgit+git://github.com/danpaquin/coinbasepro-python.git

Public Client

Only some endpoints in the API are available to everyone. The public endpointscan be reached usingPublicClient

importcbpropublic_client=cbpro.PublicClient()

PublicClient Methods

public_client.get_products()
# Get the order book at the default level.public_client.get_product_order_book('BTC-USD')# Get the order book at a specific level.public_client.get_product_order_book('BTC-USD',level=1)
# Get the product ticker for a specific product.public_client.get_product_ticker(product_id='ETH-USD')
# Get the product trades for a specific product.# Returns a generatorpublic_client.get_product_trades(product_id='ETH-USD')
public_client.get_product_historic_rates('ETH-USD')# To include other parameters, see function docstring:public_client.get_product_historic_rates('ETH-USD',granularity=3000)
public_client.get_product_24hr_stats('ETH-USD')
public_client.get_currencies()
public_client.get_time()

Authenticated Client

Not all API endpoints are available to everyone.Those requiring user authentication can be reached usingAuthenticatedClient.You must setup API access within youraccount settings.TheAuthenticatedClient inherits all methods from thePublicClientclass, so you will only need to initialize one if you are planning tointegrate both into your script.

importcbproauth_client=cbpro.AuthenticatedClient(key,b64secret,passphrase)# Use the sandbox API (requires a different set of API access credentials)auth_client=cbpro.AuthenticatedClient(key,b64secret,passphrase,api_url="https://api-public.sandbox.pro.coinbase.com")

Pagination

Some calls arepaginated, meaning multiplecalls must be made to receive the full set of data. The CB Pro Python API providesan abstraction for paginated endpoints in the form of generators which provide aclean interface for iteration but may make multiple HTTP requests behind thescenes. The pagination optionsbefore,after, andlimit may be supplied askeyword arguments if desired, but aren't necessary for typical use cases.

fills_gen=auth_client.get_fills()# Get all fills (will possibly make multiple HTTP requests)all_fills=list(fills_gen)

One use case for pagination parameters worth pointing out is retrieving onlynew data since the previous request. For the case ofget_fills(), thetrade_id is the parameter used for indexing. By passingbefore=some_trade_id, only fills more recent than thattrade_id will bereturned. Note that when usingbefore, a maximum of 100 entries will bereturned - this is a limitation of CB Pro.

fromitertoolsimportislice# Get 5 most recent fillsrecent_fills=islice(auth_client.get_fills(),5)# Only fetch new fills since last call by utilizing `before` parameter.new_fills=auth_client.get_fills(before=recent_fills[0]['trade_id'])

AuthenticatedClient Methods

auth_client.get_accounts()
auth_client.get_account("7d0f7d8e-dd34-4d9c-a846-06f431c381ba")
# Returns generator:auth_client.get_account_history("7d0f7d8e-dd34-4d9c-a846-06f431c381ba")
# Returns generator:auth_client.get_account_holds("7d0f7d8e-dd34-4d9c-a846-06f431c381ba")
# Buy 0.01 BTC @ 100 USDauth_client.buy(price='100.00',#USDsize='0.01',#BTCorder_type='limit',product_id='BTC-USD')
# Sell 0.01 BTC @ 200 USDauth_client.sell(price='200.00',#USDsize='0.01',#BTCorder_type='limit',product_id='BTC-USD')
# Limit order-specific methodauth_client.place_limit_order(product_id='BTC-USD',side='buy',price='200.00',size='0.01')
# Place a market order by specifying amount of USD to use.# Alternatively, `size` could be used to specify quantity in BTC amount.auth_client.place_market_order(product_id='BTC-USD',side='buy',funds='100.00')
# Stop order. `funds` can be used instead of `size` here.auth_client.place_stop_order(product_id='BTC-USD',stop_type='loss',price='200.00',size='0.01')
auth_client.cancel_order("d50ec984-77a8-460a-b958-66f114b0de9b")
auth_client.cancel_all(product_id='BTC-USD')
# Returns generator:auth_client.get_orders()
auth_client.get_order("d50ec984-77a8-460a-b958-66f114b0de9b")
# All return generatorsauth_client.get_fills()# Get fills for a specific orderauth_client.get_fills(order_id="d50ec984-77a8-460a-b958-66f114b0de9b")# Get fills for a specific productauth_client.get_fills(product_id="ETH-BTC")
depositParams= {'amount':'25.00',# Currency determined by account specified'coinbase_account_id':'60680c98bfe96c2601f27e9c'}auth_client.deposit(depositParams)
# Withdraw from CB Pro into Coinbase WalletwithdrawParams= {'amount':'1.00',# Currency determined by account specified'coinbase_account_id':'536a541fa9393bb3c7000023'}auth_client.withdraw(withdrawParams)

WebsocketClient

If you would like to receive real-time market updates, you must subscribe to thewebsocket feed.

Subscribe to a single product

importcbpro# Parameters are optionalwsClient=cbpro.WebsocketClient(url="wss://ws-feed.pro.coinbase.com",products="BTC-USD",channels=["ticker"])# Do other stuff...wsClient.close()

Subscribe to multiple products

importcbpro# Parameters are optionalwsClient=cbpro.WebsocketClient(url="wss://ws-feed.pro.coinbase.com",products=["BTC-USD","ETH-USD"],channels=["ticker"])# Do other stuff...wsClient.close()

WebsocketClient + Mongodb

TheWebsocketClient now supports data gathering via MongoDB. Given aMongoDB collection, theWebsocketClient will stream results directly intothe database collection.

# import PyMongo and connect to a local, running Mongo instancefrompymongoimportMongoClientimportcbpromongo_client=MongoClient('mongodb://localhost:27017/')# specify the database and collectiondb=mongo_client.cryptocurrency_databaseBTC_collection=db.BTC_collection# instantiate a WebsocketClient instance, with a Mongo collection as a parameterwsClient=cbpro.WebsocketClient(url="wss://ws-feed.pro.coinbase.com",products="BTC-USD",mongo_collection=BTC_collection,should_print=False)wsClient.start()

WebsocketClient Methods

TheWebsocketClient subscribes in a separate thread upon initialization.There are three methods which you could overwrite (before initialization) so itcan react to the data streaming in. The current client is a template used forillustration purposes only.

  • onOpen - called once,immediately before the socket connection is made, thisis where you want to add initial parameters.
  • onMessage - called once for every message that arrives and accepts oneargument that contains the message of dict type.
  • on_close - called once after the websocket has been closed.
  • close - call this method to close the websocket connection (do not overwrite).
importcbpro,timeclassmyWebsocketClient(cbpro.WebsocketClient):defon_open(self):self.url="wss://ws-feed.pro.coinbase.com/"self.products= ["LTC-USD"]self.message_count=0print("Lets count the messages!")defon_message(self,msg):self.message_count+=1if'price'inmsgand'type'inmsg:print ("Message type:",msg["type"],"\t@ {:.3f}".format(float(msg["price"])))defon_close(self):print("-- Goodbye! --")wsClient=myWebsocketClient()wsClient.start()print(wsClient.url,wsClient.products)while (wsClient.message_count<500):print ("\nmessage_count =","{}\n".format(wsClient.message_count))time.sleep(1)wsClient.close()

Testing

A test suite is under development. Tests for the authenticated client require aset of sandbox API credentials. To provide them, renameapi_config.json.example in the tests folder toapi_config.json and edit thefile accordingly. To run the tests, start in the project directory and run

python -m pytest

Real-time OrderBook

TheOrderBook is a convenient data structure to keep a real-time record ofthe orderbook for the product_id input. It processes incoming messages from analready existing WebsocketClient. Please provide your feedback for futureimprovements.

importcbpro,time,QueueclassmyWebsocketClient(cbpro.WebsocketClient):defon_open(self):self.products= ['BTC-USD','ETH-USD']self.order_book_btc=OrderBookConsole(product_id='BTC-USD')self.order_book_eth=OrderBookConsole(product_id='ETH-USD')defon_message(self,msg):self.order_book_btc.process_message(msg)self.order_book_eth.process_message(msg)wsClient=myWebsocketClient()wsClient.start()time.sleep(10)whileTrue:print(wsClient.order_book_btc.get_ask())print(wsClient.order_book_eth.get_bid())time.sleep(1)

Testing

Unit tests are under development using the pytest framework. Contributions arewelcome!

To run the full test suite, in the projectdirectory run:

python -m pytest

Change Log

1.1.2Current PyPI release

  • Refactor project for Coinbase Pro
  • Major overhaul on how pagination is handled

1.0

  • The first release that is not backwards compatible
  • Refactored to follow PEP 8 Standards
  • Improved Documentation

0.3

  • Added crypto and LTC deposit & withdraw (undocumented).
  • Added support for Margin trading (undocumented).
  • Enhanced functionality of the WebsocketClient.
  • Soft launch of the OrderBook (undocumented).
  • Minor bug squashing & syntax improvements.

0.2.2

  • Added additional API functionality such as cancelAll() and ETH withdrawal.

0.2.1

  • AllowedWebsocketClient to operate intuitively and restructured exampleworkflow.

0.2.0

  • Renamed project to GDAX-Python
  • Merged Websocket updates to handle errors and reconnect.

0.1.2

  • Updated JSON handling for increased compatibility among some users.
  • Added support for payment methods, reports, and Coinbase user accounts.
  • Other compatibility updates.

0.1.1b2

  • Original PyPI Release.

Releases

No releases published

Packages

No packages published

Contributors59


[8]ページ先頭

©2009-2026 Movatter.jp