Les barres de dynamique REDK

Auteur:ChaoZhang est là., Date: 2022-05-18 11h28 et 24h
Les étiquettes:SMALe taux d'intérêtLa WMAHMA

Les barres de momentum (Mo_Bars) offrent une façon différente de visualiser la dynamique (relative) - et utilisent des concepts simples de TA pour fournir une perspective différente sur la façon dont nous lisons les changements de momentum et l'incorporons dans notre trading.

L'idée ici (et le scénario lui-même) est vraiment super simple, et est (très librement) inspiré par Elder's Impulse System (EIS) - puis évolué pour tirer parti de certains autres concepts, et devenir moins encombrant et plus facile à lire.

La construction des Mo_Bars

Le concept de base utilise 3 lignes moyennes mobiles: la première ligne est une ligne de suivi des prix relativement rapide et de courte durée - elle sert de ligne principale de suivi des prix

la deuxième ligne est légèrement plus lente que la ligne principale - 2 à 3 barres de plus de longueur - et utilisera par défaut la valeur d'ouverture comme source - cela fonctionne mieux pour identifier quand le prix de clôture commence à se déplacer plus rapidement que l'ouverture (comme dans, les barres plus fréquemment fermer plus haut qu'ils ouvrent) - cette ligne agit comme la ligne de signal - il y a un réglage supplémentaire pour un retard supplémentaire qui utilise l'assouplissement régulier WMA - le retard agit pour agrandir le déplacement relatif entre les 2 MA

Pour ces deux MA, je choisis d'utiliser le RSS MA (Ligne paresseuse) - d'autres types de MA peuvent être utilisés, mais la raison pour laquelle j'ai utilisé ce type de MA spécifiquement est qu'il se déplace gracieusement - et 2 Lines paresseuses se déplaçant ensemble minimise les coups de fouet de petites fluctuations de prix - j'ai testé avec d'autres types de MA et j'ai trouvé que le RSS a un avantage là.

la troisième ligne est une MA beaucoup plus lente (longueur 5 à 6 fois la ligne rapide) - et agit comme un filtre ou une ligne de base. Lorsque nous sommes au-dessus de cette ligne, nous devrions privilégier les positions longues - nous sommes en zone haussière. Lorsque nous sommes en dessous de cette ligne, nous privilégions les positions courtes, et nous sommes en zone baissière. (Je choisis d'utiliser WMA comme type MA pour la ligne de filtre... et il y a une bonne raison à cela - que je vais sauter pour l'instant - mais dans les versions futures, nous pouvons ajouter d'autres types MA sélectionnables.)

Utiliser les Mo_Bars

à un niveau très large, nous pouvons utiliser Mo_Bars similaire à la façon dont nous utilisons un MACD - les deux sont des oscillateurs centrés et sans restriction - notez la différence que Mo_Bars est basé sur 3 MAs plutôt que 2.

la longueur de la barre Mo_Bar reflète la distance entre le MA principal et le signal MA - tracé par rapport à la ligne de base (ligne de filtre) - cela signifie que la longueur de la barre représente la dynamique relative entre les 2 MA - Les Mo_Bars sont ensuite colorés de manière à refléter l'augmentation ou la diminution de la valeur de cette dynamique (le visuel ici peut avoir été inspiré par un autre indicateur récemment publié par l'un de nos estimés magiciens - il a fonctionné parfaitement - donc crédits ici:)

en termes simples, si le MA principal est en dessous du MA du signal, la barre est rouge - et lorsque le MA principal est au-dessus du MA du signal, la barre est verte - une barre blanche apparaît généralement lorsqu'il y a un changement détecté de la direction du momentum relatif (notez que ce n'est pas la même chose que la direction de la tendance - et c'est ce qui permet de montrer et d'exploiter la convergence et la divergence - similaire à un MACD)

  • Dans le graphique ci-dessus, j'ai noté quelques exemples de la façon dont la visualisation de l'élan relatif de cette façon expose les zones de coupure (Mo_Bars au-dessus de zéro mais sont en rouge ou en baisse, ou lorsque Mo_Bars sont en dessous de zéro et vert ou en hausse) - convergence / divergence avec le prix - et comment cela peut agir pour exposer la possibilité de changements potentiels dans l'action ou la tendance des prix.

  • Il y a tellement plus à jouer avec cette configuration - et peut-être si il y a suffisamment d'intérêt, il peut y avoir de futurs articles dédiés sur la façon de l'utiliser ou même de l'évoluer davantage - il y a beaucoup de potentiel ici, pour ajouter plus de filtres (peut-être basé sur le volume), alertes, signaux...etc - alors voyons l'intérêt:)

Voici la configuration détaillée (graphique supérieur) sur laquelle Mo_Bars est basé Les paramètres des MA sur les graphiques de prix ont été appariés / synchronisés avec les paramètres Mo_Bars sur le panneau inférieur pour démontrer comment le script fonctionne et comment il traduit l'action MA sur le graphique de prix à ce que nous voyons ci-dessous.

test de retour

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)

Relationnée

Plus de