Estrategia de trading semanal con soporte y resistencia de múltiples niveles basada en la reversión a la media

Pivot SR MR SMA RSI ATR MA VOL
Fecha de creación: 2025-02-18 18:04:15 Última modificación: 2025-02-18 18:04:15
Copiar: 2 Número de Visitas: 441
1
Seguir
1617
Seguidores

Estrategia de trading semanal con soporte y resistencia de múltiples niveles basada en la reversión a la media

Descripción general

Esta estrategia es un sistema de comercio de retorno a la media basado en el eje de la circunferencia (el Pivot Point). Determina el punto de entrada y salida de las operaciones mediante el cálculo de los niveles de soporte (S1-S4) y resistencia (R1-R4) cada semana. La estrategia adopta un método de construcción de posición por etapas, comprando varias veces en diferentes niveles de soporte y obteniendo ganancias en los niveles de resistencia correspondientes.

Principio de estrategia

El núcleo de la estrategia es calcular los puntos centrales de la semana a partir de los máximos, mínimos y precios de cierre de la semana anterior, y luego determinar varios niveles de soporte y resistencia en función de la distancia de puntos predeterminada. Compra cuando el precio toque el soporte y establece un objetivo de ganancia en los niveles de resistencia correspondientes. Punto central = (precio más alto de la semana pasada + precio más bajo de la semana pasada + precio de cierre de la semana pasada) / 3 Las estrategias permiten un máximo de 4 posiciones al mismo tiempo, cada una de las cuales corresponde a diferentes niveles de soporte y resistencia. Todas las posiciones se recalculan a los nuevos niveles de negociación al comienzo de cada semana. Este diseño garantiza la continuidad de las operaciones y se adapta a los cambios en el mercado.

Ventajas estratégicas

  1. La lógica de la transacción es clara, fácil de entender y ejecutar.
  2. El método de construcción por etapas reduce el riesgo de una sola transacción
  3. Utiliza puntos de resistencia de soporte a nivel de la circunferencia para reducir el impacto del ruido durante el día
  4. La estrategia puede ajustar los parámetros de manera flexible según las características de los diferentes mercados
  5. Controlar el riesgo a través del porcentaje de posesión
  6. No hay tiempo para imponer límites de liquidación y dar a las transacciones suficiente margen de lucro

Riesgo estratégico

  1. No se ha establecido un stop loss, lo que podría conducir a una mayor retirada en un mercado de fuerte tendencia.
  2. Las posiciones múltiples pueden requerir más capital
  3. Las señales falsas pueden aparecer en mercados muy volátiles
  4. La configuración incorrecta de la posición de apoyo puede conducir a una posición irracional de la bodega. Para reducir el riesgo, se recomienda agregar un filtro de tendencia y abrir posiciones solo en una tendencia alcista; al mismo tiempo, se puede configurar un stop loss dinámico basado en ATR.

Dirección de optimización de la estrategia

  1. Aumentar el mecanismo de confirmación de la entrega y mejorar la fiabilidad de la señal de entrada
  2. Introducción de indicadores técnicos como el RSI para el filtrado de sobrecompra y sobreventa
  3. Desarrollo de mecanismos de confirmación de múltiples ciclos de tiempo para reducir las señales falsas
  4. Optimizar el sistema de gestión de posiciones y ajustar el número de almacenes según la dinámica de la volatilidad del mercado
  5. Aumentar el análisis de correlación para evitar posiciones simultáneas en mercados altamente correlacionados

Resumir

Esta es una estrategia de regreso a la media basada en la teoría clásica del análisis técnico, para capturar oportunidades de negociación a través de un retroceso de ruptura en los puntos de resistencia apoyados por la circunferencia. La estrategia está diseñada de manera sencilla y flexible, adecuada para su aplicación en mercados con gran volatilidad.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ViZiV

//@version=5
strategy("Weekly Pivot Strategy, Created by ViZiV", overlay=true, pyramiding=50, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, dynamic_requests=true)

// This is my first COMPLETED strategy, go easy on me :) - Feel free to imrprove upon this script by adding more features if you feel up to the task. Im 100% confiedent there are better coders than me :) I'm still learning.

// This is a LONG ONLY SWING STRATEGY (Patience REQUIRED) that being said, you can go short at you're own discretion. I prefer to use on NQ / US100 / USTech 100 but not limited to it. Im sure it can work in most markets. "You'll need to change settings to suit you're market".

// IMPORTANT NOTE: "default_qty_type=strategy.percent_of_equity" Can be changed to "Contacts" within the properties tab which allow you to see backtest of other markets. Reccomend 1 contract but it comes to preference.

// Inputs for support/resistance distances (Defined by Points). // IMPORTANT NOTE: Completely user Defined. Figure out best settings for what you're trading. Each market is different with different characteristics. Up to you to figure out YOU'RE market volatility for better results. 
s1_offset = input.float(155, "S1 Distance", step=1)
s2_offset = input.float(310, "S2 Distance", step=1)
s3_offset = input.float(465, "S3 Distance", step=1)
s4_offset = input.float(775, "S4 Distance", step=1)
r1_offset = input.float(155, "R1 Distance", step=1)
r2_offset = input.float(310, "R2 Distance", step=1)
r3_offset = input.float(465, "R3 Distance", step=1)
r4_offset = input.float(775, "R4 Distance", step=1)

// Weekly pivot calculation
var float pivot = na
var float s1 = na
var float s2 = na
var float s3 = na
var float s4 = na
var float r1 = na
var float r2 = na
var float r3 = na
var float r4 = na

// Get weekly data (Pivot Calculation)
prevWeekHigh = request.security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on)
prevWeekLow = request.security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on)
prevWeekClose = request.security(syminfo.tickerid, "W", close[1], lookahead=barmerge.lookahead_on)

// Track active trades
var array<string> entry_ids = array.new<string>(0)
var array<float> profit_targets = array.new<float>(0)

// Update weekly levels
isNewWeek = ta.change(time("W")) != 0
if isNewWeek or na(pivot)
    pivot := (prevWeekHigh + prevWeekLow + prevWeekClose) / 3
    s1 := pivot - s1_offset
    s2 := pivot - s2_offset
    s3 := pivot - s3_offset
    s4 := pivot - s4_offset
    r1 := pivot + r1_offset
    r2 := pivot + r2_offset
    r3 := pivot + r3_offset
    r4 := pivot + r4_offset

// Plot current week's levels
plot(pivot, "Pivot", color=color.gray, linewidth=2)
plot(s1, "S1", color=color.blue, linewidth=1)
plot(s2, "S2", color=color.blue, linewidth=1)
plot(s3, "S3", color=color.blue, linewidth=1)
plot(s4, "S4", color=color.blue, linewidth=1)
plot(r1, "R1", color=color.red, linewidth=1)
plot(r2, "R2", color=color.red, linewidth=1)
plot(r3, "R3", color=color.red, linewidth=1)
plot(r4, "R4", color=color.red, linewidth=1)

// Function to create unique trade entries
checkEntry(level, target, entryNumber) =>
    currentWeek = str.tostring(year(time)) + "_" + str.tostring(weekofyear(time))
    entryId = "Entry" + str.tostring(entryNumber) + "_W" + currentWeek
    
    if low <= level and not array.includes(entry_ids, entryId)
        array.push(entry_ids, entryId)
        array.push(profit_targets, target)
        strategy.entry(entryId, strategy.long)
        strategy.exit("Exit" + entryId, entryId, limit=target)

// Check all entry levels
checkEntry(s1, r1, 1)
checkEntry(s2, r2, 2)
checkEntry(s3, r3, 3)
checkEntry(s4, r4, 4)

// Clean up completed trades using while loop
i = array.size(entry_ids) - 1
while i >= 0
    entryId = array.get(entry_ids, i)
    target = array.get(profit_targets, i)
    
    if high >= target
        array.remove(entry_ids, i)
        array.remove(profit_targets, i)
    i := i - 1