En la carga de los recursos... Cargando...

Estrategia de ruptura de impulso basada en el juicio del ciclo con medias móviles

El autor:¿ Qué pasa?, Fecha: 2024-01-23 14:51:27
Las etiquetas:

img

Resumen general

Esta estrategia calcula las líneas EMA de diferentes períodos para determinar la etapa actual del ciclo del mercado y utiliza ATR para generar señales de ruptura de impulso para operaciones de alta probabilidad que siguen tendencias.

Estrategia lógica

  1. Las líneas de EMA de 3 días, de 5 días, de 20 días y de 40 días
  2. Compare las líneas de la EMA para determinar en qué de las seis etapas del ciclo se encuentra actualmente el mercado
    • 5 días > 20 días > 40 días es el Ciclo 1
    • 20 días > 5 días > 40 días es el Ciclo 2 - ¿ Qué?
  3. Después de la determinación del ciclo, calcular el indicador ATR y establecer los múltiplos de ATR como criterios de ruptura
  4. Una señal de compra se genera cuando el precio se rompe por encima de la parada de seguimiento ATR de la barra anterior
  5. Una señal de venta se genera cuando el precio cae por debajo de la parada de seguimiento ATR de la barra anterior
  6. A través de esta combinación de juicios, se pueden lograr operaciones de alta probabilidad que sigan tendencias

Ventajas

  1. El juicio del ciclo aumenta la fiabilidad de la señal

    Al juzgar las posiciones relativas de las diferentes líneas EMA, se puede determinar eficazmente la etapa actual del ciclo del mercado, evitando señales erróneas en ciclos inadecuados.

  2. La fuga de ATR filtra las señales falsas

    El ATR puede expresar efectivamente la volatilidad del mercado.

  3. El juicio combinado constituye oportunidades comerciales de alta probabilidad

    La combinación orgánica de juicio de ciclo y ruptura de ATR crea señales con una probabilidad mucho mayor, lo que también aumenta la rentabilidad de las operaciones.

Los riesgos

  1. Optimización de parámetros difícil

    Con múltiples parámetros, la dificultad de optimización es alta.

  2. Hay retraso.

    En los mercados que cambian rápidamente, tanto la EMA como la ATR tienen cierto grado de retraso, lo que puede generar señales erróneas o perder oportunidades.

  3. Se requiere un stop loss estricto

    Ningún indicador técnico puede evitar completamente señales erróneas.

Direcciones de optimización

  1. Optimización de parámetros adicionales

    Encuentra combinaciones óptimas de parámetros a través de datos históricos más extensos.

  2. Aumentar la adaptabilidad

    Considerar el ajuste automático de los parámetros ATR basados en la volatilidad del mercado para mejorar la adaptabilidad.

  3. Incorporar otros indicadores

    Trate de incorporar otros indicadores como la volatilidad y el volumen para ayudar al juicio y mejorar la calidad de la señal.

Conclusión

Esta estrategia determina ciclos con EMA y establece criterios de ruptura de impulso con ATR para lograr operaciones de alta probabilidad de tendencia. Tiene ventajas como juicio de ciclo, filtrado de señales falsas y mejora de la calidad de la señal. Pero existen riesgos como la optimización de parámetros difíciles y el retraso.


/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy",overlay = true)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter

Más.