¿Dónde puedo encontrar datos de Crypto Coin?

Estoy buscando fuentes de datos de criptomonedas, preferiblemente históricas, que pueda usar para realizar pruebas retrospectivas de mis bots y/o analizar el mercado.

¿Hay una fuente confiable para esto en línea? ¿Los intercambios ofrecen datos históricos por casualidad?

Si no, ¿cómo hago para adquirir estos datos?

Respuestas (6)

Adquisición de datos

Tienes dos opciones aquí:

  1. Echa un vistazo a uno de los proveedores de datos en línea . Quandl ofrece (principalmente) datos históricos gratuitos para una variedad de pares e intercambios. Alternativamente, si tiene dinero de sobra, Coinigy ofrece conjuntos de datos de alta calidad en un modelo de precios por mes.
  2. Haga rodar su propio rastreador de datos , utilizando un lenguaje de programación de su elección y las diversas API disponibles para los intercambios.

Discutiré las dos opciones más abajo.


Adquisición de datos de un proveedor de datos

Obviamente, esta opción es la más conveniente, aunque también posiblemente la más costosa, dependiendo de la calidad requerida de los datos. tampoco hay garantía de que el intercambio, par y/o rango de tiempo que está buscando esté presente en la base de datos.

Para resumir:

Pro:

  • Menos tiempo
  • Es probable que los datos sean limpiados y formateados
  • Muchos proveedores de datos ofrecen un diseño unificado de datos en varios conjuntos de datos, lo que facilita compararlos.

Contras:

  • Los datos pagados son caros para los aficionados (los datos del mercado en coinigy están a 30 $ / mes, al momento de escribir este artículo)
  • Los datos gratuitos a menudo se proporcionan tal cual, dejándolo con tareas de limpieza y posprocesamiento
  • Si se limpian los datos, pueden ocurrir artefactos sin que usted lo sepa, lo que afecta los resultados de su investigación.

Lanzamiento de su propio rastreador de datos

Con solo un poco de experiencia en programación y una comprensión básica de cómo funciona una API, puede configurar rápidamente su propia herramienta de adquisición de datos. Hay varios grados de dificultad, por supuesto, pero en el fondo, el asunto es bastante simple:

  1. Elija un intercambio
  2. Elija una API
  3. Engánchese a la API usando la magia del código
  4. Empezar a descargar datos

Lo guiaré a través de los pasos necesarios (sin el código; siento que este es un tema para otro StackExchange; sin embargo, lo vincularé a bibliotecas que lo ayudarán a comenzar).

1. Elija un intercambio

Supongo que ha investigado y, por lo tanto, solo señalará algunas cosas al considerar los intercambios para los que desea obtener datos:

  • Asegúrese de que tengan servidores y conexiones estables (los intercambios en Asia, a los que se accede desde, por ejemplo, Europa, tienen conexiones notoriamente inestables). De lo contrario, tendrá baches en todos sus datos, tal vez incluso dejándolos inútiles.
    • si necesita absolutamente los datos, considere alquilar un servidor más cerca de la ubicación física del centro del servidor de intercambio.
  • Asegúrese de que tengan un volumen significativo . Si solo hay un pequeño volumen que cambia de propietario en el transcurso de un período de tiempo determinado (por lo general, la métrica de volumen de 24 horas siempre está disponible), es probable que el intercambio no sea una muy buena opción. Sesga la imagen del mercado.
  • Pruebe primero su atención al cliente . Si necesita su ayuda algún tiempo después durante el rastreo, un excelente personal de soporte puede marcar la diferencia. Además, le da una pequeña indicación de la calidad de la infraestructura de intercambio.

2. Elija unAPI

Elegir la interfaz de programación de aplicaciones adecuada ( API) depende de 2 cosas:

  1. Cuán granular necesita que sean sus datos,

y

  1. lo que APIel intercambio tiene para ofrecer (obviamente).

REST APIs

Si está de acuerdo con, digamos, instantáneas de datos de 1 minuto (es decir, teletipos, libros de pedidos, transacciones, etc.), solicitar datos a través de una API de transferencia de estado representacional (REST) ​​es suficiente. Esto le permite enviar una httpsolicitud a una URL específica y recibir una respuesta que contiene los datos solicitados (generalmente en JSONformato -).

Lo conveniente de las RESTAPI es que funcionan casi igual en todos los intercambios: se envían solicitudes, se reciben respuestas y usted evalúa los datos. Algunos intercambios requieren que utilice diferentes métodos de solicitud (como ) en lugar de las solicitudes POSThabituales ; GETsin embargo, esto generalmente solo se requiere para puntos finales privados (privado significa que primero debe autenticarse, antes de recibir datos como el saldo de su cuenta, etc.), por lo que si solo busca datos de mercado, no debería encontrarlos a menudo.

Una limitación de las RESTAPI es que suelen tener un límite de solicitudes. El límite más común es 60 requests per minute, pero puede ser más estricto (o más flexible: Bitfinex permite un número ilimitado requestspor minuto). Algunos intercambios también emplean un contador de solicitudes, lo que significa que ciertas solicitudes aumentan su IPcontador conectado en un cierto valor. Dependiendo de su estado con el intercambio, este contador disminuye con el tiempo en un valor predeterminado.

Además de esto (si está pensando 'Bueno, ¡oye! ¿Por qué no obtener datos cada segundo entonces?'), Los datos de mercado a menudo se almacenan en caché. Se almacena una instantánea de un punto final de API durante un intervalo establecido, antes de actualizarse en el lado del servidor. Por lo tanto, puede enviar una solicitud cada segundo y, no obstante, recibir datos idénticos hasta que se actualice la memoria caché del servidor.

WS APIs

Las API de WebSocket ( WS) y WebSocketSecure ( WSS) son conexiones full-duplex, que permiten al usuario recibir actualizaciones casi en tiempo real de uno o varios APIpuntos finales a los que se ha suscrito. Full-duplex simplemente significa que no solo puede recibir, sino también enviar datos a la WebSocketconexión. Esto es especialmente útil cuando se ejecuta un bot que se supone que comerciará en su nombre, ya que la retroalimentación suele ser más rápida.

En principio, abre una conexión a la WSAPI y se suscribe a los puntos finales sobre los que desea obtener datos. Por lo general, esto está separado por punto final y par, pero asegúrese de consultar la APIdocumentación: algunos intercambios no emplean un channel subscriptionmodelo y los datos llegan sin configuración adicional.

La implementación de WebSockets varía de trivial a compleja, así que espere investigar un poco sobre cómo acceder a algunas de las WSAPI de los intercambios. Si bien el sistema principal sigue siendo idéntico en todos ellos, muchos intercambios usan diferentes protocolos y/o servicios para proporcionar sus datos, por ejemplo, el WAMPprotocolo y Pusher, que agregan una capa adicional de complejidad, ya que requieren un cliente específico para conectarse.

Sin embargo, si necesita datos paso a paso, como para la creación de un libro de pedidos en tiempo real, esto es lo que desea.

FIX APIs

El Protocolo Financial Information eXchange( ) es un estándar que comenzó en 1992 y ahora es comúnmente utilizado por instituciones y corredores en los mercados financieros. Es, con mucho, el menos disponible en los intercambios, y aún menos envían datos de mercado. Se usa más comúnmente para realizar o cancelar pedidos (por ejemplo, en CoinbasePro ). Sin embargo, algunos intercambios ofrecen datos de mercado en tiempo real a través de FIX.FIXAPI

Tenga en cuenta que necesitará un amplio conocimiento del protocolo FIX, como configurar un motor FIX y proxies para conectarse al intercambio. Esto puede, en algunos casos , incurrir en cargos mensuales recurrentes.

3. Conéctese a la API usando el código

Según la API que elija, así como el lenguaje de programación que pretenda utilizar, tiene una amplia variedad de opciones.

Muchos intercambios proporcionan bibliotecas de clientes para sus API, algunas desarrolladas por el propio equipo de desarrollo del intercambio, otras son aportadas por los usuarios (que generalmente son revisadas por el equipo de desarrolladores antes de ser citadas en el sitio web del intercambio).

Existen muchas otras bibliotecas, probablemente para cualquier idioma (por ejemplo , BitEx para Python 3.x (para permitirse una autopromoción desvergonzada), que unifica los métodos centrales en una variedad de REST APIs, así como algunos WebSocket APIs) .

Siendo yo mismo un desarrollador de Python, solo puedo recomendar su uso. Especialmente si no estás atado a un entorno. Usando la requestsbiblioteca, por ejemplo, puede consultar un intercambio con facilidad:

import requests

# Get a list of all asset pairs at Kraken.com 
print(requests.get('https://api.kraken.com/0/public/AssetPairs').json())

4.Empieza a descargar datos

Una vez que haya configurado sus rastreadores de datos, ¡debe liberarlos! Personalmente ejecuto el rastreador REST a través cronde trabajos y Websocketrastreadores como daemons. Pero esto depende de ti.

Por supuesto, tomará algún tiempo adquirir un conjunto significativo de datos, pero, por desgracia, paga con dinero o con tiempo por los datos que desea.

Enlaces útiles

Referencias de API

Fuentes de datos

¡Siéntase libre de agregar, corregir o actualizar cualquiera de este contenido en los comentarios a continuación! Gracias.

votado! alguna sugerencia sobre cómo abordar los clientes de websocket en python si desea obtener datos en tiempo real de, por ejemplo, una o más de estas API. Soy un novato y estoy bastante abrumado con las opciones disponibles 1) tornado 2) twisted asyncio 3) asyncio 4) socket_io client 5) gevent 6) eventlet 7) subprocesos con bucles de eventos por subproceso, ¿cuál sería la forma correcta de decir buscar flujos? de varias fuentes para su aplicación de frasco, ya estoy usando apio, ¡gracias por la respuesta de antemano!
Depende un poco de la API y del protocolo que use (pusher, pure wss, WAMP, etc.) pero, en general, opté por lo que era más fácil para comenzar. He usado la biblioteca websocket-client la mayor parte del tiempo, ya que hace el trabajo lo suficientemente bien para mí. Cada uno de los clientes se ejecuta en un proceso separado y reúno todo usando ZMQ. En cuanto a lo que deberías elegir: ¿tirar un dado? :D son todas buenas opciones.
gracias por la información detallada :) ¿el cliente javascript socket io abstrae los detalles subyacentes de wamp pusher y pure wss porque juro que hoy es la primera vez que los escucho, especialmente cuando trato de hacer cosas con python, si no es demasiado para pregunte, ¿hay alguna referencia a este código en línea del que está hablando que usa múltiples procesos y zmq, horas en github buscando bajo la etiqueta socketio o la etiqueta websocket no ha arrojado nada positivo, hay algunos clientes socketio en python en cuanto a investigué y no estoy seguro de si están probados en batalla, gracias
Como no he usado socket.io, no lo sé, pero en principio, WSS y pusher son solo protocolos, todavía se ejecutan a través de websockets, pero requieren un procedimiento específico al interactuar con la API. github.com/Crypto-toolbox/Thoth tiene un empujador y un cliente WSS y usa zmq para ofrecer los datos. Sin embargo, por lo general, hay algunas bibliotecas vinculadas en el sitio de documentación de API del intercambio respectivo que ofrecen clientes que funcionan.
¡Gracias por compartir el enlace! a partir de ahora estoy considerando obtener los datos en node.js ya que el cliente socket io en el nodo es oficial y mucho más probado en batalla que los de python, aunque podría estar equivocado, mi idea era redis pub sub los datos pero fuera de pura curiosidad, ¿cómo se acumulan los datos de los flujos? Supongo que las escrituras en el disco significarían mucha latencia, redis tomaría, digamos, 200 ms en sí mismo y cómo aborda el caso en el que, digamos, el zócalo se desconectó durante unos minutos bajo una carga pesada.
Me conecto al WSS y uso ZMQ con un patrón Pub/Sub, donde los suscriptores tienen un balanceador de carga (varios trabajadores para manejar las transmisiones entrantes). Escribo datos en el disco, pero lo hago en un intervalo definido por 400 Kib almacenados en caché o 5 minutos transcurridos desde la última escritura, lo que suceda primero. No me importan las desconexiones: si faltan datos, no hay nada que pueda hacer al respecto de todos modos, aunque hasta ahora no he tenido el caso de que mi enchufe se haya desconectado debido a una gran carga, ya que todo lo que hace es retransmitirlo.
¡Ojalá pudiera votar estos comentarios más de una vez! cuando dice trabajadores, asumo trabajadores de tipo apio que son capaces de reiniciarse automáticamente, etc., ¿qué idioma prefiere personalmente para obtener los datos del socket (nodo, python)? Python parece ser más que capaz de procesar los datos con pandas y demás pero parece un poco limitado cuando se trata de aceptar secuencias de clientes de socket, tal vez me equivoque
Sí, puedes compararlos con los trabajadores del apio. Y uso python; en última instancia, sin embargo, realmente no importa. ZMQ es prácticamente independiente del idioma y tiene contenedores para todo tipo de idiomas; me quedé con Python principalmente porque trabajo con él a diario.

Puede descargar los datos históricos de coinmarketcap.com con mi rastreador desarrollado: https://github.com/roNn23/coinmarketcap-historical-data-crawler . Pero solo obtiene las instantáneas de coinmarketcap.com , tal vez sea demasiado amplio para sus necesidades.

Puede usar mi sitio web www.cryptodatasets.com que proporciona exactamente lo que necesita. tick a tick precios históricos de BTC, ETH y LTC y volumen de Bitfinex y Hitbtc. Es exactamente lo que uso para probar mis estrategias/bots.

¡ordenado! ¿Planea ampliar los intercambios disponibles?
¡Absolutamente, trabajando en ello en mi tiempo libre!

Simplemente abra un sitio web cryptoarchive.com.au con los conjuntos de datos que uso para mi propio modelado. Los datos OHLVC de un minuto están disponibles de forma gratuita, a nivel de ticks, a un precio muy razonable. Datos de Binance por ahora.

Para obtener datos históricos sobre los tipos de cambio y los volúmenes de criptografía, puede consultar:

Esta respuesta no agrega información nueva, desafortunadamente.

Si está buscando especialmente la calidad de los datos, Coinscious tiene los datos más precisos . Ofrecen datos de mercado históricos y en tiempo real a través de archivos planos o acceso API. Su terminal también tiene buenos análisis técnicos en diferentes monedas, intercambios e indicadores.