An unofficial Python wrapper for the REST and WebSocket APIs of FTX US Derivatives, formerly known as LedgerX. I have no affiliation with FTX US Derivatives. Use this at your own risk.
- Implementation of all REST endpoints, detailed here
- WebSocket implementation: live orderbook tops, account balances, open positions info, order fills, server heartbeat, reconnect logic
- Simple handling of authentication
- HTTP request error handling and retry logic
- Logging support
Register an account with FTX US Derivatives. [optional]
Generate an API key and configure permissions. [optional]
Install ftxusderviatives-python: pip install ftxusderivatives-python
Here's some example code to get started with. Note that API calls that require authentication will not work if you do not enter your API key.
###############################
# REST API Example
###############################
from rest_lx.rest import LxClient
api_key = "" # TODO: Put API key here
# Init REST client
client = LxClient(api_key=api_key)
# list active day-ahead-swap contracts
swaps = client.list_contracts({
'active': True,
'derivative_type': 'day_ahead_swap',
})
# grab BTC day-ahead-swap contract ID
data = swaps['data']
cbtc_swap = filter(lambda data: data['underlying_asset'] == 'CBTC', data)
contract_id = next(cbtc_swap)['id']
print(f"BTC swap contract_id: {contract_id}")
# retrieve your position for BTC day-ahead-swap contract (requires authentication)
position = client.retrieve_contract_position(contract_id)
print(f"BTC swap position: {position}")
# place bid for BTC next-day swap
lx_buy = {
'order_type': 'limit',
'contract_id': contract_id,
'is_ask': False,
'swap_purpose': 'undisclosed',
'size': 1,
'price': 100, # $1 (100 cents)
'volatile': True
}
order = client.create_order(**lx_buy)
# cancel placed order
message_id = order['data']['mid'] # order ID
client.cancel_single_order(message_id=message_id, contract_id=contract_id)
###############################
# WebSocket Example
###############################
from websocket_lx.client import LxWebsocketClient
import time
# Init WebSocket client
ws = LxWebsocketClient(api_key=api_key)
# Subscribe to orderbook-top feed for BTC day-ahead-swap contract
ws.subscribe(contract_id=contract_id)
ws.connect()
# Grab orderbook-top for BTC day-ahead-swap once a second
while True:
top = ws.get_book_top(contract_id=contract_id)
print(top)
time.sleep(1)
- Repo documentation
- Order fills, cancels, and insertions support
Contributions, fixes, recommendations, and all other feedback is welcome. If you are fixing a bug, please open an issue first with all relevant details, and mention the issue number in the pull request.
I can be reached on discord at Nenye#5335, or through email at [email protected]. Otherwise, feel free to open a PR or Issue here.