72s: Adaptive Hull Moving Average +

Schriftsteller:ChaoZhang, Datum: 26.5.2022 17:17:37
Tags:HMAATR

Ein herausforderndes Problem für Anfänger ist es, die Marktbedingungen zu unterscheiden, ob der aktuelle Markt die beste Möglichkeit bietet, Gewinne so früh wie möglich in kürzester Zeit zu erzielen oder nicht.

Innerhalb des Tages haben wir einige große Aktionen von großen Banken gesehen, die durch HMA 200 definiert werden können. Ich habe darüber nachgedacht, die Visuals besser an die Preisdynamik anzupassen (große Bewegungen und geringfügige Geräusche zu trennen), um klarere Anzeichen dafür zu erhalten, wann sie beginnen zu passieren.

Diese Adaptive HMA verwendet die neue Pine Scripts-Funktion, die jetzt Dynamic Length-Argumente für mehrere Pine-Funktionen unterstützt. (lesen:https://www.tradingview.com/blog/en/pine...). Es hat nicht direkt die integrierte HMA () unterstützt, aber zum Glück können wir seine wma () Formel verwenden, um zu konstruieren. (Hinweis: Ich habe die hier bereits beliebte HMA-Formel ein wenig angepasst, indem ich einfache int(() anstelle von rund() auf seiner wmas Länge verwendet habe, da ich finde, dass es genau mit der integrierten HMA s übereinstimmt).

Sie können wählen, an welchen Aspekt sich die Adaptive HMA-Periode anpassen wird.

In dieser Studie präsentiere ich es mit zwei Optionen: Volumen und Volatilität. Es wird sich schneller oder langsamer bewegen, je nachdem, in welcher Situation sich der Aspekt derzeit befindet. d.h.: Wenn das Volumen im Allgemeinen niedrig ist oder die volatilen Messwerte nicht vorhanden sind, wird sich der Preis nicht sehr bewegen, so dass sich der anpassende MA verlangsamt, indem die Rückblickperiode dynamisch verlängert wird, und umgekehrt, und so weiter.

Die Farbmarkierungen in der Adaptive ähneln der oben erläuterten Situation. Darüber hinaus kombiniere ich sie auch mit der Steigungberechnung der MA, um die Trendstärke oder die seitlichen/schwankenden Bedingungen zu messen.

Auf diese Weise, wenn wir es als dynamische Unterstützung/Widerstand verwenden, wird es visuell zuverlässiger sein.

Zweitens, und noch wichtiger, könnte es uns Händlern helfen, mit besseren Wahrscheinlichkeitsinformationen darüber, ob ein Handel überhaupt wert ist, gemacht zu werden. d.h.: Wenn der Markt im mittleren Zeitraum nicht viel Bewegung geben wird, würde jeder Gewinn auch nur so viel sein. In den meisten Fällen könnten wir besser unseren Cent für später sparen oder ihn woanders platzieren.

Wie zu verwenden: Abgesehen von einer besseren dynamischen Unterstützung/Widerstandsfähigkeit und einer klareren Bestätigung des Ausbruchs ist die MA wie folgt gefärbt: Gelb: Der Markt ist in Konsolidierung oder flach. Ob seitlich, unruhig oder in relativ kleinen Bewegungen. Wenn es in einem Trendmarkt auftaucht, kann es ein früheres Zeichen dafür sein, dass der aktuelle Trend seine Richtung ändern könnte oder einen Preisbruch in eine andere Richtung bestätigt. LEICHTSGRÜN oder LEICHTSRÖT: Zeigt an, ob sich ein Trend bildet, aber immer noch relativ schwach (oder schwächer wird), da er weder Volumen noch Volatilität aufweist. DARKER GREEN oder DARKER ROD: Dies ist der Punkt, an dem wir eine gute und starke Kursbewegung erwarten können.

Einstellungen: Ladegerät: Wählen Sie aus, in welchen Aspekten sich Ihre HMA einbinden soll, damit sie sich daran anpasst. Mindestzeit, Höchstzeit: 172 - 233 ist nur meine eigene Einstellung, um den statischen HMA 200 für den Intraday zu übertreffen. Ich finde es in meinem Handelsstil am besten bei 15m tf in fast jedem Paar und 15m bis 1H für einige Aktien. Es funktioniert auch gut mit der herkömmlichen EMA 200, manchmal als ob sie etwas Hand in Hand arbeiten, um zu definieren, wohin der Preis gehen sollte. Aber Sie können natürlich mit anderen Bandbreiten experimentieren, breiter oder schmaler. Vor allem, wenn Sie bereits eine etablierte Strategie haben, der Sie folgen müssen. Wie Sie vielleicht mit: Schwellenwert für die Konsolidierung: Dies hat mit der Steigung Berechnung zu tun. Je größer die Zahl bedeutet, dass Ihr MA benötigt einen größeren Grad, um den Markt zu definieren, ist aus der flachen (gelben) Bereich. Dies kann nützlich sein, wenn Sie den Filter oder umgekehrt zu erleichtern. Hintergrundfarbe: Nur eine weitere Farbgebung, um den Unterschied der Marktbedingungen hervorzuheben.

Warnungen: Es gibt zwei Warnungen: Volumenbruch: wenn sich das Volumen über dem Durchschnitt auflöst und Volatilitätsmesser: wenn der Markt wahrscheinlich seinen Moment des großen winkenden Pinsel hat.

Verwendungsbereich: Sehr sehr schöner BUY-Eintrag, um große Aufwärtsbewegung zu fangen, wenn:

  1. Der Preis liegt über dem MA. (Es ist am besten, wenn der Preis auch nicht zu weit vom MA entfernt ist, oder Sie können auch einen Abstandsschalter verwenden, um auch zu helfen)
  2. Die Farbe von HMA ist dunkelgrün, das heißt, es ist auf dem Ladestecker mit dem Aussehen, das Sie gewählt haben.
  3. Der RSI ist über 50. Das ist eine zusätzliche Bestätigung.

Klares SELL-Eingangssignal ist das gleiche wie oben, nur das Gegenteil.

Zurückprüfung

img


/*backtest
start: 2022-04-25 00:00:00
end: 2022-05-24 23:59: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/
// 2020 © io72signals / Antorio Bergasdito

//@version=4
study("72s: Adaptive Hull Moving Average+", shorttitle="72s: Adaptive HMA+", overlay=true)

//Optional Inputs
charger     = input("Volatility", title="Choose which charger to adapt to:", options=["Volatility", "Volume"])
src         = input(close, title="Source:")
minLength   = input(172, title="Minimum period:")
maxLength   = input(233, title="Maximum period:")
adaptPct    = 0.03141 //input(3.141, minval = 0, maxval = 100, title="Adapting Percentage:") / 100.0

flat        = input(17, title="Consolidation area is when slope below:")

showMinor   = input(true, title="Show minor xHMA+", group="Minor Adaptive HMA+ Period")
minorMin    = input(89, title="Minimum:", group="Minor Adaptive HMA+ Period", inline="mHMA+")
minorMax    = input(121, title="Maximum:", group="Minor Adaptive HMA+ Period", inline="mHMA+")

showZone    = input(false, title="Show Adaptive HMA+ Distance Zone", group="DISTANCE ZONE")
mult        = input(2.7, title="Distance (Envelope) Multiplier", step=.1, group="DISTANCE ZONE") 

showSignals = input(true, title="Show Possible Signals", group="OTHER")
useBg       = input(true, title="Background color to differentiate movement", group="OTHER")

//Source to adapt to
highVolatility = atr(14) > atr(46)                  //Volatility Meter. Change it to match to your strat/pair/tf if needs.

rsivol  = rsi(volume,14)                            //RSI Volume Osc:
osc     = hma(rsivol,10)                            //Basically it's almost the same as: vol > ma(volume,20)
volBreak = osc > 49                                 //but smoothed using weight to filter noise or catch earlier signs.    

//Dynamics 
var float dynamicLength = avg(minLength,maxLength)
var float minorLength   = avg(minorMin,minorMax)
plugged = charger=="Volume"? volBreak : highVolatility
dynamicLength   := iff(plugged, max(minLength, dynamicLength * (1 - adaptPct)), min(maxLength, dynamicLength * (1 + adaptPct)))
minorLength     := iff(plugged, max(minorMin, minorLength * (1 - adaptPct)), min(minorMax, minorLength * (1 + adaptPct)))

//Slope calculation to determine whether market is in trend, or in consolidation or choppy, or might about to change current trend
slope_period = 34, range = 25, pi = atan(1) * 4
highestHigh = highest(slope_period), lowestLow = lowest(slope_period)
slope_range = range / (highestHigh - lowestLow) * lowestLow
calcslope(_ma)=>
    dt = (_ma[2] - _ma) / src * slope_range  
    c = sqrt(1 + dt * dt)
    xAngle = round(180 * acos(1 / c) / pi)
    maAngle = iff(dt > 0, -xAngle, xAngle)
    maAngle

//MA coloring to mark market dynamics 
dynColor(_ma,_col1a,_col1b, _col2a, _col2b, _col0) =>
    slope = calcslope(_ma)
    slope >= flat ? plugged? _col1a : _col1b :
     slope < flat and slope > -flat ? _col0 : 
     slope <= -flat ? plugged? _col2a : _col2b : _col0

//Adaptive HMA 
xhma(_src,_length) => _return = wma(2 * wma(_src, _length / 2) - wma(_src, _length), floor(sqrt(_length))) 

dynamicHMA  = xhma(src,int(dynamicLength))      //<--Batman - Our main xHMA+
minorHMA    = xhma(src,int(minorLength))        //<--Robin  - Faster minor xHMA+ (Optional). Can be use to assist for 
                                                //            faster entry, slower exit point, or pullbacks info too.

//Plot
plot(dynamicHMA, "Dynamic HMA+", dynColor(dynamicHMA, #6fbf73, #c0f5ae, #eb4d5c, #f2b1d4, color.yellow), 3)
plot(showMinor? minorHMA:na, "minor HMA+", dynColor(minorHMA, #6fbf73, #c0f5ae, #eb4d5c, #f2b1d4, color.yellow), 1)

//Backgroud coloring
notgreat = calcslope(dynamicHMA) < flat and calcslope(dynamicHMA) > -flat
bgcolor(useBg? plugged? na : notgreat? #757779: #afb4b9 : na)

// Comparative study
// staticHMA = hma(close, 200)
// plot(staticHMA,  "Static HMA")
// plotchar(dynamicLength, "dynamicLengthgth", "", location.top) //check output the calculated Dynamic Length in the Data Window.

//{ DISTANCE ZONE
// Envelope the main DynamicHMA with ATR band, just one way to approximate current price distance to MA. Other usages/methods may vary.
upperTL = dynamicHMA + mult * atr(40)        ,  lowerTL = dynamicHMA - mult * atr(40)           //<--Half distance zone
topTL = dynamicHMA + (mult*2) * atr(40)      ,  botTL = dynamicHMA - (mult*2) * atr(40)         //<--One distance zone
stopupperTL = dynamicHMA + (mult/2) * atr(40),  stoplowerTL = dynamicHMA - (mult/2) * atr(40)   //<--Half of the half. If need ie. tighter SL or trailing

// Plotting Distance Zone
plot(showZone?upperTL:na, color=color.green, transp=72)
plot(showZone?lowerTL:na, color=color.red,   transp=72)
plot(showZone?topTL:na, color=color.gray, transp=72)
plot(showZone?botTL:na, color=color.gray, transp=72)
sutl = plot(showZone?stopupperTL:na, color=color.white, transp=100)
sltl = plot(showZone?stoplowerTL:na, color=color.white, transp=100)
colZone = showZone? color.purple:color.new(color.white,100)
fill(sutl, sltl, color=colZone, transp=90)
//}

//{ SIGNALS
_slope = calcslope(dynamicHMA)

// Entry Base; When HMA+ turn to a darker color and market is out from low volatility. 
// Remember to also considering price distance to MA and strength (ie. RSI)
_upSig = _slope >=  flat and plugged
_dnSig = _slope <= -flat and plugged
buy  = _upSig and not _upSig[1] 
sell = _dnSig and not _dnSig[1] 

// Possible Exits. These only based on faster xHMA+
_upExit = _slope>=flat  and (not plugged) and close<minorHMA 
_dnExit = _slope<=-flat and (not plugged) and close>minorHMA 
fastExits  = (_upExit and not _upExit[1]) or (_dnExit and not _dnExit[1])

// Caution Sign. When Price crossed most outer distance zone. Could also be a good TP spot if your already in profit
_topWarn    = high>topTL
_botWarn    = low<botTL
warningSigns = (_topWarn and not _topWarn[1]) or (_botWarn and not _botWarn[1])

// Plot 'em up
atrPos = 0.72 * atr(5)
plotchar(showSignals and buy?  dynamicHMA-atrPos: na, color=color.green, location=location.absolute, char="⬆", size = size.tiny)
plotchar(showSignals and sell? dynamicHMA+atrPos: na, color=color.red,   location=location.absolute, char="⬇", size = size.tiny)
plotchar(showSignals and fastExits? _upExit? minorHMA+atrPos: _dnExit? minorHMA-atrPos: na: na, 
     color=_upExit?color.green:_dnExit?color.red: na, location=location.absolute, char="ⓧ", size=size.tiny)
plotchar(showSignals and warningSigns? _topWarn? high+atrPos: _botWarn? low-atrPos: na: na, 
     color=color.orange, location=location.absolute, char="⚠", size=size.tiny)
//} 

//{ ALERTS
// Previous alerts:
// alertcondition(highVolatility and not notgreat, "72s: Volatility Meter", "Market is on the move")
// alertcondition(volBreak[1] and volBreak and not notgreat, "72s: Volume Break", "Volume has just break above average")

// New Alert: 
// Delete what alert you don't need:
if buy 
    alert("Possible Buy Signal at" + tostring(close), alert.freq_once_per_bar_close)
if sell
    alert("Possible Sell Signal at" + tostring(close), alert.freq_once_per_bar_close)
    
if fastExits and _upExit
    alert("Price has just crossed down minor xHMA+ at" + tostring(close), alert.freq_once_per_bar_close)
if fastExits and _dnExit
    alert("Price has just crossed up minor xHMA+ at" + tostring(close), alert.freq_once_per_bar_close)
    
if warningSigns and _topWarn
    alert("Price has just crossed above top xHMA+ zone", alert.freq_once_per_bar_close)
if warningSigns and _botWarn
    alert("Price has just crossed below bottom xHMA+ zone", alert.freq_once_per_bar_close)
//}
    




if buy
    strategy.entry("Enter Long", strategy.long)
else if sell
    strategy.entry("Enter Short", strategy.short)

Verwandt

Mehr