72s: Adaptive Hull Moving Average+

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

Satu isu yang mencabar bagi peniaga pemula adalah untuk membezakan keadaan pasaran, sama ada atau tidak pasaran semasa memberikan peluang terbaik untuk menumpuk keuntungan, secepat mungkin, dalam masa yang sesingkat mungkin, atau tidak.

Pada intraday, kami telah melihat beberapa tindakan besar oleh bank-bank besar agak dapat ditakrifkan atau berputar di sekitar HMA 200. Saya telah berfikir untuk membuat visual lebih sesuai dengan dinamik harga (memisahkan pergerakan utama dan bunyi bising kecil) untuk mendapatkan tanda yang lebih jelas apabila ia mula berlaku.

HMA adaptif ini menggunakan ciri baru Pine Scripts yang kini menyokong argumen Panjang Dinamik untuk beberapa fungsi Pine. (baca:https://www.tradingview.com/blog/en/pine...). Ia tidak menyokong terbina dalam HMA () secara langsung, tetapi untungnya kita boleh menggunakan formula wma () untuk membina. (Catatan: Saya tweaked sedikit formula HMA yang sudah popular di sini dengan menggunakan int biasa))) bukannya bulat))) pada panjang wmas, kerana saya mendapati ia tepat sesuai tradingviews terbina dalam HMA)).

Anda boleh memilih aspek mana tempoh HMA adaptif akan disesuaikan.

Dalam kajian ini saya membentangkan ia dengan dua pilihan: Volume dan Volatiliti. Ia akan bergerak lebih cepat atau lebih perlahan bergantung pada keadaan mana aspek itu sedang berada. iaitu: Apabila jumlah umumnya rendah atau bacaan volatile tidak ada, harga tidak akan bergerak banyak, jadi MA yang menyesuaikan diri akan melambatkan dengan dinamik memanjangkan tempoh melihat kembali, dan sebaliknya, dan sebagainya.

Tanda-tanda warna dalam Adaptive menyerupai situasi yang dijelaskan di atas. Di samping itu, saya juga menggabungkannya dengan pengiraan cerun MA untuk membantu mengukur kekuatan trend atau keadaan sampingan / bergelombang.

Dengan cara ini apabila kita menggunakannya sebagai sokongan dinamik / rintangan ia akan lebih visual-boleh dipercayai.

Kedua, dan yang lebih penting, ia boleh membantu kita peniaga dengan maklumat kebarangkalian yang lebih baik sama ada atau tidak perdagangan harus bahkan bernilai untuk dibuat. iaitu: Jika dalam jangka masa pasaran tidak akan memberikan banyak pergerakan, mana-mana keuntungan juga hanya sebanyak itu. Dalam kebanyakan kes, kita mungkin lebih baik menyimpan sen kita untuk kemudian atau meletakkannya di tempat lain.

Cara Penggunaan: Selain daripada sokongan / rintangan dinamik yang lebih baik dan pengesahan pecah yang lebih jelas, MA berwarna seperti berikut: Kuning: Pasaran adalah dalam penyatuan atau rata. sama ada ke sisi, bergolak, atau dalam pergerakan yang agak kecil. Jika ia muncul di pasaran yang sedang trend, ia mungkin merupakan tanda awal bahawa trend semasa mungkin akan mengubah arahnya, atau mengesahkan harga pecah ke sisi lain. hijau terang atau merah terang: Beritahu jika trend sedang terbentuk tetapi masih relatif lemah (atau semakin lemah), kerana ia tidak mempunyai jumlah atau turun naik untuk menyokong. Hijau gelap atau Merah gelap: Ini adalah di mana kita boleh mengharapkan pergerakan harga yang baik dan kuat untuk naik.Jika ia cukup kuat, ia sering menandakan permulaan trend utama baru yang tahan lama.

Tetapan: Pengisian: Pilih aspek mana HMA anda harus menyambung sendiri, jadi ia akan menyesuaikan diri dengannya. Tempoh Minimum, Tempoh Maksimum: 172 - 233 hanya tetapan saya sendiri untuk mengatasi HMA 200 statik untuk intraday. Saya mendapati ia dalam gaya perdagangan saya terbaik dalam 15m tf dalam hampir mana-mana pasangan, dan 15m ke 1H untuk beberapa saham. Ia juga berfungsi dengan baik dengan EMA 200 konvensional, kadang-kadang seolah-olah mereka agak bekerja bersama dalam menentukan di mana harga harus pergi. Tetapi anda boleh, tentu saja, bereksperimen dengan julat lain, lebih luas atau lebih sempit. Terutama jika anda sudah mempunyai strategi yang ditubuhkan untuk diikuti. Seperti yang anda boleh lakukan dengan: Sempadan kawasan penyatuan: Ini mempunyai kaitan dengan pengiraan cerun. semakin besar nombor bermakna MA anda memerlukan tahap yang lebih besar untuk menentukan pasaran adalah di luar kawasan rata (kuning). ini boleh berguna jika diperlukan untuk meringankan penapis atau sebaliknya. Warna latar belakang: Hanya satu lagi warna untuk membantu menonjolkan perbezaan dalam keadaan pasaran.

Peringatan: Ada dua amaran: Jatuh Volume: apabila jumlah pecah di atas purata, dan Volatility Meter: apabila pasaran lebih cenderung untuk mempunyai masa yang besar bergoyang berus.

Penggunaan: Sangat sangat bagus membeli entri untuk menangkap pergerakan besar jika:

  1. Harga adalah di atas MA. (Ia adalah yang terbaik apabila harga juga tidak jauh dari jarak MA, atau anda juga boleh menggunakan jarak osilator untuk membantu terlalu)
  2. Warna HMA adalah dalam warna hijau gelap.
  3. RSI melebihi 50. Ini untuk membantu sebagai pengesahan tambahan.

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

Ujian belakang

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 lanjut