Estrategia de reversión de pivote de múltiples marcos temporales y sistema de stop-profit y stop-loss dinámico porcentual

MTF Pivot TP SL
Fecha de creación: 2025-02-08 15:04:47 Última modificación: 2025-02-08 15:04:47
Copiar: 1 Número de Visitas: 412
1
Seguir
1617
Seguidores

Estrategia de reversión de pivote de múltiples marcos temporales y sistema de stop-profit y stop-loss dinámico porcentual

Descripción general

La estrategia es un sistema de negociación avanzado basado en análisis de múltiples períodos de tiempo, que captura oportunidades de reversión del mercado mediante la identificación de puntos centrales clave en períodos de tiempo más altos. La estrategia combina un mecanismo de stop loss de porcentaje dinámico para controlar el riesgo de manera efectiva y buscar ganancias estables. El sistema también incluye control de intervalo de negociación y funciones de prueba de rango de tiempo, lo que lo hace más adecuado para un entorno de negociación de disco real.

Principio de estrategia

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

  1. El análisis de puntos cardinales se utiliza en períodos de tiempo más largos (de 60 minutos por defecto) para definir las condiciones de formación de los centros a través de los parámetros leftBars y rightBars.
  2. Gestiona el riesgo y los objetivos de ganancias de cada operación mediante el cálculo dinámico de la posición de stop-loss en porcentaje.
  3. El análisis de ciclo de tiempo múltiple proporciona un juicio más fiable de la estructura del mercado y reduce las señales falsas.
  4. El mecanismo de control del intervalo de transacción (por defecto 1440 minutos) evita el exceso de transacciones y mejora la calidad de la señal.
  5. La función de prueba de rango de tiempo permite la verificación de estrategias en un rango histórico específico.

Ventajas estratégicas

  1. El análisis de ciclo de tiempo múltiple ofrece una visión más completa del mercado y reduce las falsas rupturas.
  2. El porcentaje dinámico de stop loss se adapta a diferentes entornos de mercado y mejora la estabilidad de la estrategia.
  3. El control del intervalo de transacción es efectivo para evitar el exceso de transacciones y reducir los costos de las transacciones.
  4. La función de prueba de rango de tiempo facilita la optimización de la estrategia y el análisis del rendimiento histórico.
  5. La estructura del código es clara, fácil de mantener y modificar.

Riesgo estratégico

  1. En un mercado muy volátil, el porcentaje fijo de stop loss puede ser poco flexible.
  2. El intervalo de negociación más largo puede perder parte de la señal válida.
  3. El retraso en la identificación de los puntos centrales puede haber provocado que el tiempo de entrada no sea lo suficientemente óptimo.
  4. En el mercado horizontal puede haber demasiadas señales falsas.

Dirección de optimización de la estrategia

  1. Introducción de un indicador de fluctuación adaptativo para ajustar dinámicamente el porcentaje de pérdidas de parada.
  2. Añadir filtros de entornos de mercado para ajustar los parámetros de estrategia según la intensidad de las diferentes tendencias.
  3. Integración de análisis de tráfico para mejorar la fiabilidad de la señal de entrada.
  4. Realizar un ajuste intermitente de las transacciones dinámicas basadas en las fluctuaciones del mercado.
  5. La inclusión de la protección del mecanismo móvil de suspensión de pérdidas ha sido muy beneficiosa.

Resumir

La estrategia proporciona un marco completo para el sistema de negociación a través de análisis de múltiples ciclos de tiempo y gestión de riesgos dinámicos. Si bien hay algunos lugares que necesitan ser optimizados, el concepto de diseño general es razonable y tiene una buena practicidad. A través de la orientación de optimización sugerida, la estrategia espera obtener un rendimiento más estable en diferentes entornos de mercado.

Código Fuente de la Estrategia
/*backtest
start: 2025-01-01 00:00:00
end: 2025-01-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Pivot Reversal Strategy with MTF TP & SL in Percent and Test Range", overlay=true)

// Входные параметры
higher_tf = input.timeframe("60", title="Higher Timeframe for Breakout Check")  // Таймфрейм для анализа пробоя
leftBars = input(4, title="Left Bars")
rightBars = input(2, title="Right Bars")
TP_percent = input.float(1.0, title="Take Profit (%)", minval=0.1, step=0.1)   // Тейк-профит в процентах
SL_percent = input.float(0.5, title="Stop Loss (%)", minval=0.1, step=0.1)    // Стоп-лосс в процентах
trade_interval = input.int(1440, title="Minimum Time Between Trades (Minutes)") // Интервал между сделками

// Диапазон тестирования (используем UNIX timestamps)
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")  // Стартовая дата для тестирования
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")    // Конечная дата для тестирования

// Проверка, попадает ли текущая свеча в указанный диапазон времени
in_test_range = true

// Определение пивотов на более крупном таймфрейме
higher_tf_high = request.security(syminfo.tickerid, higher_tf, ta.pivothigh(leftBars, rightBars))
higher_tf_low = request.security(syminfo.tickerid, higher_tf, ta.pivotlow(leftBars, rightBars))

// Последнее время открытия сделки
var float last_trade_time = na

// Логика для лонга
swh_cond = not na(higher_tf_high)
hprice = 0.0
hprice := swh_cond ? higher_tf_high : hprice[1]
le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

if le and in_test_range and (na(last_trade_time) or (time - last_trade_time >= trade_interval * 60 * 1000))
    tp_price_long = hprice * (1 + TP_percent / 100)  // Тейк-профит в процентах
    sl_price_long = hprice * (1 - SL_percent / 100)  // Стоп-лосс в процентах
    strategy.entry("PivRevLE", strategy.long, stop=hprice + syminfo.mintick)
    strategy.exit("TP_SL_Long", from_entry="PivRevLE", 
                  limit=tp_price_long, 
                  stop=sl_price_long)
    last_trade_time := time

// Логика для шорта
swl_cond = not na(higher_tf_low)
lprice = 0.0
lprice := swl_cond ? higher_tf_low : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

if se and in_test_range and (na(last_trade_time) or (time - last_trade_time >= trade_interval * 60 * 1000))
    tp_price_short = lprice * (1 - TP_percent / 100)  // Тейк-профит в процентах
    sl_price_short = lprice * (1 + SL_percent / 100)  // Стоп-лосс в процентах
    strategy.entry("PivRevSE", strategy.short, stop=lprice - syminfo.mintick)
    strategy.exit("TP_SL_Short", from_entry="PivRevSE", 
                  limit=tp_price_short, 
                  stop=sl_price_short)
    last_trade_time := time

// Для наглядности отображаем уровни на графике
plot(le and in_test_range ? hprice * (1 + TP_percent / 100) : na, color=color.green, title="Long Take Profit")
plot(le and in_test_range ? hprice * (1 - SL_percent / 100) : na, color=color.red, title="Long Stop Loss")
plot(se and in_test_range ? lprice * (1 - TP_percent / 100) : na, color=color.green, title="Short Take Profit")
plot(se and in_test_range ? lprice * (1 + SL_percent / 100) : na, color=color.red, title="Short Stop Loss")