Aprenda a usar la API FTX Rest en Python para trade criptomonedas y desarrolle aplicaciones criptográficas en esta guía completa.
Si es nuevo en FTX.US, use el siguiente enlace para ahorre un 5% en todos sus trade Tarifa.
Puedes descargar el código en Analizando Alpha GitHub Repo.
¿Qué es FTX?
FTX es una plataforma de intercambio de criptomonedas de vanguardia. Con FTX, puede trade varios activos como futuros y opciones sobre las principales criptomonedas a precios competitivos con un apalancamiento significativo.
Sam Bankman-Fried y Gary Wang fundaron FTX en mayo de 2019. Desde entonces, se ha convertido en uno de los intercambios más populares para comerciantes de todos los orígenes que desean acceder para brindar liquidez y oportunidades rentables cuando trading estos mercados altamente volátiles.
FTX.com no está disponible en EE. UU. y otros debido a restricciones de ubicaciónpor lo que el equipo ideó una solución.
FTX frente a FTX.US
FTX.US es el intercambio de criptomonedas regulado por los EE. UU. presentado por el equipo de FTX.com. Está construido desde cero para ser un intercambio de criptomonedas de EE. UU. líder en el mercado.
¿Deberías usar FTX?
FTX y FTX.US son dos de los mejores intercambios de criptomonedas tanto para comerciantes discrecionales como algorítmicos debido a la profundidad del libro de pedidos y la disponibilidad de activos para trade.
Esto no es una sorpresa considerando que Sam vino de Jane Street Capital, que obtuvo el primer puesto cuando encuestamos propietarios trading firmas y también cuenta con el respaldo de leyendas como Paul Tudor Jones.
Por qué no debería usar FTX
De una algorítmica trading perspectiva, el único inconveniente de usar FTX o FTX.US es que no proporciona una trading servidor de prueba
Con esto fuera del camino, vayamos al código.
Tutorial de Python de la API REST de FTX
Este tutorial tiene como objetivo enseñarle cómo usar la API FTX Rest. FTX proporciona muchos puntos finales de API diferentes, que incluyen:
- Mercados
- Futuros
- Cuenta
- Billetera
- Pedidos
- Rellenos
Le mostraré cómo interactuar con Market API. Podrá trabajar con los otros componentes de la API FTX sin sudar en aproximadamente 30 minutos.
Empecemos.
Configure su entorno de Python
Lo primero que querrás hacer es cree un entorno virtual de python y actívelo.
$ mkdir project_dir
$ cd project_dir
$ python3 -m venv venv
$ source ./venv/bin/activate
Luego usaremos pip para instalar todos los paquetes necesarios. Haré una demostración usando la API dentro de Jupyter Notebook, así que también la instalaré.
pip install -U pip
pip install notebook pandas requests ciso8601
También querremos descargar el cliente API de Python FTX. Puede hacerlo descargando el archivo sin procesar desde el Repositorio FTX GitHub o usando curl.
curl es una práctica utilidad de línea de comandos *nix que le permite transferir datos a través de varios protocolos. Significa «URL del cliente».
curl https://raw.githubusercontent.com/ftexchange/ftx/master/rest/client.py -o client.py
Vamos a crear un archivo python llamado local_settings.py para almacenar nuestra clave API. Es útil crear un diccionario para almacenar la configuración local, y puede guardar el contenido en git con git-cripta.
ftx = {
'apy_key':'',
'api_secret':''
}
Con el entorno configurado, obtengamos una clave de API gratuita. Usaré FTX.US, pero puede seguir los mismos pasos si no es residente de EE. UU. en el intercambio FTX.com.
Obtenga la clave API de FTX.US
Primero necesitarás registrarse para una cuenta.
Luego querrá ir a la configuración que se encuentra en el menú desplegable al hacer clic en su nombre de inicio de sesión y seleccionar API.
A continuación, querrá crear una clave de API. Si no va a realizar transacciones, seleccione una clave de solo lectura; de lo contrario, necesitará una clave con trading permisos Si te apetece, también puedes tener ambos.
Obtenga las importaciones requeridas
import datetime
import requests
import pandas as pd
from client import FtxClient
from local_settings import ftx as settings
Uso de la API del mercado FTX
Usar la API de Markets es fácil. La API de Markets nos permite obtener todos los datos del mercado. Recibiremos la siguiente información cuando hagamos una solicitud.FieldTypeValueDescriptionnamestringBTC-0628e.g. «BTC/USD» para contado, «BTC-PERP» para futurosbaseCurrencystringBTCmercados al contado solo cotizaciónCurrencystringUSDmercados al contado solo cotizaciónVolumen24hnúmero28914.76cambio1hnúmero0.012cambio en la última horacambio24hnúmero0.0299cambio en las últimas 24 horascambioBodnúmero0.0156cambio desde el comienzo del día (00:00 UTC)highProdemmaker1semintExemptbooleannumber0 tamaño de la orden (si >10 órdenes por hora caen por debajo de este tamaño) typestringfuture“future” o “spot”cadena subyacenteBTClos mercados futuros solo están habilitadosbooleantrueasknumber3949.25best askbidnumber3949.00best bidlastnumber3949.00último precio negociadopostOnlybooleanfalsesi el mercado está en modo post-only (todas las órdenes se modifican para ser solo posterior, además de otras configuraciones que puedan tener)pricenumber10579.52current pricepriceIncrementnumber0.25sizeIncrementnumber0.0001restrictedbooleanfalsesi el mercado tiene restricciones no estándar sobre qué jurisdicciones pueden trade itvolumeUsd24hnumber28914.76USD volumen en las últimas 24 horas
Obtenga todos los datos del mercado
Comencemos por obtener todos los mercados disponibles. Necesitamos usar la biblioteca de solicitudes para solicitar el punto final de API adecuado.
# GET /markets
api_url = 'https://ftx.us/api'
api = '/markets'
url = api_url+api
url
'https://ftx.us/api/markets'
Ahora usaremos solicitudes para obtener los datos de respuesta del mercado.
markets = requests.get(url).json()
data = markets['result']
data
{'name': 'AAVE/USD',
'enabled': True,
'postOnly': False,
'priceIncrement': 0.01,
'sizeIncrement': 0.01,
'minProvideSize': 0.01,
'last': 146.85,
'bid': 147.07,
'ask': 147.21,
'price': 147.07,
'type': 'spot',
...
Dado que el formato JSON no es tan fácil de leer, convirtámoslo en un marco de datos de pandas.
df = pd.DataFrame(data)
df = df.set_index('name')
# using iloc to make it readable
df.iloc[:,:4].head()
enabledpostOnlypriceIncrementsizeIncrement
name
AAVE/USDTrue False 0.010000 0.010
AAVE/USDTTrue False 0.010000 0.010
AUD/USDTrue False 0.000100 1.000
BAT/USDTrue False 0.000025 1.000
BCH/BTCTrue False 0.000001 0.001
Bastante fácil, ¿verdad? Esto se convertirá en una segunda naturaleza muy pronto.
Obtener datos de mercado individuales
Puede usar lo siguiente para obtener un mercado único.
# GET /markets/{market_name}
market_name = 'ETH/USD'
path = f'/markets/{market_name}'
url = api_url + path
url
'https://ftx.us/api/markets/ETH/USD'
Ahora hagamos la solicitud y emitamos la respuesta como un marco de datos.
res = requests.get(url).json()
df = pd.DataFrame(res)['result']
df
ask 2478.3
baseCurrency ETH
bid 2478.0
change1h 0.010768
change24h 0.044292
changeBod 0.017785
enabled True
highLeverageFeeExempt True
largeOrderThreshold 5000.0
last 2477.1
minProvideSize 0.001
name ETH/USD
postOnly False
price 2478.0
priceIncrement 0.1
quoteCurrency USD
quoteVolume24h 88033400.0916
restricted False
sizeIncrement 0.001
type spot
underlying None
volumeUsd24h 88033400.0916
Name: result, dtype: object
Obtener datos históricos
También puede obtener datos históricos para cualquiera de los mercados. Obtengamos los datos como barras diarias a partir de 2022.
# GET /markets/{market_name}/candles?resolution={resolution}&start_time={start_time}&end_time={end_time}
# Days is 60 seconds * 60 minutes * 24
resolution = 60*60*24
resolution
start = datetime.datetime(2022,1,1).timestamp()
start
Ahora construiremos la cadena de URL y la solicitud como lo hemos hecho anteriormente.
path = f'/markets/{market_name}/candles?resolution={resolution}&start={start}'
url = api_url + path
url
'https://ftx.us/api/markets/ETH/USD/candles?resolution=86400&start=1641013200.0'
Y pondremos los datos en el marco de datos y limpiaremos el índice.
res = requests.get(url).json()
df = pd.DataFrame(res['result'])
df['date'] = pd.to_datetime(df['startTime'])
df = df.set_index('date')
df = df.drop(columns=['startTime', 'time'])
df
open high low close volume
date
2020-03-23 00:00:00+00:00130.355 136.935 129.625 136.775 0.0
2020-03-24 00:00:00+00:00136.770 144.210 132.855 138.790 0.0
2020-03-25 00:00:00+00:00138.785 142.980 132.750 136.115 0.0
2020-03-26 00:00:00+00:00136.105 140.125 133.615 138.890 0.0
2020-03-27 00:00:00+00:00138.890 141.955 129.320 131.425 0.0
Obtener datos del libro de pedidos
También podemos obtener el libro de pedidos a diferentes profundidades. NombreTipoValorDescripciónmercado_nombrecadenaBTC-0628Requerido. Nombre del mercado. depthnumber35max 100, por defecto 20
Echemos un vistazo al libro de órdenes para ETH/USD.
# GET /markets/{market_name}/orderbook?depth={depth}
depth = 20
path = f'/markets/{market_name}/orderbook?depth={depth}'
url = api_url + path
url
'https://ftx.us/api/markets/ETH/USD/orderbook?depth=20'
res = requests.get(url).json()
bids = pd.DataFrame(res['result']['bids'])
asks = pd.DataFrame(res['result']['asks'])
bids.columns = ['Bid Price', 'Bid Amount']
asks.columns = ['Ask Price','Ask Amount']
bids.head()
Bid PriceBid Amount02475.819.02512475.30.22422475.24.40032475.01.80042474.925.617
Fusionemos los dos marcos de datos en sus índices de rango.
df = pd.merge(bids, asks, left_index=True, right_index=True)
df.head()
Bid PriceBid AmountAsk PriceAsk Amount
02475.8 19.025 2477.6 90.957
12475.3 0.224 2477.9 4.400
22475.2 4.400 2478.2 1.800
32475.0 1.800 2478.5 0.035
42474.9 25.617 2479.2 89.517
Y podemos obtener las estadísticas de resumen usando describe. Observe la profundidad como la variable de conteo.
Bid PriceBid AmountAsk PriceAsk Amount
count20.000000 20.000000 20.000000 20.000000
mean2469.810000 32.653350 2483.470000 91.586000
std5.285322 81.233445 4.152374 123.888884
min2460.500000 0.142000 2477.600000 0.018000
25%2464.675000 1.105000 2480.100000 1.944000
50%2471.650000 2.419000 2483.600000 4.700000
75%2474.600000 9.818750 2486.300000 217.624250
max2475.800000 291.635000 2490.600000 322.424000
Ahora fusionemos los dos marcos de datos y cambiemos el nombre de las columnas.
df = pd.merge(bids, asks, left_index=True, right_index=True)
df.head()
Bid PriceBid AmountAsk PriceAsk Amount
02475.8 19.025 2477.6 90.957
12475.3 0.224 2477.9 4.400
22475.2 4.400 2478.2 1.800
32475.0 1.800 2478.5 0.035
42474.9 25.617 2479.2 89.517
Obtener operaciones
Obtener las transacciones recientes de cualquier mercado también es fácil.
# GET /markets/{market_name}/trades
path = f'/markets/{market_name}/trades'
url = api_url + path
url
'https://ftx.us/api/markets/ETH/USD/trades'
res = requests.get(url).json()
df = pd.DataFrame(res['result'])
df.head()
id price size side liquidation time
0231386382481.70.044 buy False 2022-01-28T20:34:04.660049+00:00
1231386322480.818.422 buy False 2022-01-28T20:34:00.089735+00:00
2231386252481.80.026 buy False 2022-01-28T20:33:59.123590+00:00
3231386242481.80.018 buy False 2022-01-28T20:33:59.123590+00:00
4231385252481.74.400 sell False 2022-01-28T20:33:22.179278+00:00
Trabajar con futuros FTX
Ahora que ha aprendido a usar la API de Mercados, usar la API de Futuros es igual de fácil. Te ayudaré a empezar. Una cosa a tener en cuenta es que los futuros no están disponibles a través de la API de ftx.us.
Primero, echa un vistazo a la documentación de la API de futuros. Notará que necesitamos hacer una solicitud de obtención a /futuros. Vamos a crear la URL de la solicitud y usar las solicitudes para obtener los datos.
url = 'https://ftx.com/api/futures'
res = requests.get(url).json()
res
'éxito': Verdadero, 'resultado': [{'name': '1INCH-PERP',
'underlying': '1INCH',
'description': '1INCH Token Perpetual Futures',
'type': 'perpetual',
'expiry': None,
'perpetual': True,
'expired': False,
...
df = pd.DataFrame(res['result']) df.cabeza()
df = pd.DataFrame(res['result'])
# Using iloc to make it readable
df.iloc[:,:4].head()
name underlying description type
01INCH-PERP1INCH1INCH Token Perpetual Futures perpetual
11INCH-03251INCH1INCH Token March 2022 Futures future
2AAPL-0325AAPLApple March 2022 Futures future
3AAVE-PERPAAVEAave Perpetual Futures perpetual
4AAVE-0325AAVEAave March 2022 Futures future
La línea de fondo
FTX y su contraparte estadounidense FTX.US son dos de los mejores intercambios en el espacio criptográfico. Si estás interesado en algo trading o simplemente buscando una excelente fuente de datos, FTX tiene una API REST fácil de usar para brindarle lo que necesita.