72s: Média móvel do casco adaptativo +

Autora:ChaoZhang, Data: 26 de maio de 2022 17:17:37
Tags:HMAATR

Uma questão desafiadora para os traders iniciantes é diferenciar as condições de mercado, se o mercado atual está ou não dando a melhor possibilidade de acumular lucros, o mais cedo possível, no menor tempo possível, ou não.

No intradiário, vimos algumas grandes ações por grandes bancos que podem ser definidas ou circularem pela HMA 200. Eu tenho pensado em tornar os visuais mais conformes à dinâmica dos preços (separando o movimento principal e o ruído menor) para obter sinais mais claros de quando isso começa a acontecer.

Este HMA adaptativo está usando o novo recurso Pine Scripts que agora suporta argumentos de comprimento dinâmico para várias funções Pine. (leia:https://www.tradingview.com/blog/en/pine...). Ele não tem suportado o HMA () embutido diretamente, mas felizmente podemos usar sua fórmula wma () para construir. (Nota: eu ajustei um pouco a fórmula HMA já popular aqui usando int simples))) em vez de redondo))) em seu comprimento wmas, uma vez que eu acho que ele corresponde precisamente tradingviews embutido HMA').

Pode escolher a que aspecto o período de HMA adaptativo se adaptará.

Neste estudo, apresento-o com duas opções: Volume e Volatilidade. Ele irá moves mais rápido ou mais lento depende da situação em que o aspecto está atualmente. ou seja: Quando o volume é geralmente baixo ou as leituras voláteis não estão lá, o preço não se moverá muito, de modo que o MA de adaptação irá desacelerar por prolongar dinamicamente o período de retrospectiva, e vice-versa, e assim por diante.

As marcas coloridas no Adaptive se assemelham à situação explicada acima.

Desta forma, quando o usamos como suporte/resistência dinâmica, será visualmente mais confiável.

Em segundo lugar, e mais importante, pode ajudar os traders com melhor informação de probabilidade de se um comércio deve ou não valer a pena ser feito. ou seja: se no mercado de tempo médio não dar muito movimento, qualquer lucro também seria apenas tanto.

Como utilizar: Além de um melhor suporte/resistência dinâmica e uma confirmação mais clara da ruptura, o MA é colorido do seguinte modo: Amarelo: O mercado está em consolidação ou plano. Seja lateral, turbulento ou em movimentos relativamente pequenos. Se ele aparecer em um mercado de tendência, pode ser um sinal mais cedo de que a tendência atual pode estar prestes a mudar de direção, ou confirmar um preço quebrado para outro lado. Verde claro ou vermelho claro: Indica se uma tendência está a formar-se, mas ainda relativamente fraca (ou a enfraquecer-se), uma vez que não tem volume ou volatilidade para suportar. Verde escuro ou Vermelho escuro: É aqui que podemos esperar um bom e forte movimento dos preços.Se for suficientemente forte, muitas vezes marca o início de uma nova tendência importante de longa duração.

Configurações: Carregador: Escolha em que aspecto o seu HMA deve ligar-se, de modo a adaptar-se a ele. Período mínimo, período máximo: 172 - 233 é apenas minha própria configuração para superar o HMA 200 estático para intradiário. Eu acho que no meu estilo de negociação melhor em 15m tf em quase qualquer par, e 15m a 1H para alguns ações. Também funciona bem com o EMA 200 convencional, às vezes como se eles trabalhassem de mãos dadas na definição de onde o preço deve ir. Mas você pode, claro, experimentar com outras faixas, mais amplas ou mais estreitas. Especialmente se você já tiver uma estratégia estabelecida para seguir. Como você pode fazer com: Limite de área de consolidação: Isso tem a ver com o cálculo de inclinação. Quanto maior o número significa que seu MA precisa de maior grau para definir o mercado está fora da área plana (amarelo). Coloração de fundo: Só mais uma coloração para ajudar a realçar a diferença nas condições do mercado.

Alertas: Há dois alertas: Quebra de volume: quando o volume se rompe acima da média, e Volatilidade Meter: quando o mercado mais provável está prestes a ter o seu momento do grande pincel balançando.

UTILIZAÇÃO Muito, muito boa entrada de compra para apanhar grandes movimentos ascendentes se:

  1. (É melhor quando o preço também não é muito distante da MA, ou você também pode usar oscilador de distância para ajudar também)
  2. A cor da HMA é verde escuro, o que significa que está na tomada de carregamento com o aspecto que você escolheu.
  3. O índice de resistência está acima de 50.

O sinal de entrada do SELL é o mesmo que acima, apenas o oposto.

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)

Relacionados

Mais.