API REST FTX: un tutorial completo de Python (2022)

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.

Deja un comentario