2018-11-19 13:26:13 +00:00
2018-11-14 12:24:22 +01:00
2018-11-16 15:15:56 +00:00
2018-11-16 15:03:45 +00:00

Official Python bfxapi

This repo contains an official python library that is used to connect to the both the Bitfinex api and the Honey Frameworks data-server. The library communicates with these servers using both websockets connection and a its REST interface.

Install dependencies

pip3 install -r requirements.txt

Run the trades/candles example:

cd bfxapi/examples
python3 subsribe_trades_candles.py

bfxapi.LiveWebsocket

The websocket exposes a collection of events that are triggered when certain data is received. When subscribing to an event you are able to pass either a standard function or an asyncio co-routine Here is a full list of available events:

  • all (array|json): listen for all messages coming through
  • connected: () called when a connection is made
  • authenticated (): called when the websocket passes authentication
  • notification (array): incoming account notification
  • error (array): error from the websocket
  • order_closed (Order, Trade): when an order confirmation is received
  • wallet_snapshot (array): Initial wallet balances (Fired once)
  • order_snapshot (array): Initial open orders (Fired once)
  • positions_snapshot (array): Initial open positions (Fired once)
  • wallet_update (array): changes to the balance of wallets
  • seed_candle (json): initial past candle to prime strategy
  • seed_trade (json): initial past trade to prime strategy
  • funding_offer_snapshot (array): opening funding offer balances
  • funding_loan_snapshot (array): opening funding loan balances
  • funding_credit_snapshot (array): opening funding credit balances
  • balance_update (array): when the state of a balance is changed
  • new_trade (array): a new trade on the market has been executed
  • new_candle (array): a new candle has been produced

For example. If you wanted to subscribe to all of the trades on the tBTCUSD market, then you can simply listen to the new_trade event. For Example:

ws = LiveBfxWebsocket(
  logLevel='INFO'
)

@ws.on('new_trade')
def log_trade(trade):
  print ("New trade: {}".format(trade))

@ws.on('connected')
def start():
  ws.subscribe('trades', 'tBTCUSD')

ws.run()

NOTE: Instead of using the python decorators, you can also listen to events via function call:

ws.on('new_trade', log_trade)

Exposed Functions

  • subscribe(channel_name, symbol, timeframe=None, **kwargs) Subscribes the socket to a data feed such as 'trades' or 'candles'.
  • submit_order(symbol, price, amount, market_type, hidden=False, onComplete=None, onError=None, *args, **kwargs) Submits an order to the Bitfinex api. If the order is successful then the order_closed event will be triggered and the onComplete function will also be called if provided in the parameters.
  • on(event, function) subscribes the function to be triggered on the given event.

bfxapi.DataServerWebsocket

The data-server websocket is used for retrieving large amounts of historical data from a bfx-hf-data-server instance. The library then takes all of the incoming historical data from the server and pushes it down the new_trade and new_candle events. For information on how to start a data-server instance please visit the repo at: https://github.com/bitfinexcom/bfx-hf-data-server

A list of events available:

  • connected: connection is made
  • new_trade: a historical trade item is received
  • new_candle: a historical candle item is received
  • done: backtest has finished running

An example of a script that loads all of the historical trades for symbol tBTCUSD over the last 2 days:

ws = DataServerWebsocket(
  symbol='tBTCUSD',
  host='ws://localhost:8899'
)

@ws.on('new_trade')
def trade(trade):
  print ("Backtest trade: {}".format(trade))

@ws.on('done')
def finish():
  print ("Backtest complete!")

now = int(round(time.time() * 1000))
then = now - (1000 * 60 * 60 * 24 * 2) # 2 days ago
ws.run(then, now)



Please see the bfxapi/examples folder. There you will be able to find working scripts that submit orders, establish a connect and run backtests.
Description
No description provided
Readme 1.2 MiB
Languages
Python 100%