Estrategia híbrida de cruce de medias móviles de impulso de Fibonacci

MA SMA TP SL FIBONACCI
Fecha de creación: 2025-02-19 11:02:16 Última modificación: 2025-02-19 11:02:16
Copiar: 3 Número de Visitas: 479
1
Seguir
1617
Seguidores

Estrategia híbrida de cruce de medias móviles de impulso de Fibonacci

Descripción general

La estrategia es un sistema de negociación integrado que combina niveles de retracción de Fibonacci, cruces de medias móviles y juicios de tendencias dinámicas. Genera señales de negociación mediante cruces de medias móviles rápidas y medias móviles lentas, mientras que utiliza los niveles de retracción de Fibonacci como puntos de referencia de precios importantes y combina juicios de tendencias para optimizar el tiempo de negociación.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes elementos clave:

  1. El sistema de cruce de medias móviles utiliza la media móvil simple (SMA) de los días 9 y 21 como indicador de señal
  2. Los niveles de retracción de Fibonacci calculados en 100 ciclos (23.6%, 38.2%, 50%, 61.8%) se utilizan para el análisis de la estructura del mercado
  3. Juzgar las tendencias del mercado a través de la relación entre el precio y la posición de la línea media rápida
  4. La señal de construcción de la bodega es activada por una línea media rápida que atraviesa la línea media lenta ((hacer más) o por una línea media lenta que atraviesa la línea media lenta ((hacer vacío)
  5. El sistema establece automáticamente los niveles de stop loss y stop loss en porcentaje basado en el precio de entrada

Ventajas estratégicas

  1. Análisis multidimensional: combinación de los tres elementos más reconocidos en el análisis técnico (trend, volumen y nivel de precios)
  2. Mejor gestión de riesgos: la adopción de un Stop Loss Ratio predeterminado protege la seguridad de los fondos
  3. Alta visibilidad: muestra todos los niveles de precios y señales de negociación clave en un gráfico
  4. Adaptabilidad: puede adaptarse a diferentes entornos de mercado mediante parámetros
  5. Las reglas de operación son claras: las condiciones de generación de la señal son claras, evitando juicios subjetivos.

Riesgo estratégico

  1. El sistema de movilidad uniforme puede generar falsas señales en mercados convulsos
  2. La fijación del Stop Loss en porcentajes fijos puede no ser adecuada para todos los entornos de mercado
  3. En un mercado altamente volátil, los precios pueden romper rápidamente los puntos de parada
  4. La validez de los niveles de Fibonacci puede cambiar con las condiciones del mercado
  5. La evaluación de tendencias puede retrasarse en los puntos de inflexión del mercado

Dirección de optimización de la estrategia

  1. Introducción de un indicador de fluctuación para ajustar dinámicamente el porcentaje de stop loss
  2. Se añaden análisis de volúmenes para confirmar las señales de transacción
  3. Considere la confirmación en diferentes períodos de tiempo para mejorar la fiabilidad de la señal
  4. Adherirse a las condiciones de selección del entorno de mercado para negociar en condiciones de mercado adecuadas
  5. Desarrollo de sistemas de optimización de parámetros adaptativos

Resumir

Esta es una estrategia de negociación integral que combina varias herramientas de análisis técnico clásico. La estrategia capta las oportunidades de negociación potenciales en el mercado mediante la combinación de las medias móviles, los retrocesos de Fibonacci y el análisis de tendencias.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-20 00:00:00
end: 2025-02-17 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Buy/Sell Strategy with TP, SL, Fibonacci Levels, and Trend", overlay=true)

// Input for stop loss and take profit percentages
stopLossPercentage = input.int(2, title="Stop Loss (%)") // Stop loss percentage
takeProfitPercentage = input.int(4, title="Take Profit (%)") // Take profit percentage

// Example of a moving average crossover strategy
fastLength = input.int(9, title="Fast MA Length")
slowLength = input.int(21, title="Slow MA Length")

fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)

// Entry conditions (Buy when fast MA crosses above slow MA, Sell when fast MA crosses below slow MA)
longCondition = ta.crossover(fastMA, slowMA)
shortCondition = ta.crossunder(fastMA, slowMA)

// Plot moving averages for visual reference
plot(fastMA, color=color.blue, title="Fast MA")
plot(slowMA, color=color.red, title="Slow MA")

// Fibonacci Retracement Levels
lookback = input.int(100, title="Lookback Period for Fibonacci Levels")
highLevel = ta.highest(high, lookback)
lowLevel = ta.lowest(low, lookback)

fib236 = lowLevel + (highLevel - lowLevel) * 0.236
fib382 = lowLevel + (highLevel - lowLevel) * 0.382
fib50 = lowLevel + (highLevel - lowLevel) * 0.5
fib618 = lowLevel + (highLevel - lowLevel) * 0.618

// Display Fibonacci levels as text on the chart near price panel (left of candle)
label.new(bar_index, fib236, text="Fib 23.6%: " + str.tostring(fib236, "#.##"), style=label.style_label_left, color=color.purple, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)
label.new(bar_index, fib382, text="Fib 38.2%: " + str.tostring(fib382, "#.##"), style=label.style_label_left, color=color.blue, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)
label.new(bar_index, fib50, text="Fib 50%: " + str.tostring(fib50, "#.##"), style=label.style_label_left, color=color.green, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)
label.new(bar_index, fib618, text="Fib 61.8%: " + str.tostring(fib618, "#.##"), style=label.style_label_left, color=color.red, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)

// Trend condition: Price uptrend or downtrend
trendCondition = close > fastMA ? "Uptrending" : close < fastMA ? "Downtrending" : "Neutral"

// Remove previous trend label and add new trend label
var label trendLabel = na
if (not na(trendLabel))
    label.delete(trendLabel)

// Create a new trend label based on the current trend
trendLabel := label.new(bar_index, close, text="Trend: " + trendCondition, style=label.style_label_left, color=color.blue, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)

// Buy and Sell orders with Stop Loss and Take Profit
if (longCondition)
    // Set the Stop Loss and Take Profit levels based on entry price
    stopLossLevel = close * (1 - stopLossPercentage / 100)
    takeProfitLevel = close * (1 + takeProfitPercentage / 100)
    // Enter long position with stop loss and take profit levels
    strategy.entry("BUY", strategy.long)
    strategy.exit("Sell", "BUY", stop=stopLossLevel, limit=takeProfitLevel)
    
    // Display TP, SL, and Entry price labels on the chart near price panel (left of candle)
    label.new(bar_index, takeProfitLevel, text="TP\n" + str.tostring(takeProfitLevel, "#.##"), style=label.style_label_left, color=color.green, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)
    label.new(bar_index, stopLossLevel, text="SL\n" + str.tostring(stopLossLevel, "#.##"), style=label.style_label_left, color=color.red, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)
    label.new(bar_index, close, text="BUY\n" + str.tostring(close, "#.##"), style=label.style_label_left, color=color.blue, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)

if (shortCondition)
    // Set the Stop Loss and Take Profit levels based on entry price
    stopLossLevel = close * (1 + stopLossPercentage / 100)
    takeProfitLevel = close * (1 - takeProfitPercentage / 100)
    // Enter short position with stop loss and take profit levels
    strategy.entry("SELL", strategy.short)
    strategy.exit("Cover", "SELL", stop=stopLossLevel, limit=takeProfitLevel)
    
    // Display TP, SL, and Entry price labels on the chart near price panel (left of candle)
    label.new(bar_index, takeProfitLevel, text="TP\n" + str.tostring(takeProfitLevel, "#.##"), style=label.style_label_left, color=color.green, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)
    label.new(bar_index, stopLossLevel, text="SL\n" + str.tostring(stopLossLevel, "#.##"), style=label.style_label_left, color=color.red, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)
    label.new(bar_index, close, text="SELL\n" + str.tostring(close, "#.##"), style=label.style_label_left, color=color.orange, textcolor=color.white, size=size.small, xloc=xloc.bar_index, yloc=yloc.price)

// Plot Buy/Sell labels on chart
plotshape(series=longCondition, title="BUY Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="SELL Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")