Barras de impulso de RedK

El autor:¿ Qué pasa?, Fecha: 2022-05-18 11:28:24
Las etiquetas:La SMAEl EMALa WMAHMA

Momentum Bars (Mo_Bars) ofrece una manera diferente de visualizar el momento (relativo) y utiliza algunos conceptos simples de TA para proporcionar una perspectiva diferente de cómo leemos los cambios de momento e incorporarlos en nuestra negociación.

La idea aquí (y el guión en sí) es realmente súper simple, y está (muy vagamente) inspirado en Elder's Impulse System (EIS) - luego evolucionó para aprovechar algunos otros conceptos, y para ser menos desordenado y más fácil de leer.

La construcción de los Mo_Bars

El concepto base utiliza 3 líneas de media móvil: la primera línea es una línea de seguimiento de precios relativamente rápida con una longitud corta - actúa como la línea principal de seguimiento de precios

la segunda línea es ligeramente más lenta que la línea principal - de 2 a 3 barras de longitud más larga - y por defecto utilizará el valor abierto como fuente - esto funciona mejor para identificar cuando el precio de cierre comienza a moverse más rápido que el abierto (como en, barras más frecuentemente cierran más alto de lo que abren) - esta línea actúa como la línea de señal - hay una configuración adicional para un retraso adicional que utiliza el suavizado WMA regular - el retraso actúa para magnificar el desplazamiento relativo entre los 2 MAs

para ambos de estos MAs, opto por usar el RSS MA (Línea Perezosa) - otros tipos de MA se pueden utilizar, pero la razón por la que usé ese tipo de MA específicamente es que se mueve graciosamente - y 2 Líneas Perezosas que se mueven juntos minimiza los golpes de los pequeños cambios de precios - probé con otros tipos de MA y encontré que el RSS tiene una ventaja allí.

la tercera línea es una MA mucho más lenta (longitud de 5 a 6 veces la línea rápida) - y actúa como un filtro o una línea de base. Cuando estamos por encima de esa línea, debemos favorecer las posiciones largas - estamos en territorio alcista. Cuando estamos por debajo de esa línea, favorecemos las posiciones cortas, y estamos en territorio bajista. Ajuste esta línea según se adapte a su estilo de negociación y marco de tiempo. (Elegí utilizar WMA como el tipo MA para la línea de filtro... y hay una buena razón para eso - que voy a omitir por ahora - pero en futuras versiones, podemos añadir otros tipos MA seleccionables.)

Utilizando Mo_Bars

a un nivel muy amplio, podemos usar Mo_Bars similar a cómo usamos un MACD - ambos son osciladores centrados e ilimitados - note la diferencia de que Mo_Bars se basa en 3 MAs en lugar de 2.

la longitud de la barra Mo_Bar refleja la distancia entre el MA principal y la señal MA - trazada en relación con la línea de base (línea de filtro) - eso significa que la longitud de la barra representa el momento relativo entre los 2 MAs - Las barras Mo_Bar se colorean de una manera que refleja aumento o disminución en el valor de ese momento (el visual aquí puede haber sido inspirado por otro indicador publicado recientemente por uno de nuestros estimados magos - funcionó perfectamente - así que debido crédito aquí:)

en términos simples, si el MA principal está por debajo del MA de la señal, la barra es roja - y cuando el MA principal está por encima del MA de la señal, la barra es verde - una barra blanca aparece generalmente cuando se detecta un cambio en la dirección del momento relativo (ten en cuenta que esto no es lo mismo que la dirección de la tendencia - y eso es lo que ayuda a mostrar y explotar la convergencia y la divergencia - similar a un MACD)

  • En el gráfico anterior, noté algunos ejemplos de cómo visualizar el impulso relativo de esta manera expone áreas de corte (Mo_Bars por encima de cero, pero están en rojo o en movimiento hacia abajo, o cuando Mo_Bars están por debajo de cero y verde o en movimiento hacia arriba) - convergencia / divergencia con el precio - y cómo esto puede actuar para exponer la posibilidad de posibles cambios en la acción o tendencia del precio.

  • Hay mucho más para jugar con esta configuración - y tal vez si hay suficiente interés puede haber futuras publicaciones dedicadas sobre cómo utilizarla o incluso evolucionarla aún más - hay mucho potencial aquí, para agregar más filtros (tal vez basados en el volumen), alertas, señales...etc. - así que veamos el interés :)

Aquí está la configuración detallada (gráfico superior) en la que se basa Mo_Bars Los ajustes para los MAs en los gráficos de precios se han emparejado / sincronizado con los ajustes de Mo_Bars en el panel inferior para demostrar cómo funciona el script y cómo traduce la acción MA en el gráfico de precios a lo que vemos a continuación.

Prueba posterior

img


/*backtest
start: 2022-05-10 00:00:00
end: 2022-05-16 23:59:00
period: 3m
basePeriod: 1m
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/
// © RedKTrader

//@version=5
indicator('[dev]RedK Momentum Bars', shorttitle='RedK MoBars v3.0', explicit_plot_zorder = true, timeframe='', timeframe_gaps=false)

// A trading system composed of 2 short Lazy Lines (preferably one open and one close - 2-3 bars apart) and a WMA long filter 
// loosely inspired by Edler Impulse
// v2.0 cleaned up code and added MA options to be able to mix and match, and experiment with various setups 
// default values (my personal preference) remain the same as in v1.0 
// for example, some traders will consider "bear territory" only below SMA50, others will use EMA30 .. and so on.
// ---------------------------------------------------------------------------------------------------------------
// MoBars v3.0: 
// updated defaults to match the most common 3x MA cross-over set-up of SMA (10, 20, 50)
// updated visuals to push the 0 line to the background of the plot (using the explcit_plot_zorder param)
// and added alerts for crossing up, down and swing around the 0 line (the Bullish/Bearish Filter MA)

//==============================================================================
f_LazyLine(_data, _length) =>
    w1 = 0,     w2 = 0,     w3 = 0
    L1 = 0.0,   L2 = 0.0,   L3 = 0.0
    w = _length / 3

    if _length > 2
        w2 := math.round(w)
        w1 := math.round((_length - w2) / 2)
        w3 := int((_length - w2) / 2)

        L1 := ta.wma(_data, w1)
        L2 := ta.wma(L1, w2)
        L3 := ta.wma(L2, w3)
        
    else
        L3 := _data
        
    L3
//==============================================================================

// =============================================================================    
f_getMA(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) : 
      type == "EMA" ? ta.ema(source, length) :
      type == "WMA" ? ta.wma(source, length) :
      type == "HMA" ? ta.hma(source, length) :
      f_LazyLine(source, length)
// =============================================================================    

// ------------------------------------------------------------------------------------------------
// Inputs
// Note, in v3.0, changed default lengths to 10, 20 and 50  -- and all MA types to SMA. 
// ------------------------------------------------------------------------------------------------

Fast_Src    = input.source(close,   title='Fast MA Source',          inline = 'Fast')
Fast_Length = input.int(10,          title = 'Length',   minval = 1, inline = 'Fast')
Fast_Type   = input.string('SMA', title = 'Type',                    inline = 'Fast',
  options = ['RSS_WMA', 'WMA', 'EMA', 'SMA', 'HMA'])

Slow_Src    = input.source(close,    title='Slow MA Source',         inline = 'Slow')
Slow_Length = input.int(20,          title='Length',     minval = 1, inline = 'Slow')
Slow_Type   = input.string('SMA', title = 'Type',                    inline = 'Slow',
  options = ['RSS_WMA', 'WMA', 'EMA', 'SMA', 'HMA'])

Slow_Delay  = input.int(3,          title='Delay (1 = None)',       minval = 1)

Fil_Length  = input.int(50,       title='Filter MA Length', minval = 1, inline = 'Filter')
Fil_Type    = input.string('SMA', title = 'Type',                   inline = 'Filter',
  options = ['RSS_WMA', 'WMA', 'EMA', 'SMA', 'HMA'])


// ------------------------------------------------------------------------------------------------
// Calculation
// ------------------------------------------------------------------------------------------------

Fast    = f_getMA(Fast_Src, Fast_Length, Fast_Type)
Slow    = f_getMA(Slow_Src, Slow_Length, Slow_Type)

Filter  = f_getMA(close, Fil_Length, Fil_Type)

Fast_M  = Fast - Filter
Slow_M  = Slow - Filter

Rel_M   = ta.wma(Slow_M, Slow_Delay)

// prep the Momentum bars
o = Rel_M
c = Fast_M
h = math.max(o, c)
l = math.min(o, c)

rising      = ta.change(c) > 0


// ------------------------------------------------------------------------------------------------
// Colors & Plots
// ------------------------------------------------------------------------------------------------

hline(0, title = 'Zero Line', color = color.blue, linestyle = hline.style_solid)

c_barup     = #11ff20ff
c_bardn     = #ff1111ff
c_bardj     = #ffffffff

c_barupb    = #1b5e20ff
c_bardnb    = #981919ff
c_bardjb    = #9598a1ff

barcolor    = c > o and rising ? c_barup : c < o and not rising ? c_bardn : c_bardj
borcolor    = c > o and rising ? c_barupb : c < o and not rising ? c_bardnb : c_bardjb
//plotcandle(o, h, l, c, 'MoBars', barcolor, barcolor, bordercolor = borcolor)


// ===========================================================================================================
//      v3.0 adding alerts 
// these alerts will trigger as soon as the Momentum Bar touches above the filter line 
// this approach can lead to "false signals" but also has an advantage (of alerting to a possible mood/mode change)
// another option - maybe in an updated version - could be to trigger alerts *only* when the full Momentum Bar completely clears the filter line (above or below)
// and it's easy to make that a user choice in the study inputs
// ===========================================================================================================

Alert_up    = ta.crossover(h,0)
Alert_dn    = ta.crossunder(l,0)
Alert_swing = Alert_up or Alert_dn

// "." in alert title for the alerts to show in the right order up/down/swing 
alertcondition(Alert_up,    ".   MoBars Crossing 0 Up",         "MoBars Up - Bullish Mode Detected!")
alertcondition(Alert_dn,    "..  MoBars Crossing 0 Down",       "MoBars Down - Bearish Mode Detected!")
alertcondition(Alert_swing, "... MoBars Crossing 0",            "Mobars Swing - Possible Reversal Detected!")



if Alert_up
    strategy.entry("Enter Long", strategy.long)
else if Alert_dn
    strategy.entry("Enter Short", strategy.short)

Relacionados

Más.