Crypto Quant: comercio programático de BTC usando Binance y Backtrader — Parte 2 de 3 Inteligencia de datos de PlatoBlockchain. Búsqueda vertical. Ai.

Crypto Quant: comercio programático de BTC usando Binance y Backtrader - Parte 2 de 3


Crypto Quant: comercio programático de BTC usando Binance y Backtrader — Parte 2 de 3 Inteligencia de datos de PlatoBlockchain. Búsqueda vertical. Ai.

En esta parte wquiero instalar retrotrader y realice una prueba retrospectiva de algunos modelos comerciales con los datos de Binance que recopilamos en la sección anterior.

Hay numerosos artículos y videos sobre Backtrader y su configuración. Esta popular biblioteca de Python facilita el trabajo cuantitativo de backtesting de estrategias comerciales con datos históricos, respondiendo a la pregunta por excelencia "¿Qué tan rentable habría sido operar utilizando estrategias de COMPRA / VENTA dadas?". Esto se siente como una alquimia matemática al principio, pero hay que recordar que los datos históricos son, bueno, ¡históricos! Es poco probable que una estrategia comercial que funcionó ayer funcione hoy ... pero volveremos a eso en breve.

Las instrucciones de instalación de Backtrader ('bt') son esta página. Nota: hay problemas conocidos con las versiones de mapplotlib anteriores a la 3.2.0, así que tenga cuidado con eso.

Vale la pena leer la guía de inicio rápido, encuéntrela esta página.

RSI

Lo que intentaremos con Backtrader aquí es backtesting RSI (Indicador de fuerza relativa) estrategia comercial sobre datos criptográficos históricos (para BTC) de principios de año.

Se explica el indicador de impulso RSI esta página. Mide las condiciones relativas de sobreventa y sobrecompra para un activo comercial dado y un parámetro de 'período' que es el número de ticks (intervalos comerciales) hacia atrás.

El parámetro de período tiene un valor predeterminado de 14, por lo que si el intervalo es de minutos, la fórmula incluirá 14 tics de intervalo de datos. Como exploraremos a continuación, cada indicador técnico tiene parámetros que son nuestra forma de "ajustarnos" a las condiciones del mercado; estos parámetros tienen un gran impacto en la rentabilidad de cualquier indicador dentro de una estrategia.

Backtest.py

Nuestra configuración de backtest: backtest.py está compartido esta página. Esto proporcionará la estructura de backtest para nuestra ejecución de backtest, que se definirá a continuación. Esta es una configuración 'bt' bastante estándar. Repasemos parte de este código, Tenga en cuenta que hay muchos ejemplos y tutoriales en video en línea sobre el backtest de Python para aprender de.

Aquí, en la definición de clase, establecemos parámetros para nuestra estrategia RSI.

  • verboso: si queremos generar datos de registro durante el backtest
  • maperíodo: período de promedio móvil, el número de tics a considerar
  • la cantidad: el número de acciones para comprar / vender
  • superior: el umbral superior del indicador de sobrecompra
  • inferior: el umbral inferior del indicador de sobreventa
  • detener la pérdida de: la configuración de stop loss para vender

La siguiente() La función en una clase de estrategia Backtrader es lo que sucede después de cada 'tick' de intervalo de datos. Aquí está comprar () o vender () según los datos, en este caso el indicador RSI y nuestros umbrales.

Aquí definimos el runbacktest () función que será llamada por nuestro código. La función de estrategia RSI antes mencionada se agrega a la cerebro ejemplo.

Todo lo de Backtrader bastante estándar. Veamos cómo ejecutar esto contra nuestros datos.

Backtesting de nuestros datos

Asegúrese de obtener los datos (utilizando los pasos de la última sección) del 1 de enero al 2 de enero de 2021, estos estarán en un archivo llamado: BTCUSDT-20210101–20210102–1m.csv con 1440 líneas CSV, una por cada minuto del día.

Aquí es el código y la salida para este día de negociación minuto a minuto para Bitcoin (BTC):

Echando un vistazo más de cerca:

Los parámetros son simples, queremos analizar un día de negociación, utilizando el indicador RSI con un período de 12 ticks, sin stop-loss y límites predeterminados de 70,30 para los disparadores de sobrecompra y sobreventa.

Resultados del 1 de enero de bt con la estrategia estándar del indicador RSI

La última línea de salida resume los resultados de este backtest:

/BTCUSDT-20210101-20210102-1m.csv, RSI (Pd 12) (SL 0.0%) (U70 L30) Neto $ 777.78 (0.78%) WL 18/7 SQN 1.76

Período RSI 12, 0 (No) stop-loss, (U) límite de pper de 70 (L) límite de ower de 30, ganancia neta (en un día) de $ 777.78 con 18 operaciones ganadoras y 7 operaciones perdedoras.

La última cifra es SQN, un 'Número de calidad del sistema' (SQN) que está diseñado para ayudar a los comerciantes a determinar las fortalezas, la conveniencia y la calidad de un sistema comercial. Una estrategia de buena calidad se considera negociable y eficiente. *

Los siguientes valores de SQN sugieren las siguientes "cualidades":

  • 1.6–1.9 Inferior al promedio
  • 2.0–2.4 Promedio
  • 2.5–2.9 Bueno
  • 3.0–5.0 Excelente
  • 5.1–6.9 Excelente
  • 7.0 - Santo Grial

La fórmula SQN:

SquareRoot (NumberTrades) * Promedio (TradesProfit) / StdDev (TradesProfit)

Normalmente insistiríamos en al menos 30 operaciones para que esta métrica sea estadísticamente significativa, pero lo ignoraremos por ahora, ya que estamos probando nuestro backtest en un corto período de tiempo.

Puede hacer zoom en secciones del gráfico, por ejemplo:

Aquí vemos una señal de compra (flecha verde hacia arriba) cuando el valor del RSI cae por debajo de 30 y luego una señal de venta rentable y un marcador de ganancias (círculo azul) cuando el RSI llega por encima de 70. Vea los valores de RSI en la esquina inferior derecha .

La ganancia (en un día) de $ 777.78 con 18 operaciones ganadoras y 7 operaciones perdedoras es bastante buena, en particular para un día de operaciones de acción relativamente superficial (+ 1.42%). ¡Imagínese lo que podríamos lograr en un día alcista con un gran volumen!

Parámetros del modelo

Ejecuta get_data para diferentes días y los analiza por separado. Observe cómo los diferentes parámetros del RSI tienen un impacto en la rentabilidad de un día para otro.

Por ejemplo, el mismo día de negociación de BTC pero con un período de RSI de 20 en lugar de 12, ganancia-pérdida de 2/3 y un beneficio neto de - $ 21.51 (incluidas las tarifas comerciales). ¡Esa es una gran diferencia con el último backtest!

También puede experimentar con diferentes límites RSI (distintos del predeterminado 70/30) y parámetros de stop-loss. Stop Loss es una orden de venta automática una vez que el precio desciende por debajo de algún nivel en relación con la orden de compra ejecutada. Como su nombre lo indica, esto puede servir para "detener una pérdida" después de situarse en una posición de volatilidad.

Stop-Loss

La forma en que configuramos el stop-loss aquí es la siguiente:

  • 0 : sin configuración de stop-loss, espere a que el indicador active una orden de venta
  • 0.00x : stop-loss a un% del valor por debajo del precio de compra, 0.001 es 0.1% por debajo
  • -0.0x: el stop loss dinámico seguirá la operación a medida que sube el precio, 0.01 es un stop loss dinámico 1% por debajo del precio de compra

Este stop-loss es un parámetro importante para cada operación y puede tener una importancia significativa, como era de esperar, en el rendimiento. Para obtener más información sobre las estrategias de stop-loss, consulte esta página.

Aquí en nuestro backtest.py es donde configuramos esto usando backtrader:

Aquí está la misma ejecución que acabamos de analizar, pero con un stop-loss de seguimiento del 0.1%.

Ganancia neta de $ 383.67 con 12 victorias y 12 derrotas, mucho mejor que la pérdida que teníamos antes. Puede ver en el gráfico que el stop-loss de seguimiento protegió a muchas de las operaciones de caer en pérdidas como indicador que espera una señal de venta (sobrecompra).

Dentro de un solo indicador, en esta configuración, tenemos muchas permutaciones posibles diferentes:

  • un rango de período entre 10 y 30 intervalos (20 variantes)
  • una configuración de stop-loss (imaginemos 5 variantes prácticas diferentes)
  • un umbral de sobrecompra / sobreventa (imaginemos 5 variantes por ahora)

Eso sería 20x5x5, o 500 variaciones diferentes para cada día. Examinarlos uno por uno a mano sería ridículo y, sin embargo, queremos saber qué parámetros fueron más rentables y de mayor calidad comercial y cuáles no.

¡Alquimia cuántica!

Esto nos lleva a nuestro siguiente paso en esta exploración de Crypto Quant. Podemos determinar mediante la fuerza bruta los parámetros de la estrategia comercial más rentable y de la más alta calidad para un período determinado de negociación y luego ver cómo se llevan adelante.

Source: https://medium.com/@gk_/crypto-quant-programmatic-trading-of-btc-using-binance-and-backtrader-part-2-of-3-d8af44c93e2b?source=rss——-8—————–cryptocurrency

Sello de tiempo:

Mas de Medio