72s: Adaptive Hull Moving Average+

Penulis:ChaoZhang, Tanggal: 2022-05-26 17:17:37
Tag:HMAATR

Salah satu masalah yang menantang bagi trader pemula adalah membedakan kondisi pasar, apakah pasar saat ini memberikan kemungkinan terbaik untuk menumpuk keuntungan, secepat mungkin, dalam waktu sesingkat mungkin, atau tidak.

Pada intraday, kami telah melihat beberapa tindakan besar oleh bank-bank besar agak dapat didefinisikan atau berputar oleh HMA 200. Saya telah berpikir untuk membuat visual lebih sesuai dengan dinamika harga (memisahkan pergerakan utama dan kebisingan kecil) untuk mendapatkan tanda-tanda yang lebih jelas kapan itu mulai terjadi.

Adaptive HMA ini menggunakan fitur baru Pine Scripts yang sekarang mendukung argumen Dynamic Length untuk beberapa fungsi Pine. (baca:https://www.tradingview.com/blog/en/pine...). Ini belum mendukung built-in HMA () secara langsung, tetapi untungnya kita dapat menggunakan formula wma () untuk membangun. (Catatan: Saya sedikit tweak rumus HMA yang sudah populer di sini dengan menggunakan int biasa))) bukan bulat))) pada panjang wmas, karena saya menemukan itu persis cocok tradingviews built-in HMA)).

Anda dapat memilih aspek mana periode HMA Adaptif akan beradaptasi.

Dalam studi ini saya menyajikannya dengan dua pilihan: Volume dan Volatilitas. Ini akan bergerak lebih cepat atau lebih lambat tergantung pada situasi mana aspek saat ini berada. yaitu: Ketika volume umumnya rendah atau pembacaan volatilitas tidak ada, harga tidak akan bergerak banyak, sehingga MA yang beradaptasi akan melambat dengan secara dinamis memperpanjang periode lookback, dan sebaliknya, dan sebagainya.

Tanda-tanda warna dalam Adaptive mirip dengan situasi yang dijelaskan di atas. Selain itu, saya juga menggabungkannya dengan perhitungan kemiringan MA untuk membantu mengukur kekuatan tren atau kondisi samping / bergoyang.

Dengan cara ini ketika kita menggunakannya sebagai dukungan dinamis / resistensi itu akan lebih visual-andal.

Kedua, dan yang lebih penting, itu mungkin membantu kita pedagang dengan informasi probabilitas yang lebih baik tentang apakah atau tidak perdagangan bahkan layak untuk dibuat. yaitu: Jika dalam jangka waktu pasar tidak akan memberikan banyak pergerakan, keuntungan apa pun juga hanya sebanyak itu.

Cara MENGGUNAKAN: Selain dukungan/resistensi dinamis yang lebih baik dan konfirmasi pecah yang lebih jelas, MA berwarna sebagai berikut: Kuning: Pasar berada dalam konsolidasi atau datar. Baik itu ke samping, bergolak, atau dalam pergerakan yang relatif kecil. Jika muncul di pasar tren, itu mungkin merupakan tanda awal bahwa tren saat ini mungkin akan mengubah arahnya, atau mengkonfirmasi harga pecah ke sisi lain. Hijau terang atau MERAH terang: Mengatakan apakah suatu tren sedang terbentuk tetapi masih relatif lemah (atau semakin lemah), karena tidak memiliki volume atau volatilitas untuk mendukung. Hijau gelap atau Merah gelap: Di sinilah kita dapat mengharapkan pergerakan harga yang baik dan kuat. Jika cukup kuat, seringkali ini menandai awal dari tren besar baru yang tahan lama.

Pengaturan: Pengisi daya: Pilih aspek mana HMA Anda harus menghubungkan dirinya sendiri, sehingga akan beradaptasi dengan itu. Periode minimum, periode maksimum: 172 - 233 hanya pengaturan saya sendiri untuk mengalahkan HMA 200 statis untuk intraday. Saya merasa dalam gaya trading saya terbaik di 15m tf di hampir semua pasangan, dan 15m ke 1H untuk beberapa saham. Ini juga bekerja dengan baik dengan EMA 200 konvensional, kadang-kadang seolah-olah mereka agak bekerja sama dalam mendefinisikan ke mana harga harus pergi. Tapi Anda dapat, tentu saja, bereksperimen dengan kisaran lain, lebih luas atau lebih sempit. Terutama jika Anda sudah memiliki strategi yang mapan untuk diikuti. Seperti yang mungkin Anda lakukan dengan: Batas area konsolidasi: Ini berkaitan dengan perhitungan kemiringan. semakin besar jumlahnya berarti MA Anda membutuhkan derajat yang lebih besar untuk mendefinisikan pasar berada di luar area datar (kuning). ini dapat berguna jika diperlukan untuk meringankan filter atau sebaliknya. Warna latar belakang: Hanya warna lain untuk membantu menyoroti perbedaan kondisi pasar.

Peringatan: Ada dua peringatan: Volume Break: ketika volume pecah di atas rata-rata, dan Volatility Meter: ketika pasar lebih mungkin akan memiliki saat besar bergoyang sikat.

Penggunaan: Sangat sangat bagus pembelian entri untuk menangkap besar up-gerakan jika:

  1. Harga berada di atas MA. (Yang terbaik adalah ketika harga juga tidak terlalu jauh dari MA, atau Anda juga dapat menggunakan osilator jarak untuk membantu juga)
  2. Warna HMA berwarna hijau gelap, artinya ada pada colokan pengisian dengan tampilan yang Anda pilih.
  3. RSI di atas 50. Ini untuk membantu sebagai konfirmasi tambahan.

Sinyal masuk SELL yang jelas sama seperti di atas, hanya sebaliknya.

backtest

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)

Berkaitan

Lebih banyak