RedK-Momentumsbalken

Schriftsteller:ChaoZhang, Datum: 2022-05-18 11:28:24
Tags:SMAEMAWMAHMA

Momentum Bars (Mo_Bars) bietet eine andere Möglichkeit, (relative) Momentum zu visualisieren - und verwendet einige einfache TA-Konzepte, um eine andere Perspektive zu bieten, wie wir Momentumveränderungen lesen und das in unseren Handel einbeziehen.

Die Idee hier (und das Drehbuch selbst) ist wirklich super einfach, und ist (sehr lose) von Elder's Impulse System (EIS) inspiriert - dann entwickelt, um einige andere Konzepte zu nutzen, und weniger unordentlich und einfacher zu lesen zu werden.

Der Bau der Mo_Bars

Das Basiskonzept verwendet 3 gleitende Durchschnittslinien: die erste Linie ist eine relativ schnelle MA mit kurzer Länge - fungiert als Hauptpreisverfolgungslinie

Die zweite Linie ist etwas langsamer als die Hauptlinie - 2 bis 3 Bars länger - und wird standardmäßig den offenen Wert als Quelle verwenden - dies funktioniert besser, um zu erkennen, wann sich der Schlusskurs schneller bewegt als der offene (wie in Bars häufiger schließen höher als sie öffnen) - diese Linie fungiert als Signallinie - es gibt eine zusätzliche Einstellung für eine zusätzliche Verzögerung, die regelmäßige WMA-Gleichung nutzt - die Verzögerung erhöht die relative Verschiebung zwischen den 2 MAs

Für beide dieser MAs, ich wähle die RSS MA (Lazy Line) zu verwenden - andere MA-Typen verwendet werden können, aber der Grund, warum ich diese MA-Typ speziell verwendet ist, dass es bewegt gracefully - und 2 Lazy Lines zusammen bewegt minimiert Whipsaws von kleinen Preisschwankungen - ich mit anderen MA-Typen getestet und fand, dass die RSS einen Vorteil hat dort.

Die dritte Linie ist eine viel langsamere MA (Länge 5 bis 6 x die schnelle Linie) - und fungiert als Filter oder Basislinie. Wenn wir über dieser Linie sind, sollten wir Long-Positionen bevorzugen - wir sind im Bullen-Territorium. Wenn wir unter dieser Linie sind, bevorzugen wir Short-Positionen und wir sind im Bären-Territorium. Passen Sie diese Linie an, wie sie Ihrem Handelsstil und Zeitrahmen entspricht. (Ich wähle WMA als MA-Typ für die Filterlinie... und dafür gibt es einen guten Grund - den ich jetzt überspringen werde - aber in zukünftigen Versionen können wir andere wählbare MA-Typen hinzufügen.)

Mit Mo_Bars

Auf einer sehr breiten Ebene können wir Mo_Bars ähnlich wie wir einen MACD verwenden - beide sind zentrierte und uneingeschränkte Oszillatoren - beachten Sie den Unterschied, dass Mo_Bars auf 3 MAs statt 2 basiert.

Die Mo_Bar-Länge spiegelt die Entfernung zwischen dem Haupt-MA und dem Signal-MA wider - gezeichnet relativ zur Basislinie (Filterlinie) - das bedeutet, dass die Länge des Balkens den relativen Impuls zwischen den 2 MAs darstellt - Die Mo_Bars sind dann so gefärbt, dass sie den Anstieg oder die Abnahme des Werts dieses Impulses widerspiegeln (das Bild hier wurde möglicherweise von einem anderen Indikator inspiriert, der kürzlich von einem unserer geschätzten Zauberer veröffentlicht wurde - es funktionierte perfekt - also due credits hier:)

in einfachen Worten, wenn sich der Haupt-MA unter dem Signal-MA befindet, ist der Balken rot - und wenn sich der Haupt-MA über dem Signal-MA befindet, ist der Balken grün - ein weißer Balken erscheint normalerweise, wenn eine Veränderung der relativen Impulsrichtung erkannt wird (beachten Sie, dass dies nicht das gleiche ist wie die Trendrichtung - und das hilft, Konvergenz und Divergenz zu zeigen und auszunutzen - ähnlich wie bei einem MACD).

  • In der obigen Grafik habe ich einige Beispiele dafür aufgeführt, wie die Visualisierung der relativen Dynamik auf diese Weise Schnittbereiche aufdeckt (Mo_Bars über Null, aber rot oder nach unten, oder wenn Mo_Bars unter Null und grün oder nach oben sind) - Konvergenz / Divergenz mit dem Preis - und wie dies dazu beitragen kann, die Möglichkeit potenzieller Veränderungen in der Preisbewegung oder im Trend aufzudecken.

  • Es gibt so viel mehr mit diesem Setup zu spielen - und vielleicht, wenn es genügend Interesse gibt, gibt es zukünftige dedizierte Beiträge darüber, wie man es nutzt oder sogar weiterentwickelt - es gibt viel Potenzial hier, um mehr Filter hinzuzufügen (vielleicht lautstärke basiert), Warnungen, Signale... usw. - also lassen Sie uns das Interesse sehen:)

Hier ist das detaillierte Setup (oberes Diagramm), auf dem Mo_Bars basiert Die Einstellungen für die MAs auf den Preisdiagrammen wurden mit den Mo_Bars-Einstellungen auf dem unteren Panel abgestimmt / synchronisiert, um zu zeigen, wie das Skript funktioniert und wie es die MA-Aktion auf dem Preisdiagramm auf das, was wir unten sehen, übersetzt.

Zurückprüfung

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)

Verwandt

Mehr