Estrategia de relación de media móvil de cadena filtrada de doble tendencia


Fecha de creación: 2023-12-28 17:37:14 Última modificación: 2023-12-28 17:37:14
Copiar: 1 Número de Visitas: 623
1
Seguir
1623
Seguidores

Estrategia de relación de media móvil de cadena filtrada de doble tendencia

Descripción general

Esta estrategia se basa en un indicador de doble promedio móvil, combinado con un filtro de Brin y un indicador de doble filtro de tendencia, y utiliza una estrategia de seguimiento de tendencias con un mecanismo de salida en cadena. La estrategia tiene como objetivo utilizar el indicador de proporción de promedio móvil para identificar la dirección de la tendencia de la línea media larga, elegir el mejor punto de entrada cuando la dirección de la tendencia es clara, y configurar un bloqueo, un bloqueo de pérdidas y un mecanismo de salida para bloquear las ganancias y reducir las pérdidas.

Principio de estrategia

  1. Calcula el promedio móvil rápido (la línea de 10 días) y el promedio móvil lento (la línea de 50 días) y calcula su proporción, llamada proporción de la media móvil de precios. Esta proporción puede identificar eficazmente los cambios en la tendencia de la línea larga en los precios.
  2. Convierte el promedio de precios móviles en un porcentaje, es decir, el porcentaje de la fuerza relativa de la relación actual en el tiempo pasado. El porcentaje se define como un oscilante.
  3. Cuando el oscilante supera el umbral de compra fijado (<10), genera una señal de compra, y cuando el umbral de venta se rompe (<90), genera una señal de venta, para seguir la tendencia.
  4. En combinación con el indicador de ancho de banda de Brin para filtrar las señales de negociación, la operación se realiza cuando la banda de Brin se estrecha.
  5. El uso de un indicador de filtro de doble tendencia, que genera una señal de compra solo cuando el precio está en un canal de tendencia ascendente, y una señal de venta solo cuando el precio está en un canal descendente, evita la operación de contratiempo.
  6. Configuración de un mecanismo de salida en cadena, que incluye stop, stop loss y salida combinada, con la posibilidad de configurar varias condiciones de salida, dando prioridad a la salida con mayor beneficio.

Ventajas estratégicas

  1. Un mecanismo de doble filtro de tendencias, que permite determinar de manera fiable la dirección de las tendencias dominantes y evitar operaciones de contratiempo.
  2. El índice de proporción de las medias móviles es más eficaz para determinar el cambio de tendencia que una sola media móvil.
  3. El indicador de ancho de banda de Brin es eficaz para ubicar el mercado en períodos de baja volatilidad, cuando las señales de negociación son más confiables.
  4. El mecanismo de salida en cadena hace que las ganancias sean más estables, maximizando todas las ganancias.

Riesgos y soluciones

  1. Cuando no hay una tendencia obvia en la oscilación, se producen más señales erróneas y reversión. La solución es combinar el filtro de ancho de banda de Brin con la operación de estrechamiento.
  2. Cuando hay una reversión de tendencia evidente, la media móvil produce un retraso y no se puede determinar la señal de reversión en el primer momento. La solución es acortar adecuadamente el parámetro de ciclo de la media móvil.
  3. En el caso de una brecha en el salto aéreo, el punto de parada puede ser golpeado instantáneamente, causando una mayor pérdida. La solución es el parámetro de relajación adecuada del punto de parada.

Dirección de optimización de la estrategia

  1. Optimización de parámetros. Se pueden realizar pruebas de extremo a extremo con el ciclo de las medias móviles, los puntos de venta y venta de los oscilantes, los parámetros de las bandas de Bryn y los parámetros de filtración de tendencias para encontrar la combinación óptima de parámetros.
  2. La integración de otros indicadores. Se puede considerar la inclusión de otros indicadores de cambio de tendencia, como los indicadores KD, MACD, etc., para mejorar la precisión de la estrategia.
  3. Aprendizaje automático: puede recopilar datos históricos, utilizar modelos de entrenamiento de algoritmos de aprendizaje automático, optimizar dinámicamente los parámetros y realizar ajustes de adaptación de los parámetros.

Resumir

Esta estrategia combina el uso de un indicador de doble promedio móvil y un indicador de la banda de Brin para determinar la dirección de la tendencia de la línea media larga, buscar el mejor punto de entrada después de la confirmación de la tendencia, y configurar un mecanismo de salida en cadena para bloquear las ganancias, con una alta fiabilidad y una eficacia evidente. La estrategia puede mejorar aún más y aumentar la rentabilidad mediante la optimización de parámetros, la adición de otros indicadores de juicio auxiliares y el aprendizaje automático.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-20 00:00:00
end: 2023-12-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Premium MA Ratio Strategy", overlay = true)

// Input: Adjustable parameters for Premium MA Ratio
fast_length = input(10, title = "Fast MA Length")
slow_length = input(50, title = "Slow MA Length")
oscillator_threshold_buy = input(10, title = "Oscillator Buy Threshold")
oscillator_threshold_sell = input(90, title = "Oscillator Sell Threshold")

// Input: Adjustable parameters for Bollinger Bands
bb_length = input(20, title = "Bollinger Bands Length")
bb_source = input(close, title = "Bollinger Bands Source")
bb_deviation = input(2.0, title = "Bollinger Bands Deviation")
bb_width_threshold = input(30, title = "BB Width Threshold")
use_bb_filter = input(true, title = "Use BB Width Filter?")

// Input: Adjustable parameters for Trend Filter
use_trend_filter = input(true, title = "Use Trend Filter?")
trend_filter_period_1 = input(50, title = "Trend Filter Period 1")
trend_filter_period_2 = input(200, title = "Trend Filter Period 2")
use_second_trend_filter = input(true, title = "Use Second Trend Filter?")

// Input: Adjustable parameters for Exit Strategies
use_exit_strategies = input(true, title = "Use Exit Strategies?")
use_take_profit = input(true, title = "Use Take Profit?")
take_profit_ticks = input(150, title = "Take Profit in Ticks")
use_stop_loss = input(true, title = "Use Stop Loss?")
stop_loss_ticks = input(100, title = "Stop Loss in Ticks")
use_combined_exit = input(true, title = "Use Combined Exit Strategy?")
combined_exit_ticks = input(50, title = "Combined Exit Ticks")

// Input: Adjustable parameters for Time Filter
use_time_filter = input(false, title = "Use Time Filter?")
start_hour = input(8, title = "Start Hour")
end_hour = input(16, title = "End Hour")

// Calculate moving averages
fast_ma = sma(close, fast_length)
slow_ma = sma(close, slow_length)

// Calculate the premium price moving average ratio
premium_ratio = fast_ma / slow_ma * 100

// Calculate the percentile rank of the premium ratio
percentile_rank(src, length) =>
    rank = 0.0
    for i = 1 to length
        if src > src[i]
            rank := rank + 1.0
    percentile = rank / length * 100

// Calculate the percentile rank for the premium ratio using slow_length periods
premium_ratio_percentile = percentile_rank(premium_ratio, slow_length)

// Calculate the oscillator based on the percentile rank
oscillator = premium_ratio_percentile

// Dynamic coloring for the oscillator line
oscillator_color = oscillator > 50 ? color.green : color.red

// Plot the oscillator on a separate subplot as a line
hline(50, "Midline", color = color.gray)
plot(oscillator, title = "Oscillator", color = oscillator_color, linewidth = 2)

// Highlight the overbought and oversold areas
bgcolor(oscillator > oscillator_threshold_sell ? color.red : na, transp = 80)
bgcolor(oscillator < oscillator_threshold_buy ? color.green : na, transp = 80)

// Plot horizontal lines for threshold levels
hline(oscillator_threshold_buy, "Buy Threshold", color = color.green)
hline(oscillator_threshold_sell, "Sell Threshold", color = color.red)

// Calculate Bollinger Bands width
bb_upper = sma(bb_source, bb_length) + bb_deviation * stdev(bb_source, bb_length)
bb_lower = sma(bb_source, bb_length) - bb_deviation * stdev(bb_source, bb_length)
bb_width = bb_upper - bb_lower

// Calculate the percentile rank of Bollinger Bands width
bb_width_percentile = percentile_rank(bb_width, bb_length)

// Plot the Bollinger Bands width percentile line
plot(bb_width_percentile, title = "BB Width Percentile", color = color.blue, linewidth = 2)

// Calculate the trend filters
trend_filter_1 = sma(close, trend_filter_period_1)
trend_filter_2 = sma(close, trend_filter_period_2)

// Strategy logic
longCondition = crossover(premium_ratio_percentile, oscillator_threshold_buy)
shortCondition = crossunder(premium_ratio_percentile, oscillator_threshold_sell)

// Apply Bollinger Bands width filter if enabled
if (use_bb_filter)
    longCondition := longCondition and bb_width_percentile < bb_width_threshold
    shortCondition := shortCondition and bb_width_percentile < bb_width_threshold

// Apply trend filters if enabled
if (use_trend_filter)
    longCondition := longCondition and (close > trend_filter_1)
    shortCondition := shortCondition and (close < trend_filter_1)

// Apply second trend filter if enabled
if (use_trend_filter and use_second_trend_filter)
    longCondition := longCondition and (close > trend_filter_2)
    shortCondition := shortCondition and (close < trend_filter_2)

// Apply time filter if enabled
if (use_time_filter)
    longCondition := longCondition and (hour >= start_hour and hour <= end_hour)
    shortCondition := shortCondition and (hour >= start_hour and hour <= end_hour)

// Generate trading signals with exit strategies
if (use_exit_strategies)
    strategy.entry("Buy", strategy.long, when = longCondition)
    strategy.entry("Sell", strategy.short, when = shortCondition)
    
    // Define unique exit names for each order
    buy_take_profit_exit = "Buy Take Profit"
    buy_stop_loss_exit = "Buy Stop Loss"
    sell_take_profit_exit = "Sell Take Profit"
    sell_stop_loss_exit = "Sell Stop Loss"
    combined_exit = "Combined Exit"
    
    // Exit conditions for take profit
    if (use_take_profit)
        strategy.exit(buy_take_profit_exit, from_entry = "Buy", profit = take_profit_ticks)
        strategy.exit(sell_take_profit_exit, from_entry = "Sell", profit = take_profit_ticks)
    
    // Exit conditions for stop loss
    if (use_stop_loss)
        strategy.exit(buy_stop_loss_exit, from_entry = "Buy", loss = stop_loss_ticks)
        strategy.exit(sell_stop_loss_exit, from_entry = "Sell", loss = stop_loss_ticks)
    
    // Combined exit strategy
    if (use_combined_exit)
        strategy.exit(combined_exit, from_entry = "Buy", loss = combined_exit_ticks, profit = combined_exit_ticks)