Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Estrategia BackTest de la ruptura del canal de precios en Python
Estrategia BackTest de la ruptura del canal de precios en Python
Hola y bienvenidos de nuevo a mi canal. En el video de hoy, nos enfocaremos en desarrollar y probar una estrategia basada en desgloses de canales de precios. Si es nuevo aquí, le recomiendo ver nuestro episodio anterior donde presenté y expliqué el código para nuestro indicador de canal de precios personalizado basado en Python. Dejaré un enlace en la descripción a continuación. Ahora, profundicemos en el tema de hoy y realicemos la parte de backtesting.
En el video anterior, presentamos el código para detectar canales de precios. En resumen, detectamos los fractales, que son los puntos altos y bajos de las velas. Un fractal es un punto en la vela que está más alto o más bajo que todas las velas vecinas al mismo tiempo. Detectamos diferentes fractales, tanto máximos como mínimos, y los ajustamos en pendientes mediante regresión. Estas pendientes representan el canal que define el canal de precios. Luego tratamos de detectar rupturas cuando el precio sale de este canal, asumiendo que el precio continuará en la misma dirección.
Visualmente, el indicador parece funcionar bien, pero tenemos curiosidad por ver cómo se comporta en una estrategia a largo plazo. Es por eso que estamos realizando el backtesting completo hoy. Usaremos Python para el backtest, y puede descargar el código desde el enlace en la descripción.
Para comenzar, cargamos nuestros datos, tomando datos de 10 a 20 años de 2003 a 2023, que es lo que también usamos en el último video. Establecemos el número de velas traseras en 45, que es la ventana sobre la que detectaremos los fractales (altos y bajos) y definiremos nuestro canal.
Tenemos una función llamada is_pivot que detecta si una vela es un punto pivote o un punto fractal. Toma dos parámetros: el índice de la vela y el tamaño de la ventana. Comprueba si la vela es más alta o más baja que todos los máximos o mínimos de las velas vecinas dentro de la ventana especificada. Devuelve un valor basado en el tipo de pivote: 1 para un pivote alto, 2 para un pivote bajo, 3 para ambos y 0 para otros casos. Aplicamos esta función a cada vela en nuestro marco de datos y guardamos los resultados en una nueva columna llamada "is_pivot".
A continuación, necesitamos recopilar los canales o detectar los canales. Miramos las 45 velas antes de la vela actual y buscamos fractales altos y bajos. Si tenemos al menos tres máximos y tres mínimos, los ajustamos mediante regresión lineal y devolvemos los parámetros de las pendientes. De lo contrario, devolvemos ceros. Aplicamos esta función al marco de datos utilizando el tamaño de ventana especificado y los resultados se guardan en una nueva columna llamada "canal".
También tenemos una función llamada is_breakout que detecta rupturas fuera del canal de precios. Para cada vela, verificamos si el máximo de la vela anterior está dentro del canal y si el precio de cierre de la vela anterior está por debajo del mínimo del canal. Si se cumplen ambas condiciones, y los precios de apertura y cierre de la vela actual también están fuera del canal, devolvemos una señal: 1 para una señal de tendencia bajista, 2 para una señal de tendencia alcista y 0 para otros casos. Ejecutamos esta función sobre todas las velas y guardamos los resultados en una nueva columna llamada "is_breakout".
Ahora que tenemos las señales de ruptura, podemos proceder con el backtesting. Usamos la Biblioteca de Backtesting como de costumbre, con un tamaño de lote inicial del 10% del capital. Definimos una relación de toma de ganancias a stop loss y establecemos los niveles de stop loss y toma de ganancias en función de la señal. Por ejemplo, si la señal es 2 (tendencia alcista) y no hay operaciones abiertas, establecemos el stop loss en el mínimo de la vela anterior y el take profit en un múltiplo del rango verdadero promedio (ATR).
Iteramos sobre cada vela en el marco de datos y verificamos si hay una señal de ruptura. Si hay una señal y no hay operaciones abiertas actualmente, ingresamos una nueva operación basada en la señal. Calculamos el tamaño de la operación en función del tamaño del lote y el capital disponible.
Una vez que se abre una operación, hacemos un seguimiento de su progreso. Actualizamos los niveles de stop loss y take profit a medida que el precio se mueve a nuestro favor. Si el precio alcanza el nivel de stop loss o take profit, cerramos la operación y registramos el resultado.
Finalmente, calculamos e imprimimos las métricas de rendimiento general, incluido el número total de operaciones, el porcentaje de operaciones ganadoras, el rendimiento promedio por operación y el rendimiento general del capital.
Aquí hay una explicación paso a paso de la estrategia de ruptura del canal de precios sin el código:
La implementación de esta estrategia en el código le permitirá realizar una prueba retrospectiva en datos históricos y analizar su rendimiento. El código proporcionado anteriormente demuestra la implementación de la estrategia utilizando la biblioteca Backtesting en Python.
Indicador de ruptura de canal en Python
Indicador de ruptura de canal en Python
¡Hola! Hoy vamos a profundizar en ejemplos de desglose de canales de precios generados por un algoritmo. Más adelante, le mostraré el código, que puede descargar de forma gratuita desde el enlace en la descripción a continuación. Comencemos por comprender qué es la ruptura del canal de precios.
El desglose del canal de precios es una herramienta de análisis técnico utilizada por los comerciantes para identificar posibles desgloses en el precio. Funciona trazando un canal alrededor de la acción del precio, que representa los puntos altos y bajos del precio durante un período específico. Cuando el precio sale de este canal, puede indicar un posible cambio de tendencia o una oportunidad de mercado.
La parte interesante es que podemos automatizar el proceso de identificación de canales y rupturas potenciales usando Python. En este video, lo guiaré a través de los pasos del algoritmo y le proporcionaré el código, lo que le permitirá modificarlo y ajustarlo de acuerdo con sus preferencias comerciales y el activo en el que lo usará.
Analicemos los ejemplos que se muestran en el gráfico. Las estrellas negras representan los brotes detectados por el algoritmo. Las estrellas debajo de las velas indican una futura tendencia alcista, mientras que las estrellas sobre las velas indican una futura tendencia bajista. Estos desgloses se basan en canales identificados por el algoritmo.
Para explicar el algoritmo, consideremos el primer ejemplo. Tenemos una tendencia bajista, seguida de una ruptura por debajo de cierto canal. La estrella debajo de la vela indica una futura tendencia bajista. Es importante tener en cuenta que este canal en particular es diferente del que se muestra en el gráfico. El algoritmo detecta canales basándose en velas anteriores.
Otro ejemplo es una ruptura por encima de un canal, lo que indica una futura tendencia alcista. Podemos observar estas rupturas y su relación con los canales detectados por el algoritmo. El algoritmo utiliza tres puntos de detección: puntos de pivote, detección de canales y detección de rupturas.
Primero, detecta puntos de pivote, que son velas con valores altos en comparación con las velas vecinas o valores bajos en comparación con las velas vecinas. El algoritmo busca dos velas en cada lado como máximos o mínimos de pivote. Estos puntos de pivote sirven como puntos de referencia para ajustar líneas para definir canales.
A continuación, el algoritmo ajusta las líneas a los máximos y mínimos del pivote, creando el canal. Este paso identifica los límites superior e inferior del canal. El canal representa el rango potencial de movimiento de precios.
La tercera fase es la detección de rupturas. El algoritmo determina si se ha producido una ruptura comparando la vela actual con el canal. La condición de ruptura se define en función de la posición de los precios de apertura y cierre en relación con el canal. En este video, consideramos las rupturas por encima y por debajo del canal.
En Python, tiene la flexibilidad de modificar las condiciones de ruptura y definir sus propios patrones en función de sus preferencias comerciales y el activo que está operando. El código proporcionado en el enlace servirá como punto de partida para su experimentación.
El algoritmo parece funcionar bien según los ejemplos que se muestran utilizando el marco de tiempo diario y los precios del euro/dólar estadounidense. Sin embargo, se requieren más pruebas y análisis. Ahora, profundicemos en el código.
En el archivo de Jupyter Notebook, importamos las bibliotecas necesarias: pandas, numpy, plotly y scipy.stats. También importamos un archivo de datos CSV que contiene los precios diarios de las velas japonesas en euros y dólares estadounidenses de 2003 a 2023.
El código comienza definiendo una función para detectar si una vela es un punto de pivote. Se necesitan dos argumentos: el índice de la vela a probar y el parámetro de la ventana, que determina el número de velas vecinas a considerar. La función comprueba si el máximo y el mínimo de la vela actual son más altos o más bajos que los máximos y mínimos de las velas vecinas. Asigna etiquetas (0, 1, 2 o 3) según el tipo de pivote (alto, bajo o ambos).
Para detectar desgloses de canales de precios en un gráfico de velas japonesas, puede seguir estos pasos:
La idea general es identificar las líneas de tendencia que abarcan los movimientos de precios dentro del número especificado de velas traseras. Al detectar rupturas de estos canales, puede identificar potencialmente movimientos de precios significativos y tomar decisiones comerciales informadas.
Es importante tener en cuenta que el código proporcionado anteriormente es un ejemplo simplificado y, según sus requisitos comerciales específicos, es posible que deba modificar y ajustar el código para que se adapte a sus necesidades. Además, considere incorporar estrategias de gestión de riesgos, otros indicadores y factores relevantes para su enfoque comercial cuando utilice técnicas de ruptura de canales para fines comerciales reales.
Desafío de estrategia comercial de ChatGPT
Desafío de estrategia comercial de ChatGPT
Hola y bienvenidos a nuestro último experimento. En este video, mostraré el poder de la IA comparándola con la experiencia de un comerciante humano real. Profundizaremos en la estrategia de ruptura del canal de precios y desafiaremos nuestro modelo de IA, ChatGPT, para ver cómo funciona. Si descubrimos algo interesante, escribiré mi propio algoritmo en el siguiente video y compararé los resultados de rendimiento. Más adelante, también compartiré el código de Python que usaré en este video. Puede descargarlo desde el enlace en la descripción a continuación si tiene curiosidad y está dispuesto a experimentar y ampliar nuestra estrategia. Entonces, siéntate, relájate y disfrutemos esto.
Cuando hablamos de indicadores de ruptura de canales, generalmente consideramos patrones de gráficos de velas japonesas y puntos fractales. La ruptura generalmente ocurre cuando el precio se mueve más allá de un canal y, después de la ruptura, esperamos que la tendencia continúe en la misma dirección, al menos por un tiempo. Hoy intentaremos hacer que ChatGPT genere el código para nosotros, específicamente para la estrategia de ruptura del canal de precios.
Antes de sumergirnos en nuestro experimento con ChatGPT, voy a programar la misma estrategia, la ruptura del canal de precios, a mi manera en el próximo video. Esto nos permitirá comparar los resultados y resaltar el control que tenemos sobre cada detalle de nuestro programa. Entonces, estad atentos y comencemos.
Ahora, comencemos definiendo la estrategia de ruptura de precios. Este enfoque comercial implica identificar niveles clave de soporte y resistencia utilizando herramientas de análisis técnico como líneas de tendencia y patrones de gráficos. Preste mucha atención a los niveles que se han probado varias veces en el pasado y observe la acción del precio en esos niveles. Una vez que hemos identificado los niveles clave, podemos establecer reglas de entrada y salida.
Establecer reglas de entrada y salida es la parte más desafiante de la estrategia. Implica decidir a qué nivel de precio ingresará en una operación y cuándo saldrá para obtener ganancias o limitar pérdidas potenciales. El seguimiento de los movimientos de precios del activo es crucial una vez que abrimos una posición. Deberíamos usar órdenes de stop loss para limitar las pérdidas potenciales en caso de que la operación vaya en nuestra contra.
Después de configurar las reglas de entrada y administrar la operación, necesitamos monitorear las operaciones abiertas. Si el precio continúa moviéndose en la dirección esperada, podemos considerar ajustar nuestra estrategia de salida para capturar ganancias adicionales. Esto requiere un seguimiento y una adaptación continuos en función de las condiciones cambiantes del mercado.
Aquí hay un desglose de la estrategia:
Identifique niveles clave de soporte y resistencia: use herramientas de análisis técnico como líneas de tendencia y patrones de gráficos para identificar niveles que se han probado varias veces en el pasado. Estos niveles actúan como soporte o resistencia y forman los canales.
Defina el nivel de ruptura: una vez que haya identificado los canales, determine el nivel de ruptura. Este es el nivel de precio en el que el precio se mueve más allá de los límites del canal. Indica una posible continuación de la tendencia.
Establezca reglas de entrada y salida: determine los criterios para ingresar a una operación cuando se produce una ruptura. Esto puede ocurrir cuando el precio cierra por encima del límite superior del canal para una ruptura alcista o por debajo del límite inferior del canal para una ruptura bajista. Además, establezca criterios para salir de la operación, como tomar ganancias en un cierto nivel objetivo o usar un tope de pérdidas dinámico para protegerse contra movimientos de precios adversos.
Controle las operaciones abiertas: una vez que se ingresa una operación, controle de cerca el movimiento del precio. Ajuste la estrategia de salida si el precio continúa moviéndose favorablemente. Esto podría implicar rastrear el stop loss para proteger las ganancias o establecer un nuevo nivel objetivo para capturar ganancias adicionales.
Gestionar el riesgo: implementar técnicas de gestión de riesgos para limitar las pérdidas potenciales. Esto puede incluir establecer una orden de stop loss en un nivel predeterminado para salir de la operación si el precio se mueve en contra de la tendencia esperada.
Adaptación continua: Adaptar la estrategia en función de las condiciones cambiantes del mercado. La estrategia de ruptura del canal de precios requiere un monitoreo y ajuste continuos para capturar las mejores oportunidades comerciales.
Al seguir estos pasos y aplicarlos al mercado específico y al período de tiempo en el que está operando, puede implementar la estrategia de ruptura del canal de precios. Recuerde que la efectividad de la estrategia puede variar dependiendo de varios factores, y es importante probar y validar la estrategia antes de aplicarla en el comercio en tiempo real.
Master FOREX Grid Trading con estrategia de cobertura automatizada usando Python
Master FOREX Grid Trading con estrategia de cobertura automatizada usando Python
En el video anterior, probamos el sistema de comercio de cuadrícula en el mercado de divisas y descubrimos que arrojó buenos resultados con altos rendimientos y una excelente relación aguda. Sin embargo, según sus comentarios, nos dimos cuenta de que era necesario corregir algunos detalles para realizar una prueba retrospectiva más precisa. Como resultado, hicimos los cambios propuestos a nuestro algoritmo.
Si no ha visto el video anterior donde detallamos la estrategia de cuadrícula, le recomiendo que lo revise primero, ya que proporciona una comprensión más profunda de la estrategia. Puede encontrar el enlace a ese video en la descripción a continuación. Además, puede descargar la versión actualizada del código de Python desde el enlace provisto.
Después de implementar los cambios de código, todavía tenemos un sistema potencialmente preferible, según el conjunto de parámetros utilizados. Tenga en cuenta que no he dedicado mucho tiempo a optimizar los parámetros, por lo que puede descargar el código y experimentar ajustándolos a su gusto. Esto le permitirá ajustar el nivel de riesgo según sus preferencias. Puede incluir más riesgo a expensas de disminuir la relación aguda o disminuir el riesgo y los rendimientos mientras aumenta la relación aguda.
Ahora, analicemos los cambios específicos realizados en la versión anterior del código. En primer lugar, eliminamos uno de los parámetros relacionados con la relación Take Profit/Stop Loss. Nos dimos cuenta de que esta proporción debe modificarse dentro de la propia estrategia, por lo que no es necesario establecerla en este punto. Las funciones utilizadas en la versión anterior siguen siendo las mismas.
La primera modificación significativa estuvo relacionada con el tamaño del lote. En la versión anterior, el tamaño del lote se establecía en un valor inferior a uno, lo que indicaba un porcentaje del patrimonio actual. Sin embargo, esto violó las reglas de la estrategia de cuadrícula porque estábamos operando en ambas direcciones con tamaños de lote diferentes. Para corregir esto, establecemos el tamaño del lote como un valor fijo (50 en este ejemplo).
La segunda modificación importante está relacionada con la función de backtest. Anteriormente, cuando abríamos una operación y luego tratábamos de abrir una operación opuesta o una operación en la dirección opuesta, la función de backtesting cerraba la operación anterior. Esto significaba que si vendíamos primero y luego comprábamos la misma cantidad, la función de backtesting cerraría nuestra posición de venta. Para permitir que el backtesting abra dos operaciones de forma independiente en direcciones opuestas, utilizamos el parámetro de cobertura establecido en verdadero. Esto permite posiciones en la dirección opuesta en el mismo activo al mismo tiempo. Además, establecemos el parámetro de pedidos exclusivos en falso, lo que significa que un pedido no cancelará el pedido anterior.
Para los valores de stop loss, los establecemos en 1,5 veces la distancia de la cuadrícula, y el take profit se establece en 0,5 veces la distancia de la cuadrícula. La relación Take Profit/Stop Loss se establece en 0,5. Tenga en cuenta que estos son parámetros aleatorios utilizados para el ejemplo. En un sistema real, es importante asegurarse de que el stop loss esté más allá que el take profit, ya que la estrategia se basa en las fluctuaciones del mercado para generar ganancias.
Usando estos parámetros, una cuenta de efectivo de $500 y un margen de 1 a 10, obtuvimos los siguientes resultados durante dos meses de datos: un porcentaje de retorno de 13.49, una proporción aguda de 3.8 y una tasa de ganancia de 72%. La curva de equidad muestra una pendiente creciente con algunas áreas de reducción.
Para disminuir el riesgo y aumentar el índice agudo, podría considerar comenzar con efectivo adicional o ajustar el margen. Por ejemplo, al comenzar con $1000 y mantener un margen de 1 a 10, el rendimiento disminuyó a 1,7 % durante dos meses, pero la fuerte proporción aumentó a 4,9. Esto indica que el riesgo disminuyó con este cambio de parámetro.
Tenga en cuenta que hay muchos parámetros con los que trabajar en este sistema, y encontrar el equilibrio adecuado es crucial. También puede experimentar cambiando las proporciones de stop loss y take profit.
Es importante tener en cuenta que no todos los corredores permiten operaciones de cobertura, lo que significa que es posible que no le permitan abrir posiciones opuestas al mismo tiempo en el mismo activo. Esto puede depender del corredor y de su ubicación. Algunos espectadores de los Estados Unidos mencionaron en los comentarios que esto no está permitido en su región. Por lo tanto, es recomendable hablar con su corredor antes de implementar esta estrategia para asegurarse de que se alinee con sus políticas.
Finalmente, recuerda que el backtesting es el primer paso para estudiar un sistema, pero no es suficiente. Es crucial probar la estrategia en vivo en el mercado utilizando una cuenta en papel, ya que esto incluirá el diferencial de la moneda que se negocia y puede afectar los resultados esperados.
Estrategia de cobertura para operar en Python
Estrategia de cobertura para operar en Python
Hola a todos, hoy probaremos la estrategia comercial de cuadrícula. Esta estrategia es conocida por su simplicidad y no requiere ningún indicador técnico para determinar la tendencia. Esto significa que no necesitamos adivinar la tendencia por adelantado. El comercio de cuadrícula implica el comercio en direcciones largas y cortas simultáneamente, lo que lo hace adecuado para el comercio algorítmico.
Para evaluar esta estrategia, realizaremos un backtest utilizando el lenguaje Python. Usaremos datos históricos que abarcan dos meses, con un marco de tiempo de cinco minutos. Los resultados del backtest muestran un aumento constante en la equidad durante el período de prueba, y la estrategia produce índices de rendimiento impresionantes. El índice de Sharpe, que mide los rendimientos ajustados al riesgo, obtiene una puntuación de alrededor de 5,7.
Si está interesado en la parte de codificación, puede descargar el archivo de Jupyter Notebook desde el enlace proporcionado en la descripción a continuación. La estrategia tiene un significado personal para el autor, ya que recuerda convertir una pequeña cuenta en una suma considerable utilizando este sistema cuando comenzaron a operar como pasatiempo.
El concepto detrás de la estrategia comercial de cuadrícula es crear una cuadrícula de niveles de precios en el gráfico. Cada vez que el precio cruza estas líneas de cuadrícula, abrimos posiciones largas y cortas. El nivel de toma de ganancias se establece en la siguiente línea de cuadrícula para cada posición. Como se muestra en un gráfico de muestra, la estrategia consiste en abrir las posiciones largas y cortas iniciales, seguidas de cerrar la posición ganadora en el siguiente nivel de la parrilla. Luego, se abren dos posiciones adicionales, una larga y otra corta, cada vez que se cruza una línea de cuadrícula.
Un desafío con esta estrategia es administrar las operaciones perdedoras que permanecen abiertas en los bordes de la cuadrícula. Es posible que algunas posiciones nunca alcancen sus valores de toma de ganancias, creando una dificultad en el sistema. Se pueden emplear varios enfoques para manejar esta situación. Algunos comerciantes pueden optar por cerrar las operaciones restantes al final del día de negociación, mientras que otros pueden calcular si se encuentran en una situación general de ganancias cada pocas horas y cerrar todo para comenzar de nuevo con una nueva cuadrícula. La solución dependerá de parámetros adicionales, como el marco de tiempo, el número máximo permitido de transacciones paralelas y la distancia de la cuadrícula.
En la parte de codificación, el autor aplica un valor de stop loss para cada operación utilizando el rango verdadero promedio (ATR). Este valor de stop loss se calcula inicialmente en función de la distancia de la cuadrícula, pero luego se usa el ATR para refinarlo. El ATR tiene en cuenta la volatilidad del mercado en el momento de realizar las operaciones. El autor menciona que este podría no ser el mejor enfoque y fomenta la experimentación con diferentes parámetros para encontrar el escenario óptimo para la estrategia.
La razón por la que este sistema podría funcionar en muchos casos es que aprovecha el ruido del mercado. Siempre que el mercado oscile alrededor de la cuadrícula, la estrategia se beneficia de las fluctuaciones de precios y abre posiciones tanto en direcciones largas como cortas. Se espera que el sistema funcione mejor en marcos de tiempo más cortos, donde hay más oscilación de precios y, por lo tanto, ganancias potencialmente más altas.
La estrategia ofrece dos ventajas. Primero, elimina la necesidad de adivinar la tendencia, ya que no sigue ninguna tendencia específica. En segundo lugar, simplifica el proceso de negociación centrándose en la gestión de operaciones perdedoras abiertas. Solo hay un parámetro ajustable en esta estrategia, que es la distancia de la cuadrícula. Sin embargo, es crucial elegir el marco de tiempo y la distancia de cuadrícula adecuados para el activo específico que se negocia.
El archivo de Jupyter Notebook proporcionado demuestra la implementación de la estrategia en Python. El código importa varias bibliotecas, incluidas yfinance para la recuperación de datos, pandas y numpy para la manipulación de datos, y pandas_ta para funciones de análisis técnico, como calcular el ATR. Los datos para el par EUR/USD se descargan utilizando un marco de tiempo específico.
La distancia de la parrilla, la relación de toma de ganancias/stop de pérdidas y el precio medio de la parrilla se definen como variables. El precio medio sirve como precio medio en torno al cual se construye la red. La función generate_grid() está definida para generar los niveles de cuadrícula en función del precio medio y la distancia de cuadrícula. La función calcula los niveles superior e inferior de la cuadrícula mediante un bucle.
A continuación, se implementa la lógica de la estrategia. El backtest comienza inicializando variables como el saldo inicial, el tamaño de la posición y el nivel de stop loss. Se utiliza un bucle for para iterar a través de cada barra en los datos históricos.
Dentro del bucle, se comprueba el precio actual para determinar si cruza alguno de los niveles de la cuadrícula. Si se produce un cruce, se abren nuevas posiciones tanto en la dirección larga como en la corta. Los niveles de Take Profit y Stop Loss se establecen en función de los niveles de cuadrícula y la distancia de Stop Loss.
El bucle también comprueba si alguna posición abierta alcanza sus niveles de recogida de beneficios o de stop loss. Si una posición alcanza cualquier nivel, se cierra y se registra la ganancia o pérdida correspondiente.
Al final del backtest, se traza la curva de equidad, que muestra el crecimiento del saldo de la cuenta a lo largo del tiempo. Las métricas de rendimiento, incluidas la ganancia total, el número de transacciones, la tasa de ganancia y la relación de Sharpe, se calculan y muestran.
Es importante tener en cuenta que, si bien la estrategia comercial de cuadrícula puede haber mostrado resultados prometedores en el backtest, es esencial evaluar y validar minuciosamente cualquier estrategia comercial antes de implementarla en operaciones reales. El backtesting ayuda a evaluar el rendimiento histórico, pero no garantiza la rentabilidad futura.
Para comprender completamente los detalles de implementación y explorar el código, le recomiendo que descargue el archivo de Jupyter Notebook que se proporciona en la descripción. El cuaderno contiene el código completo con comentarios detallados para guiarlo a través del proceso.
Recuerde que operar implica riesgos y siempre se recomienda consultar con un asesor financiero profesional antes de tomar cualquier decisión de inversión.
Cómo construir un robot comercial en Python
Cómo construir un robot comercial en Python
Hola, en este video, le mostraré cómo puede automatizar su estrategia comercial usando Python. En otras palabras, lo guiaré a través del proceso de creación de su propio bot de comercio gratuito que pueda ejecutar automáticamente operaciones en su nombre, siguiendo una estrategia específica. El código que usaré está disponible para descargar desde el enlace en la descripción a continuación, por lo que puede seguir el video y luego descargar el archivo para usarlo como desee.
Lo que voy a demostrar en este video puede funcionar para cualquier estrategia comercial que se pueda implementar como una función de Python. Puede ser una excelente manera de probar su estrategia en datos de mercado en vivo en lugar de simplemente probarla con datos anteriores. Si desea probar su estrategia en datos futuros o en vivo, puede utilizar las técnicas presentadas en este video.
Comencemos abriendo nuestro archivo de Jupyter Notebook. Primero, descargaré algunos datos históricos con fines de prueba. Es importante tener en cuenta que no usaremos estos datos para operaciones en vivo; es principalmente para probar nuestras funciones de señal. Para descargar los datos, utilizo el módulo YFinance y obtengo los datos de intercambio de euros a dólares estadounidenses entre dos fechas específicas, con un período de tiempo de 15 minutos.
Una cosa a tener en cuenta es que cuando se descargan datos por períodos de tiempo cortos, como el intervalo de 15 minutos, Yahoo Finance solo permite que se descarguen los últimos 60 días de datos. Por lo tanto, no podemos descargar más de 60 días a la vez, y estos deben ser los últimos 60 días a partir de la fecha actual. Si encuentra algún problema con el archivo descargado, vuelva a verificar las fechas de inicio y finalización especificadas.
Una vez que hayamos descargado los datos, podemos probarlos comprobando las filas descargadas. Al eliminar el '-1' en el código, podemos ver el marco de datos completo, que consta de alrededor de 3973 filas. El marco de datos incluye columnas para la fecha, la hora, los precios de apertura, máximo, mínimo, cierre y cierre ajustado. En este video, no usaremos datos de volumen, pero siéntase libre de incorporarlos a su estrategia si es necesario.
El siguiente paso es definir nuestro generador de señales, que es una función responsable de generar señales comerciales. Esta función toma un marco de datos como entrada porque cuando estamos transmitiendo datos en vivo para nuestro bot comercial, adquiriremos un marco de datos y lo introduciremos en esta función. Luego, la función determinará si hay una señal presente, como una señal de compra, una señal de venta o si no hay un patrón claro. En este ejemplo, nos centraremos en detectar patrones de velas envolventes, pero tenga en cuenta que esta no es una estrategia comercial completa. Sirve para el propósito de este video, y puede insertar su propia estrategia de generador de señales dentro de esta función.
La función del generador de señales lee los precios de apertura y cierre de la vela actual y la vela anterior utilizando el índice -1 y -2, respectivamente. En función de las condiciones definidas en la función, como la detección de un patrón envolvente bajista o un patrón envolvente alcista, devuelve un valor de señal de 1 para vender, 2 para comprar o 0 para ninguna señal. Para verificar que la función funciona correctamente, podemos probarla usando unas pocas líneas de código. Al recorrer las filas del marco de datos y verificar cada fila en busca de patrones envolventes utilizando la función del generador de señales, podemos almacenar las señales generadas en una lista. Luego podemos agregar esta lista como una columna adicional en el marco de datos de prueba. Al imprimir el marco de datos, se muestra la columna agregada y, al realizar un conteo de valores, podemos ver el número de cada tipo de señal presente en el conjunto de datos.
Tenga en cuenta que este es un ejemplo simplificado para el propósito de este video, y es esencial para desarrollar una estrategia comercial integral basada en sus necesidades específicas.
Ahora que tenemos nuestra función de generador de señales en su lugar, el siguiente paso es definir el bot comercial. El bot comercial es responsable de ejecutar las operaciones en función de las señales generadas. En este ejemplo, crearemos un bot comercial simple que compra cuando recibe un valor de señal de 2 (que indica una señal de compra) y vende cuando recibe un valor de señal de 1 (que indica una señal de venta). Nuevamente, este es solo un ejemplo básico, y puede modificar el bot comercial de acuerdo con su estrategia comercial específica.
La función de bot comercial toma el marco de datos y las señales generadas como entrada. Inicializa el saldo de la cartera y mantiene un indicador de posición para realizar un seguimiento de si actualmente tenemos una posición abierta o no. Luego, recorre cada fila del marco de datos, verifica el valor de la señal y realiza la acción de compra o venta correspondiente.
Cuando se recibe una señal de compra y no tenemos una posición abierta, el bot comercial compra la cantidad especificada del activo y deduce el costo del saldo de la cartera. También establece la bandera de posición para indicar que ahora tenemos una posición abierta. Cuando se recibe una señal de venta y tenemos una posición abierta, el bot comercial vende la posición completa y agrega el monto de la venta al saldo de la cartera. Luego restablece el indicador de posición para indicar que no tenemos ninguna posición abierta.
Para probar el bot comercial, podemos llamar a la función con el marco de datos de prueba y las señales generadas. También podemos especificar un saldo de cartera inicial y la cantidad del activo a comprar o vender. Después de ejecutar la función del bot comercial, podemos imprimir el saldo final de la cartera para ver el resultado.
En este ejemplo, no estamos considerando los costos de transacción, el deslizamiento u otros factores que puedan afectar los escenarios comerciales reales. Es importante tener en cuenta estos factores al desarrollar su propia estrategia y bot comercial.
Finalmente, analicemos cómo puede implementar este código para el comercio en vivo. El código que hemos desarrollado hasta ahora es adecuado para realizar pruebas retrospectivas y probar su estrategia en datos históricos. Para implementarlo para el comercio en vivo, deberá conectarlo a una fuente de datos en tiempo real y una API comercial proporcionada por su corredor o intercambio. Esto implica manejar la transmisión de datos y realizar órdenes comerciales en tiempo real basadas en las señales generadas por el bot comercial.
Hay varias bibliotecas y paquetes de Python disponibles que pueden ayudarlo a conectarse a fuentes de datos en tiempo real y API comerciales, como Alpaca, Binance o API de Interactive Brokers. Deberá investigar y elegir el que mejor se adapte a sus requisitos y se integre bien con el intercambio o corredor elegido.
Recuerde, el comercio en vivo involucra dinero real, por lo que es crucial probar a fondo su código y estrategia en un entorno simulado antes de implementarlo para el comercio en vivo. Comience con posiciones pequeñas y aumente gradualmente su exposición a medida que gane confianza en el rendimiento de su robot comercial.
Eso es todo por este video! Espero que lo haya encontrado útil para comprender cómo automatizar su estrategia comercial usando Python. Recuerda descargar el código desde el enlace en la descripción y modificarlo de acuerdo a tus necesidades y estrategia específicas. Si tiene alguna pregunta, no dude en dejarla en los comentarios a continuación. ¡Gracias por mirar y feliz intercambio!
Python Backtest: estrategia rentable de especulación con VWAP, bandas de Bollinger e indicadores RSI
Python Backtest: estrategia rentable de especulación con VWAP, bandas de Bollinger e indicadores RSI
¡Hola a todos! Hoy, me emociona anunciar que tenemos un ganador. En este video, compartiré una estrategia de scalping utilizando las bandas de Bollinger V-WAP (precio promedio ponderado por volumen) y el RSI (índice de fuerza relativa) para confirmar. Antes de compartir esta estrategia, la realicé minuciosamente para garantizar su eficacia.
En primer lugar, quiero mencionar que esta es la primera estrategia de scalping que mostramos en este canal. La reventa puede ser un desafío para los algoritmos debido a los datos ruidosos en marcos de tiempo más cortos. Sin embargo, creo que esta estrategia supera esos desafíos.
Si eres nuevo en este canal, puedes descargar el código de Python desde el enlace en la descripción. No olvides apoyarnos suscribiéndote y dejando un comentario con tus ideas para compartir. Tus comentarios son valiosos.
Después de tres años de backtesting, el rendimiento total de esta estrategia es de aproximadamente el 300 por ciento. Lo que más me gusta de esta estrategia es su duración promedio de operación, que es de alrededor de 51 minutos. Esto la convierte en la estrategia de cierre de operaciones más rápida que hemos demostrado hasta ahora. El beneficio del cierre rápido de operaciones es la reducción de las tarifas nocturnas y menos estrés, ya que puede ver inmediatamente los resultados de sus operaciones ejecutadas.
En la sección de comentarios, alguien preguntó sobre el índice de Sharpe. Lo he incluido en esta estrategia, y es aproximadamente 1,65. Sin embargo, tenga en cuenta que este valor puede cambiar con las modificaciones de los parámetros en el código de Python. Puede maximizar la relación de Sharpe experimentando con diferentes valores de parámetros.
Profundicemos en los detalles de la estrategia. Estoy usando el marco de tiempo de 5 minutos y la curva V-WAP. Para determinar la tendencia, busco 15 velas que estén constantemente por encima o por debajo de la curva V-WAP, representada por la línea azul. Si 15 velas están por encima de la curva V-WAP, indica una tendencia alcista. Si estamos por debajo de la curva V-WAP, lo considero una tendencia bajista.
Para las posiciones de entrada, utilizo las Bandas de Bollinger con una longitud de 14 y una desviación estándar de 2. En una tendencia alcista por encima de la curva V-WAP, busco posiciones de compra cuando una vela se cierra por debajo de la Banda de Bollinger inferior. En una tendencia bajista, por debajo de la curva V-WAP, espero que una vela se cierre por encima de la Banda de Bollinger superior como señal de venta.
Para confirmar las señales, uso el RSI. Si el RSI está por debajo de 45, confirma una señal de compra. Si el RSI está por encima de 55, confirma una señal de venta.
Para establecer los niveles de Take Profit y Stop Loss, utilizo el ATR (Average True Range). Vuelvo a mirar las últimas siete velas, calculo el valor ATR y lo multiplico por un coeficiente para determinar la distancia de stop loss. El take profit se calcula multiplicando la distancia de stop loss por la relación take profit-stop loss, que representa la relación riesgo-recompensa.
Como puede ver, hay varios parámetros que se pueden ajustar en el código de Python. Puede modificar la duración del ATR, el coeficiente, la relación de ganancia/stop de pérdida y otros parámetros del indicador para ver cómo afectan el rendimiento de la estrategia durante el período de prueba retrospectiva de tres años. Siéntase libre de descargar el código y experimentar por su cuenta.
En el código de Python, proporcioné todos los pasos necesarios para la carga de datos, la limpieza, la adición de indicadores técnicos (V-WAP, RSI, Bandas de Bollinger), el cálculo de la señal total y la visualización de las señales en el gráfico de precios. El código también incluye la parte de backtesting, donde calculo el ATR, establezco los niveles de stop loss y take profit, y ejecuto las operaciones.
En los resultados del backtesting, logré un rendimiento del 197 por ciento y un capital máximo de $313. Comenzando con un capital inicial de $10,000, la estrategia generó una ganancia de $19,700, alcanzando un patrimonio final de $29,700.
Ahora, analicemos las métricas clave de rendimiento de esta estrategia. La tasa de ganancias, que representa el porcentaje de operaciones rentables, es de aproximadamente el 56 %. Esto significa que de todas las operaciones ejecutadas, el 56% resultó en una ganancia. La ganancia promedio por operación es de alrededor de $33,10, mientras que la pérdida promedio por operación es de aproximadamente $23,45.
Para evaluar el riesgo asociado con esta estrategia, podemos observar la reducción máxima, que mide la caída más grande de pico a valle en el capital durante el período de prueba retrospectiva. La reducción máxima para esta estrategia es de aproximadamente el 9%, lo que indica un nivel de riesgo moderado.
Es importante tener en cuenta que estas métricas de rendimiento se basan en datos históricos y el rendimiento pasado no garantiza resultados futuros. Las condiciones del mercado pueden cambiar, y es crucial monitorear y adaptar continuamente la estrategia a la dinámica actual del mercado.
En resumen, esta estrategia de scalping que utiliza V-WAP, Bollinger Bands y RSI ha mostrado resultados prometedores durante el período de backtesting, con un rendimiento total del 300 % y una duración promedio de la operación de 51 minutos. Sin embargo, es esencial probar y validar minuciosamente cualquier estrategia antes de aplicarla al comercio real y considerar factores como los costos de transacción, el deslizamiento y las condiciones del mercado.
Recuerde, el comercio implica riesgos inherentes, y siempre se recomienda informarse, practicar la gestión de riesgos y considerar buscar asesoramiento profesional antes de participar en el comercio en vivo. Espero que encuentre esta estrategia perspicaz y siéntase libre de descargar el código de Python proporcionado en la descripción para explorar más y personalizarlo a su gusto.
Si tiene alguna pregunta o necesita más aclaraciones, no dude en preguntar. ¡Feliz comercio!
Velas Heiken Ashi en Python para sistemas comerciales
Velas Heiken Ashi en Python para sistemas comerciales
Hoy profundizaremos en el proceso de agregar velas Hiken Ashi en Python y exploraremos dos estrategias relacionadas usando estas velas. Las velas Hiken Ashi se derivan de las velas normales que se utilizan normalmente en el comercio. Cada vela Hiken Ashi se calcula utilizando fórmulas específicas. El precio de cierre de Heiken Ashi se obtiene promediando el precio de apertura, el máximo, el mínimo y el precio de cierre de la vela actual. El precio de apertura de Heiken Ashi se obtiene del valor de cierre de la vela Heiken Ashi calculada previamente. El valor alto de Heiken Ashi es el máximo entre el máximo de la vela normal, la apertura de la vela Heiken Ashi o el valor de cierre de la vela Heiken Ashi. Del mismo modo, el valor mínimo de Heiken Ashi es el mínimo entre el precio más bajo de la vela actual, el precio de apertura de la vela Heiken Ashi actual o el precio de cierre de la vela Heiken Ashi actual.
En resumen, además de los valores altos y bajos, la vela Heiken Ashi se compone de valores promedio, lo que le da al gráfico Hiken Ashi una apariencia más suave en comparación con las velas normales, que algunos comerciantes pueden encontrar menos ruidosas. Sin embargo, es importante tener en cuenta que las velas Heiken Ashi no son los valores reales del mercado y no deben usarse para estrategias comerciales o de backtesting basadas en los valores reales del mercado.
El propósito de este tutorial no es presentar un sistema Heiken Ashi ganador, sino demostrar cómo construir estas velas en Python y desarrollar una estrategia algorítmica para probar los resultados. Exploraremos dos estrategias usando velas Heiken Ashi.
La primera estrategia utiliza dos medias móviles: una media móvil rápida y una media móvil lenta. La tendencia se determina en función de las posiciones relativas de estos promedios móviles. Si la media móvil rápida está por encima de la media móvil lenta, indica una tendencia alcista, y si la media móvil rápida está por debajo de la media móvil lenta, sugiere una tendencia bajista. La estrategia genera una señal comercial cuando la vela Heiken Ashi cruza la media móvil rápida en la dirección de la tendencia. Por ejemplo, si la media móvil rápida está por debajo de la media móvil lenta y una vela Heiken Ashi cruza de arriba a abajo la media móvil rápida, activa una señal de venta. Por el contrario, en una tendencia alcista, una vela verde Heiken Ashi que cruza desde abajo hacia arriba del promedio móvil rápido activa una señal de compra.
La segunda variación de esta estrategia añade una condición adicional. Busca una vela doji seguida de una vela de cola corta en la dirección de la tendencia. Por ejemplo, en una tendencia bajista, si una vela doji es seguida por una vela de cola corta que se abre por encima de la media móvil rápida y se cierra por debajo de ella, se activa una señal de venta. La ausencia de mechas o colas largas en estas velas indica un fuerte impulso alcista o bajista, según la tendencia que se analice.
Ambas estrategias tienen sus propios desafíos, como determinar el marco de tiempo óptimo, definir las posiciones de stop-loss apropiadas y diseñar estrategias de salida efectivas. Estos aspectos pueden impactar significativamente la rentabilidad y el éxito de las estrategias.
Para implementar estas estrategias en Python, utilizaremos Jupyter Notebook. Comenzamos importando las bibliotecas necesarias y descargando los datos bursátiles del índice Russell 1000 de 2012 a 2022. Después de eliminar las columnas innecesarias, calculamos los precios de cierre y apertura de Hiken Ashi, así como los valores alto y bajo de Heiken Ashi, según las fórmulas descritas anteriormente. Agregamos estas columnas a nuestro marco de datos.
A continuación, podemos agregar indicadores técnicos adicionales, como promedios móviles y el índice de fuerza relativa (RSI), utilizando el paquete de análisis técnico pandas. Esto nos permite visualizar las velas Heiken Ashi y los indicadores asociados en un gráfico. Ahora que tenemos definidas nuestras señales comerciales y los niveles de stop loss, podemos continuar con el proceso de backtesting. El siguiente paso es calcular los rendimientos de cada operación en función de los puntos de entrada y salida.
Para calcular los rendimientos, primero debemos determinar los precios de entrada y salida de cada operación. Para una posición de compra, el precio de entrada es el precio de cierre de la vela cuando se activa la señal de compra. El precio de salida es el precio más bajo entre la vela actual y las dos velas anteriores, según lo determinado por el nivel de stop loss.
De manera similar, para una posición de venta, el precio de entrada es el precio de cierre de la vela cuando se activa la señal de venta, y el precio de salida es el precio más alto entre la vela actual y las dos velas anteriores.
Una vez que tenemos los precios de entrada y salida, podemos calcular los rendimientos usando la fórmula:
Retorno = (Precio de salida - Precio de entrada) / Precio de entrada
Almacenaremos las devoluciones en una lista llamada "trade_returns" para su posterior análisis. A continuación, debemos calcular los rendimientos acumulativos para realizar un seguimiento del rendimiento general de la estrategia a lo largo del tiempo. Esto se hace multiplicando la rentabilidad de cada operación por la rentabilidad acumulada anterior y sumando 1. La fórmula para calcular la rentabilidad acumulada es:
Rentabilidad acumulada = Rentabilidad acumulada * (1 + Rentabilidad)
Almacenaremos las devoluciones acumuladas en una lista llamada "acumulative_returns". Finalmente, podemos trazar los rendimientos acumulados para visualizar el rendimiento de la estrategia durante el período de backtesting.
Después de realizar el proceso de backtesting y calcular los rendimientos comerciales y los rendimientos acumulados, podemos analizar los resultados para evaluar el rendimiento de la estrategia comercial. Una métrica importante a considerar es la rentabilidad general de la estrategia. Puede calcular el rendimiento total restando 1 del valor de rendimiento acumulativo final. Por ejemplo, si la rentabilidad acumulada es 1,2, significa una rentabilidad del 20% sobre la inversión inicial.
Además, es posible que desee calcular otras métricas de rendimiento, como el rendimiento promedio por operación, la cantidad de operaciones ganadoras, la cantidad de operaciones perdedoras, el porcentaje de operaciones ganadoras y la reducción máxima. El rendimiento promedio por operación se puede obtener dividiendo la suma de todos los rendimientos comerciales por el número total de operaciones. Esta métrica proporciona una indicación de la rentabilidad media de cada operación.
Para calcular la cantidad de operaciones ganadoras y perdedoras, puede contar la cantidad de devoluciones comerciales que son mayores o iguales a 0 (operaciones ganadoras) y la cantidad de devoluciones comerciales que son menores que 0 (operaciones perdedoras). El porcentaje de operaciones ganadoras se puede calcular dividiendo el número de operaciones ganadoras por el número total de operaciones y multiplicándolo por 100.
La reducción máxima mide la mayor disminución de pico a valle en los rendimientos acumulados durante el período de backtesting. Proporciona información sobre el riesgo potencial y la volatilidad a la baja de la estrategia. Al analizar estas métricas de rendimiento, puede obtener información valiosa sobre la eficacia de la estrategia comercial y tomar decisiones informadas con respecto a su uso futuro o posibles modificaciones.
Recuerda que el backtesting es una simulación histórica y no garantiza resultados futuros. Es esencial considerar varios factores y realizar un análisis exhaustivo antes de aplicar una estrategia comercial en escenarios del mundo real.
Revolucione su estrategia de comercio de acciones con el comercio automatizado en Python
Revolucione su estrategia de comercio de acciones con el comercio automatizado en Python
Hoy exploraremos una estrategia comercial diseñada específicamente para posiciones largas utilizando el índice de fuerza relativa (RSI) y el índice direccional promedio (ADX). A pesar de su simplicidad, esta estrategia ha mostrado resultados prometedores. La idea fue propuesta por alguien en la sección de comentarios, y los parámetros parecían familiares y convincentes. Entonces, decidí ponerlo a prueba y compartir los resultados, que resultaron ser bastante satisfactorios.
La curva de equidad generada por el backtest exhibió un aumento casi constante a lo largo del período de prueba, alcanzando un rendimiento máximo de 360. Si es nuevo en este canal, puede encontrar el código disponible para descargar en la descripción. No olvides apoyarnos suscribiéndote y dejando un comentario. Agradecemos escuchar nuevas ideas, como la que trata este video.
Ahora, profundicemos en la estrategia en sí. Usaremos el marco de tiempo diario e ingresaremos en una posición larga cuando se cumplan dos condiciones: primero, cuando el RSI de dos días esté por debajo de 25, lo que indica una condición de sobreventa, y segundo, cuando el ADX (14) esté por encima de 20, lo que sugiere un mercado en tendencia. Salimos de la posición larga cuando el RSI cruza por encima de 75.
Para evitar señales falsas y evitar que las operaciones permanezcan abiertas durante demasiado tiempo cuando el RSI lucha por debajo del umbral de 75, agregué dos condiciones adicionales. La primera condición consiste en comprobar si las velas cotizan por encima de una curva de media móvil simple, lo que indica una tendencia alcista. Solo en este caso se nos permite tomar posiciones largas. La segunda condición consiste en establecer un valor de stop-loss, que se toma como el precio más bajo entre las dos últimas velas menos un cierto porcentaje. En este backtest, establecí el porcentaje de stop-loss en dos por ciento. Puede ajustar este valor según sus preferencias o cuando realice pruebas con diferentes datos.
Para implementar estas condiciones en Python, escribí el código necesario y realicé un backtest. En el código cargamos los datos, los limpiamos eliminando los días sin movimientos e imprimimos el marco de datos para verificar su contenido. Luego, calculamos el promedio móvil exponencial (EMA) con una longitud de 200 para la detección de tendencias, así como el RSI con una longitud de 2 y el ADX con una longitud de 14. Limpiamos el marco de datos nuevamente e imprimimos un segmento para verifique las columnas que usaremos.
A continuación, implementé una función llamada add_ema_signal, que determina la tendencia en función del número de velas que se negocian por encima o por debajo de la curva de media móvil. Establecí este número en seis, ya que ha funcionado bien en videos anteriores. Luego, creé una función llamada señal_total, donde calculamos la señal para ingresar a una posición larga. Iteramos a través de cada fila del marco de datos y verificamos si el RSI está por debajo o igual a 25, el ADX está por encima de 20 y la señal de EMA es igual a dos (lo que indica una tendencia alcista). Cuando se cumplen estas condiciones, almacenamos un valor de señal de dos en el marco de datos.
Al imprimir el marco de datos, podemos visualizar las señales en el gráfico de barras. Los puntos morados representan las señales de compra. Aunque no entraré en los detalles de cada línea del código, puede encontrar explicaciones completas en videos anteriores de este canal, específicamente en la lista de reproducción de Python para operaciones algorítmicas.
Pasando a la parte de backtesting, utilicé el paquete backtesting.py. Sin entrar en detalles, establecí el porcentaje de stop-loss en 2% e incluí condiciones adicionales para cerrar operaciones que han estado abiertas durante un cierto número de días o si el RSI supera los 75. Vale la pena señalar que el código aún contiene líneas relacionadas a posiciones cortas, aunque esta estrategia se centra únicamente en posiciones largas. Estas líneas se pueden modificar o eliminar si decide expandir la estrategia para incluir posiciones cortas.
Si la señal es igual a dos y no hay operaciones abiertas, ingresamos al mercado con una posición larga utilizando el valor de stop-loss. El tamaño de la operación se establece en el 99% del capital actual. El backtest comienza con $1,000 en efectivo y un apalancamiento de 1:5 (margen de 1/5). No se consideraron comisiones en aras de la comparación con estrategias anteriores.
Los resultados del backtest indican un rendimiento de $200 y un valor máximo de $3595. La tasa de ganancias es del 73% y se ejecutaron un total de 102 operaciones durante el período de prueba de diez años. Esto se traduce en un promedio de 10 operaciones por año en el marco de tiempo diario. El trazado de la curva de acciones muestra un aumento constante en el valor, con reducciones menores durante ciertos períodos.
Es importante tener en cuenta que no modifiqué ninguno de los parámetros sugeridos en la sección de comentarios. La longitud RSI permanece en 2, la longitud ADX en 14 y la longitud EMA en 200. Sin embargo, aún puede ajustar estos valores y experimentar con diferentes acciones o mercados para mejorar potencialmente los resultados y encontrar una configuración más satisfactoria.
Esta estrategia ofrece un enfoque simple pero efectivo para posiciones largas. Te animo a que descargues el código del enlace en la descripción y experimentes con él. El código es relativamente corto y fácil de usar para principiantes. Disfrute explorando esta estrategia y esté atento a nuestro próximo video. ¡Opere con seguridad y hasta la próxima!
Estrategia automatizada de bandas de Rayner Teo Bollinger optimizada para un alto rendimiento
Estrategia automatizada de bandas de Rayner Teo Bollinger optimizada para un alto rendimiento
¡Hola a todos! En este video, nos complace presentar un enfoque de optimización extrema que demuestra los efectos de ciertos parámetros en nuestro sistema comercial. Creemos que esta es la mejor optimización que hemos logrado hasta ahora. Como puede ver, hemos logrado un rendimiento impresionante de alrededor del tres mil por ciento, con una curva de capital en constante aumento. Los detalles de las transacciones también se muestran en el gráfico y los explicaremos en este video. Hemos trazado todas las operaciones en los gráficos de precios y también las revisaremos. ¡Así que estad atentos!
Antes de continuar, queremos enfatizar que la forma en que hemos logrado un rendimiento del 30 000 por ciento con esta estrategia no es el enfoque más seguro para el comercio real. No recomendamos usar estos parámetros en un escenario comercial real. Sin embargo, creemos que la estrategia en sí es sólida y tiene un gran potencial. Si es nuevo aquí, la estrategia se basa en la estrategia Rhino Theo Bollinger Band para mercados en tendencia. Lo hemos probado previamente en un vídeo con excelentes resultados y mínimo riesgo. Si no lo ha visto, puede encontrar el enlace al primer video de backtest en la descripción, junto con el código de Python si es necesario.
En este video, intentaremos aplicar parámetros extremos para generar retornos relativamente grandes. Hacemos esto principalmente por la diversión de probar y jugar con el código de Python. Además, esperamos obtener información valiosa durante el proceso y, potencialmente, descubrir una configuración que podría conducir a altos rendimientos realistas.
Ahora, saltemos al código y veamos cómo se desarrolla todo. La primera celda de nuestro archivo de cuaderno Jupyter está dedicada a cargar los datos. Estamos utilizando el módulo "yfinance", que es una forma conveniente de cargar datos históricos diarios de las bases de datos. Con solo una línea de código, podemos cargar los datos de una acción específica, como el índice Russell 1000 entre 2011 y 2021, por ejemplo. Limpiamos los datos eliminando los días sin movimientos de precios, como fines de semana y días festivos. Luego, reiniciamos el índice e imprimimos el encabezado del marco de datos para verificar que los datos estén formateados correctamente.
A continuación, utilizamos el módulo "pandas_ta" (análisis técnico de pandas) para calcular varios indicadores técnicos. En este caso, calculamos dos medias móviles: la media móvil exponencial (EMA) de 200 días y la media móvil simple (SMA) de 150 días. Al comparar el promedio de movimiento rápido (EMA2) con el promedio de movimiento más lento (EMA), podemos determinar si el mercado está en una tendencia alcista o bajista. También calculamos el índice de fuerza relativa (RSI) de 12 días utilizando el mismo módulo. Además, modificamos los parámetros de las Bandas de Bollinger estableciendo la longitud en 14 (en lugar de 20) y la desviación estándar en 2,0 (en lugar de 2,5). Estas modificaciones tienen como objetivo hacer que el sistema sea menos selectivo, lo que resulta en señales comerciales más frecuentes y una mayor cantidad de operaciones durante el backtest.
En lugar de usar la señal RDMI o la señal de promedio móvil exponencial discutida en los videos anteriores, empleamos la señal de dos EMA. Esto significa que consideramos dos promedios móviles, uno más rápido y otro más lento. Si el promedio de movimiento rápido está por encima del promedio de movimiento lento, identificamos una tendencia alcista. Por el contrario, si la media móvil rápida está por debajo de la media móvil lenta, reconocemos una tendencia bajista. Agregamos esta señal, denominada señal EMA, como una nueva columna en nuestro marco de datos.
La función para generar las señales comerciales es similar a los videos anteriores. Comprobamos si el precio de cierre está por debajo de la Banda de Bollinger inferior y si la señal de EMA indica una tendencia alcista (igual a 2), lo que activa una señal de compra.
En este video, el presentador demuestra un enfoque de optimización extrema para mostrar los efectos de varios parámetros en un sistema comercial. El objetivo es lograr altos rendimientos mediante la aplicación de parámetros extremos, aunque es importante señalar que estos parámetros no se recomiendan para el comercio real debido a los riesgos asociados. Sin embargo, el presentador cree que la estrategia en sí tiene un gran potencial si se usa con cautela.
La estrategia que se emplea se basa en la estrategia Rhino Theo Bollinger Band para mercados en tendencia. El presentador hace referencia a un video anterior donde probaron esta estrategia con excelentes resultados y un riesgo relativamente bajo. El primer paso en el proceso de optimización es cargar los datos necesarios utilizando el módulo Y Finance. El presentador carga los datos del índice Russell 1000 de 2011 a 2021, que cubren un período de 10 años.
Una vez que se cargan los datos, el presentador los limpia eliminando los días sin movimientos de precios, como los fines de semana y los días festivos. Luego, los datos se preparan calculando indicadores técnicos utilizando el módulo pandas_ta (análisis técnico de pandas). Se calculan dos medias móviles: una media móvil exponencial (EMA) de 200 días y una media móvil simple (SMA) de 150 días. Estos promedios móviles ayudan a determinar la tendencia: si la EMA más rápida está por encima de la SMA más lenta, indica una tendencia alcista y viceversa.
El presentador también calcula el índice de fuerza relativa (RSI) de 12 días utilizando el módulo pandas_ta. Adicionalmente, se modifican los parámetros de longitud y desviación estándar de las Bandas de Bollinger. En lugar de usar una longitud de 20 y una desviación estándar de 2,5 como en videos anteriores, el presentador usa una longitud de 14 y una desviación estándar de 2,0. Esta modificación tiene como objetivo hacer que el sistema sea menos selectivo, lo que resultará en señales comerciales más frecuentes.
En lugar de usar las señales RSI o EMA como en los videos anteriores, el presentador presenta una nueva señal llamada señal EMA. Se basa en la relación entre los dos promedios móviles: si la EMA más rápida está por encima de la SMA más lenta, la señal de la EMA se establece en 2, lo que indica una tendencia alcista. Si la EMA más rápida está por debajo de la SMA más lenta, la señal de la EMA se establece en 1, lo que indica una tendencia bajista.
La estrategia de entrada es similar a los videos anteriores. El presentador verifica si el precio de cierre está por debajo de la Banda de Bollinger inferior y si la señal EMA indica una tendencia alcista (señal EMA = 2). En este caso, se genera una señal de compra al precio de cierre de la vela actual. Si el precio de cierre está por encima de la Banda de Bollinger superior y la señal EMA indica una tendencia bajista (señal EMA = 1), se genera una señal de venta al precio de cierre de la vela actual.
Para salir de operaciones, el presentador introduce criterios adicionales. Una operación se cierra si ha estado abierta durante más de 10 días, ya que no se desean operaciones a más largo plazo. Además, una operación se cierra si es una operación larga y el RSI sube por encima de 75, o si es una operación corta y el RSI cae por debajo de 25. Si la condición del RSI por sí sola no es suficiente para desencadenar una salida, un stop-loss se implementa el mecanismo.
El stop-loss se calcula como el valor mínimo entre el mínimo actual de la vela y el mínimo de la vela anterior, multiplicado por (1 - un cierto porcentaje). El usuario determina el porcentaje y representa la pérdida permitida antes de activar el stop-loss. Por ejemplo, un porcentaje de 2 significa que el stop-loss se establece un 2% por debajo del punto más bajo entre las dos últimas velas. Además, se establece un nivel de toma de ganancias al doble de la distancia del límite de pérdidas.
El presentador evalúa la estrategia ejecutando un backtest utilizando los parámetros optimizados. Trazan las operaciones en el gráfico de precios y proporcionan explicaciones detalladas para cada operación. Los resultados del backtest muestran un rendimiento impresionante de alrededor del tres mil por ciento, con una curva de capital en constante aumento.
Finalmente, el presentador enfatiza que si bien este enfoque de optimización extrema produce altos rendimientos en el backtest, no se recomienda para el comercio real debido a los riesgos asociados. El propósito de este ejercicio es explorar los efectos de diferentes parámetros y obtener información sobre el comportamiento de la estrategia.