Sistema de estrategia de promediado de costes dinámico basado en bandas de Bollinger y RSI

BB RSI DCA SMA TP
Fecha de creación: 2024-11-27 16:37:12 Última modificación: 2024-11-27 16:37:12
Copiar: 0 Número de Visitas: 467
1
Seguir
1617
Seguidores

Sistema de estrategia de promediado de costes dinámico basado en bandas de Bollinger y RSI

Descripción general

La estrategia es un sistema de comercio cuantitativo que combina las bandas de Bollinger, el indicador de fuerza relativa (RSI) y el promedio de costos dinámicos (DCA). La estrategia ejecuta automáticamente las operaciones de construcción de posición en lotes en las fluctuaciones del mercado mediante el establecimiento de reglas de administración de fondos, mientras que combina los indicadores técnicos para juzgar las señales de compra y venta y ejecutar operaciones con un riesgo controlado. El sistema también contiene la lógica de parada y el seguimiento de las ganancias acumuladas, que permite monitorear y administrar eficazmente el rendimiento de las operaciones.

Principio de estrategia

La estrategia se basa principalmente en los siguientes componentes fundamentales:

  1. El indicador de la banda de Brin se utiliza para determinar el rango de fluctuación de los precios, considerando la compra cuando el precio toca la vía baja y la venta cuando toca la vía alta
  2. El indicador RSI se utiliza para confirmar el estado de sobrecompra y sobreventa en el mercado. El RSI confirma la sobreventa cuando está por debajo de 25 y confirma la sobreventa cuando está por encima de 75
  3. El módulo DCA calcula el monto de cada posición en función de la dinámica de los derechos y intereses de las cuentas, para lograr la administración adaptativa de los fondos
  4. El módulo Stop-Loss establece un objetivo de ganancias del 5% para alcanzar el objetivo de protección de ganancias automática
  5. El módulo de monitoreo del estado del mercado calcula la magnitud de los cambios en el mercado de 90 días para ayudar a determinar la tendencia general
  6. El módulo de seguimiento de ganancias acumuladas registra las ganancias y pérdidas de cada operación para evaluar el rendimiento de la estrategia

Ventajas estratégicas

  1. Mejora de la fiabilidad de la señal, combinada con la verificación cruzada de múltiples indicadores técnicos
  2. La administración de posiciones dinámicas evita el riesgo de posiciones fijas
  3. Establecer condiciones razonables para detener el cierre de ganancias a tiempo
  4. Con la función de monitoreo de tendencias del mercado, es fácil entender el panorama general
  5. Un buen sistema de seguimiento de ganancias para analizar el desempeño de la estrategia
  6. La función de alerta está configurada para alertar en tiempo real sobre las oportunidades de negociación

Riesgo estratégico

  1. Las turbulencias en los mercados pueden desencadenar señales frecuentes que aumentan los costos de las transacciones.
  2. El RSI podría retrasarse en un mercado de tendencia
  3. Las paradas de porcentaje fijo podrían salirse prematuramente de los mercados de tendencia fuerte
  4. La estrategia de DCA en un mercado de caída unilateral podría causar un retiro mayor Se recomiendan las siguientes medidas para gestionar los riesgos:
  • Establecer un límite máximo de tenencia de posición
  • Parámetros de ajuste en función de la dinámica de la volatilidad del mercado
  • Añadir filtro de tendencias
  • Implementación de una estrategia de cese por etapas

Dirección de optimización de la estrategia

  1. Optimización dinámica de parámetros:
  • Los parámetros de la banda de Bryn se ajustan a la fluctuación
  • El RSI puede variar con el ciclo del mercado
  • La proporción de fondos de DCA puede ajustarse según el tamaño de la cuenta
  1. El sistema de señales está mejorando:
  • Confirmación de aumento de volumen
  • Añadir análisis de líneas de tendencia
  • Combinado con más indicadores técnicos de verificación cruzada
  1. El control de riesgos es perfecto:
  • Cancelación de pérdidas dinámicas
  • Añadir el control de retirada máxima
  • Establezca un límite de pérdidas diarias

Resumir

La estrategia construye un sistema de negociación más completo mediante la aplicación integral de métodos de análisis técnico y de gestión de fondos. La estrategia tiene la ventaja de la identificación de múltiples señales y una buena gestión de riesgos, pero aún necesita ser probada y optimizada en el mercado.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-27 00:00:00
end: 2024-11-26 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined BB RSI with Cumulative Profit, Market Change, and Futures Strategy (DCA)", shorttitle="BB RSI Combined DCA Strategy", overlay=true)

// Input Parameters
length = input.int(20, title="BB Length")  // Adjusted BB length
mult = input.float(2.5, title="BB Multiplier")  // Adjusted BB multiplier
rsiLength = input.int(14, title="RSI Length")  // Adjusted RSI length
rsiBuyLevel = input.int(25, title="RSI Buy Level")  // Adjusted RSI Buy Level
rsiSellLevel = input.int(75, title="RSI Sell Level")  // Adjusted RSI Sell Level
dcaPositionSizePercent = input.float(1, title="DCA Position Size (%)", tooltip="Percentage of equity to use in each DCA step")
takeProfitPercentage = input.float(5, title="Take Profit (%)", tooltip="Take profit percentage for DCA strategy")

// Calculate DCA position size
equity = strategy.equity  // Account equity
dcaPositionSize = (equity * dcaPositionSizePercent) / 100  // DCA position size as percentage of equity

// Bollinger Bands Calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// RSI Calculation
rsi = ta.rsi(close, rsiLength)

// Plotting Bollinger Bands and RSI levels
plot(upper, color=color.red, title="Bollinger Upper")
plot(lower, color=color.green, title="Bollinger Lower")
hline(rsiBuyLevel, "RSI Buy Level", color=color.green)
hline(rsiSellLevel, "RSI Sell Level", color=color.red)

// Buy and Sell Signals
buySignal = (rsi < rsiBuyLevel and close <= lower)
sellSignal = (rsi > rsiSellLevel and close >= upper)

// DCA Strategy: Enter Long or Short based on signals with calculated position size
if (buySignal)
    strategy.entry("DCA Buy", strategy.long)

if (sellSignal)
    strategy.entry("DCA Sell", strategy.short)

// Take Profit Logic
if (strategy.position_size > 0)  // If long
    strategy.exit("Take Profit Long", from_entry="DCA Buy", limit=close * (1 + takeProfitPercentage / 100))

if (strategy.position_size < 0)  // If short
    strategy.exit("Take Profit Short", from_entry="DCA Sell", limit=close * (1 - takeProfitPercentage / 100))

// Plot Buy/Sell Signals on the chart
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white)

// Alerts for Buy/Sell Signals
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected")

// Cumulative Profit Calculation
var float buyPrice = na
var float profit = na
var float cumulativeProfit = 0.0  // Cumulative profit tracker

if (buySignal)
    buyPrice := close
if (sellSignal and not na(buyPrice))
    profit := (close - buyPrice) / buyPrice * 100
    cumulativeProfit := cumulativeProfit + profit  // Update cumulative profit
    label.new(bar_index, high, text="P: " + str.tostring(profit, "#.##") + "%", color=color.blue, style=label.style_label_down)
    buyPrice := na  // Reset buyPrice after sell

// Plot cumulative profit on the chart
var label cumulativeLabel = na
if (not na(cumulativeProfit))
    if not na(cumulativeLabel)
        label.delete(cumulativeLabel)
    cumulativeLabel := label.new(bar_index, high + 10, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "%", color=color.purple, style=label.style_label_up)

// Market Change over 3 months Calculation
threeMonthsBars = 3 * 30 * 24  // Approximation of 3 months in bars (assuming 1 hour per bar)
priceThreeMonthsAgo = request.security(syminfo.tickerid, "D", close[threeMonthsBars])
marketChange = (close - priceThreeMonthsAgo) / priceThreeMonthsAgo * 100

// Plot market change over 3 months
var label marketChangeLabel = na
if (not na(marketChange))
    if not na(marketChangeLabel)
        label.delete(marketChangeLabel)
    marketChangeLabel := label.new(bar_index, high + 20, text="Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.orange, style=label.style_label_up)

// Both labels (cumulative profit and market change) are displayed simultaneously
var label infoLabel = na
if (not na(cumulativeProfit) and not na(marketChange))
    if not na(infoLabel)
        label.delete(infoLabel)
    infoLabel := label.new(bar_index, high + 30, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "% | Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.purple, style=label.style_label_upper_right)