Barras de Momento RedK

Autora:ChaoZhang, Data: 2022-05-18 11:28:24
Tags:SMAEMAWMAHMA

Bars de Momento (Mo_Bars) oferece uma maneira diferente de visualizar o momento (relativo) - e usa alguns conceitos simples de TA para fornecer uma perspectiva diferente de como lemos mudanças de momento e incorporamos isso em nossa negociação.

A idéia aqui (e o próprio roteiro) é realmente super simples, e é (muito vagamente) inspirado pelo Elder's Impulse System (EIS) - então evoluído para alavancar alguns outros conceitos, e para se tornar menos confuso e mais fácil de ler.

A construção dos Mo_Bars

O conceito de base utiliza 3 linhas de média móvel: A primeira linha é uma MA relativamente rápida com uma duração curta - atua como a principal linha de rastreamento de preços

a segunda linha é ligeiramente mais lenta do que a linha principal - 2 a 3 bares de comprimento maior - e por padrão usará o valor aberto como fonte - isso funciona melhor para identificar quando o preço de fechamento começa a se mover mais rápido do que o aberto (como, barras fecham com mais frequência acima do que abrem) - esta linha atua como a linha de sinal - há uma configuração adicionada para um atraso adicional que utiliza suavização WMA regular - o atraso atua para ampliar o deslocamento relativo entre os 2 MAs

Para ambos estes MAs, eu escolho usar o RSS MA (Linha preguiçosa) - outros tipos de MA podem ser usados, mas a razão pela qual eu usei esse tipo de MA especificamente é que ele se move gracefully - e 2 Linhas preguiçosas se movendo juntos minimiza whipssaws de pequenas oscilações de preços - eu testei com outros tipos de MA e descobri que o RSS tem uma vantagem lá.

A terceira linha é uma MA muito mais lenta (longo 5 a 6 x a linha rápida) - e atua como um filtro ou uma linha de base. Quando estamos acima dessa linha, devemos favorecer posições longas - estamos em território de touros. Quando estamos abaixo dessa linha, favorecemos posições curtas e estamos em território de ursos. Ajuste esta linha conforme o seu estilo de negociação e prazo. (Escolhi usar o WMA como tipo MA para a linha de filtro... e há uma boa razão para isso - que vou ignorar por enquanto - mas em versões futuras, podemos adicionar outros tipos MA selecionáveis.)

Usando Mo_Bars

em um nível muito amplo, podemos usar Mo_Bars semelhante à forma como usamos um MACD - ambos são osciladores centrados e irrestrito - note a diferença que Mo_Bars é baseado em 3 MAs em vez de 2.

o comprimento da barra Mo_Bar reflete a distância entre o MA principal e o sinal MA - traçado em relação à linha de base (linha de filtro) - isso significa que o comprimento da barra representa o momento relativo entre os 2 MAs - Os Mo_Bars são então coloridos de uma forma que reflete aumento ou diminuição no valor desse momento (o visual aqui pode ter sido inspirado por outro indicador recentemente publicado por um de nossos estimados assistentes - funcionou perfeitamente - então créditos aqui:)

em termos simples, se a MA principal estiver abaixo do sinal MA, a barra é vermelha - e quando a MA principal estiver acima do sinal MA, a barra é verde - uma barra branca aparece geralmente quando há uma mudança detectada da direção do momento relativo (observe que esta não é a mesma que a direção da tendência - e isso é o que ajuda a mostrar e explorar a convergência e a divergência - semelhante a um MACD).

  • no gráfico acima, eu observei alguns exemplos de como visualizar o momento relativo desta forma expõe áreas de choque (Mo_Bars acima de zero, mas estão em vermelho ou em movimento para baixo, ou quando Mo_Bars estão abaixo de zero e verde ou em movimento para cima) - convergência / divergência com o preço - e como isso pode agir para expor a possibilidade de mudanças potenciais na ação ou tendência de preços.

  • Há muito mais para brincar com esta configuração - e talvez se houver interesse suficiente, possa haver futuros posts dedicados sobre como utilizá-la ou até mesmo para evoluí-la ainda mais - há muito potencial aqui, para adicionar mais filtros (talvez baseados em volume), alertas, sinais...etc - então vamos ver o interesse:)

Aqui está a configuração detalhada (gráfico superior) na qual o Mo_Bars é baseado As configurações para os MAs nos gráficos de preços foram combinadas / sincronizadas com as configurações do Mo_Bars no painel inferior para demonstrar como o script funciona e como ele traduz a ação MA no gráfico de preços para o que vemos abaixo.

backtest

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

Mais.