Esta estrategia es un bot de pseudo-red destinado principalmente a la negociación algorítmica. Utiliza una red dinámica ponderada por volumen que se actualiza solo cuando el RSI cumple ciertas condiciones. También es una estrategia de ruptura, mientras que los bots de red normales no lo son (los bots de red típicos venden cuando se alcanza una red más alta, mientras que esta estrategia vende cuando se viola una red más baja bajo condiciones específicas).
En resumen, la estrategia actualiza su cuadrícula a los valores más altos / más bajos ponderados por volumen de su fuente dada (
Puede configurar shorts, fuente, longitud del RSI y niveles de sobrecompra / sobreventa en la configuración.
La lógica central de la estrategia es la siguiente:
Utilice el indicador RSI para determinar los puntos de inversión de tendencia, utilizando como señales de confirmación los cruces de líneas RSI de los niveles de sobrecompra/sobreventa.
Cuando se produce la señal RSI, se registran los precios más altos/más bajos durante un período como límites superiores/inferiores de la red.
Divide el rango en 5 líneas de cuadrícula espaciadas uniformemente.
Cuando el precio se rompe por encima de la línea superior, ir largo.
Usando breakout en lugar de tacto, puede detectar mejor las inversiones de tendencia.
Cierra todas las órdenes piramidal antes de cerrar para evitar riesgos durante la noche.
La estrategia consiste en:
Configuración de entrada: fuente, parámetros del RSI, largo/corto, etc.
Calculo del RSI: calcular el RSI y comprobar si hay señales cruzadas.
Cuadrícula dinámica: registra el rango de precios en las señales RSI y calcula las líneas de la red.
Verificación de señales: detección de líneas de la red de ruptura de precios para señales largas / cortas.
Gestión de pedidos: enviar pedidos y aplanar antes de cerrar.
Diagramación: líneas de la red gráfica, zonas largas/cortas, etc.
Al actualizar dinámicamente la cuadrícula y usar el RSI para el contexto de tendencia más las señales de ruptura, esta estrategia puede rastrear de manera efectiva las tendencias e invertir cuando la tendencia cambia.
Las principales ventajas de esta estrategia son las siguientes:
La red dinámica se adapta a la tendencia, a diferencia de las redes fijas.
Sólo ajusta la red en la confirmación de RSI, reduciendo el ruido.
Las señales de fuga captan las inversiones mejor que el tacto.
Se aplana antes de cerrar para evitar riesgos de brecha durante la noche.
El RSI es eficaz para la detección de sobrecompra/venta.
El modo de ruptura proporciona una entrada temprana en la tendencia en comparación con la reversión.
El ajuste de la distancia y el tamaño de la red permite ajustar el riesgo.
Cuadrícula visual y zonas largas/cortas.
Shorts opcionales para los diferentes comerciantes.
Una lógica simple y clara adecuada para el comercio de algo.
Estos hacen que la estrategia sea capaz de rastrear la tendencia automática con controles de riesgo para el comercio en vivo.
También hay algunos riesgos potenciales a tener en cuenta:
Los mercados de la sierra pueden causar pérdidas de parada, pueden ampliar las paradas o pausar las operaciones.
Los huecos de una noche pueden dejar grandes huecos abiertos, pueden reducir el tamaño de las posiciones.
El mal ajuste de parámetros puede aumentar las operaciones o los errores de señal.
Las altas tarifas pueden erosionar las ganancias de las operaciones de red.
Las señales de fuga pueden retrasarse ligeramente en las reversiones.
Puede tener un rendimiento inferior en tendencias alcistas constantes.
Necesita suficiente capital para posiciones de mayor tamaño y pirámide, de lo contrario los resultados serán pobres.
Mitigantes:
Optimizar los parámetros para reducir la frecuencia de las operaciones y el exceso de operaciones.
Combina con los indicadores de tendencia, evita los períodos de negociación.
Reducir el tamaño de la operación en % y el riesgo por operación.
Prueba diferentes umbrales de ruptura para obtener el mejor equilibrio entre la puntualidad y la estabilidad.
Agregue más condiciones de entrada, sólo introduzca tendencias claras para evitar quedar atrapado.
Prueba posterior durante períodos más largos para evaluar la estabilidad de los parámetros.
Explorar la optimización de parámetros dinámicos basados en el aprendizaje automático para la adaptabilidad del mercado.
Considere combinar con estrategias de opciones para cubrir los riesgos de posición.
Ajustar los parámetros basados en las últimas condiciones del mercado para mantener la eficacia de la estrategia.
Construir plataformas de optimización visual para ayudar a las pruebas rápidas.
Con la optimización de parámetros, peinar señales, y más información del mercado, los riesgos pueden ser reducidos para hacer una estrategia algo verdaderamente confiable.
La estrategia puede reforzarse aún más mediante:
Optimizando los parámetros de RSI, probando los períodos de RSI para las mejores combinaciones.
Prueba de diferentes espaciamientos de la red para un riesgo-recompensa óptimo.
Añadir otros indicadores a las señales de filtro, por ejemplo, MACD, KD, etc. para mejorar la precisión.
Desarrollar paradas adaptativas basadas en la volatilidad del mercado.
Aumentar las condiciones de entrada, sólo entrar tendencias obvias para evitar trampas.
Pruebas posteriores durante períodos más largos para evaluar la estabilidad de los parámetros.
Explorando la optimización dinámica basada en el aprendizaje automático para la adaptabilidad.
Incorporar estrategias de opciones para cubrir riesgos.
Ajuste de los parámetros basados en las últimas condiciones del mercado para mantener la eficacia.
Construyendo plataformas de optimización visual para pruebas rápidas.
Con optimización automatizada, combinaciones de estrategias, más información del mercado, etc., puede lograr una mejor estabilidad y rendimientos como una estrategia comercial real.
En resumen, la estrategia RSI Box Grid utiliza el RSI para identificar la confirmación de la inversión de tendencia, establece redes dinámicas de rango de precios, breakouts de operaciones y aplana el intradía, formando una tendencia flexible siguiendo la estrategia de negociación de algo.
La estrategia tiene ventajas que incluyen el RSI para el contexto de tendencia, las redes dinámicas, el comercio de ruptura y el aplanamiento completo intradiario. Esto le permite rastrear de manera efectiva las tendencias con controles de riesgo. Sin embargo, existen riesgos como las pérdidas de parada de la sierra, las brechas nocturnas, que requieren optimización, peinar señales y gestión de riesgos.
Hay muchas oportunidades de mejora, al incorporar más indicadores, optimización de ML, backtesting visual, etc., puede convertirse en una estrategia de trading de algo más robusta y de alto rendimiento.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © wbburgin //@version=5 // strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, // default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10) src = input.source(close,"Source") rsiLength = input.int(14,"RSI Length") oblvl = input.int(70,"Overbought Level") oslvl = input.int(30,"Oversold Level") useShorts = input.bool(false,"Use Shorts",inline="B") showGrid = input.bool(false,"Show Grid",inline="B") rsi = ta.rsi(src,rsiLength) rsi_crossdn = ta.crossunder(rsi,oblvl) rsi_crossup = ta.crossover(rsi,oslvl) highest = ta.vwma(ta.highest(src,rsiLength),rsiLength) lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength) gridTop = ta.valuewhen(rsi_crossdn,highest,0) gridBottom = ta.valuewhen(rsi_crossup,lowest,0) gridMiddle = math.avg(gridTop,gridBottom) gridMidTop = math.avg(gridMiddle,gridTop) gridMidBottom = math.avg(gridMiddle,gridBottom) diff1 = math.abs(src - gridTop) diff2 = math.abs(src - gridBottom) diff3 = math.abs(src - gridMiddle) diff4 = math.abs(src - gridMidTop) diff5 = math.abs(src - gridMidBottom) minDiff = math.min(diff1, diff2, diff3, diff4, diff5) // Determine which line is the closest float closestLine = na if minDiff == diff1 closestLine := gridTop else if minDiff == diff2 closestLine := gridBottom else if minDiff == diff3 closestLine := gridMiddle else if minDiff == diff4 closestLine := gridMidTop else if minDiff == diff5 closestLine := gridMidBottom buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom) sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom) condition_bull = buyCrosses condition_bear = sellCrosses var float bull_status_line = na var float bear_status_line = na var float bull_buy_line = na var float bear_sell_line = na if condition_bull bull_status_line := closestLine if condition_bear bear_status_line := closestLine if bull_status_line == gridBottom bull_buy_line := gridMidBottom if bull_status_line == gridMidBottom bull_buy_line := gridMiddle if bull_status_line == gridMiddle bull_buy_line := gridMidTop if bull_status_line == gridMidTop bull_buy_line := gridTop if bear_status_line == gridTop bear_sell_line := gridMidTop if bear_status_line == gridMidTop bear_sell_line := gridMiddle if bear_status_line == gridMiddle bear_sell_line := gridMidBottom if bear_status_line == gridMidBottom bear_sell_line := gridBottom l = ta.crossover(src,bull_buy_line) s = ta.crossunder(src,bear_sell_line) if l strategy.entry("Long",strategy.long) if s strategy.close("Long") if useShorts strategy.entry("Short",strategy.short) // Plotting in_buy = ta.barssince(l) < ta.barssince(s) u=plot(bull_buy_line,color=na,title="Buy Plot") d=plot(bear_sell_line,color=na,title="Sell Plot") plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2") plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1") plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0") plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1") plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2") fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))