Skip to content

An unofficial Python wrapper for the REST and WebSocket APIs of FTX US Derivatives, formerly known as LedgerX.

License

Notifications You must be signed in to change notification settings

nenyehub/ftxusderivatives-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐍 ftxusderivatives-python

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.

🔥 Features

  • 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

🏃 Quick Start

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)

🕒 Todo

🔧 Contributing

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.

📥 Contact

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.

About

An unofficial Python wrapper for the REST and WebSocket APIs of FTX US Derivatives, formerly known as LedgerX.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages