Estratégia baseada em média móvel e supertrend

Autora:ChaoZhang, Data: 2023-11-14 16:23:42
Tags:

img

Resumo

Esta estratégia combina indicadores de média móvel e super tendência para seguir a tendência.

Estratégia lógica

  1. Calcular a média móvel ponderada MA Usar o volume como peso para calcular o preço médio ponderado durante um período.

  2. Calcular a média móvel do Hull com base na MA. A média móvel do Hull é mais sensível às alterações de preços.

  3. Calcule o indicador de super tendência. Super tendência combina ATR para identificar mudanças de tendência. Calcula as bandas superior e inferior.

  4. Quando a distância entre as faixas acima da faixa superior, vá longo.

  5. Gravar indicadores auxiliares como aberto, fechado, alto e baixo para observar visualmente os movimentos de preços.

  6. Tomar decisões de negociação com base em cruzamento de indicadores.

Análise das vantagens

  1. A estratégia combina a média móvel e a super tendência, permitindo uma detecção de tendência mais precisa.

  2. A média móvel do casco é mais sensível às alterações de preços, ajudando a reversão oportuna da tendência spot.

  3. Super tendência ajusta dinamicamente as faixas superior e inferior para se adaptar à volatilidade do mercado.

  4. Os indicadores auxiliares mostram visualmente os movimentos dos preços para auxiliar a tomada de decisões com sinais de indicador.

  5. A estratégia permite a otimização de parâmetros no período de média móvel, super multiplicador de tendência, etc.

Análise de riscos

  1. Os Whipsaws podem gerar sinais falsos durante os mercados de gama, causando negociações desnecessárias.

  2. O acompanhamento de múltiplos indicadores pode tornar a estratégia relativamente complexa de implementar.

  3. Os parâmetros devem ser adequadamente ajustados às características dos diferentes produtos.

  4. Para limitar as perdas em posições individuais, é necessário um stop loss rigoroso.

  5. A alta frequência do comércio exige o controlo do impacto das comissões.

Orientações de otimização

  1. Teste diferentes médias móveis para encontrar uma mais sensível ao mercado.

  2. Teste diferentes super multiplicadores de tendência para captar mudanças de tendência no tempo.

  3. Incorporar o índice de volatilidade para reduzir o tamanho da posição quando a volatilidade aumentar.

  4. Adicionar condições de ruptura para evitar sinais falsos durante períodos de alcance.

  5. Otimizar a estratégia de stop loss para torná-la mais adaptável às condições do mercado.

Resumo

Esta estratégia julga a direção da tendência usando a média móvel e a super tendência para seguir a tendência. A vantagem é a verificação mútua entre os indicadores para uma detecção de tendência mais precisa. Mas os sinais falsos devem ser observados. A estratégia pode ser melhorada através da otimização de parâmetros e controle de risco.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
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/
// © rajukpatel

//@version=5
strategy('My RK Strategy with Alert', shorttitle='My RK Strategy with Alert', overlay=true )
src5 = input(close)

tf = input(1440)
len5 = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

ma = ta.ema(src5 * volume, len5) / ta.ema(volume, len5)


//script taken from https://www.tradingview.com/script/kChCRRZI-Hull-Moving-Average/

src1 = ma

p(src1, len5) =>
    n = 0.0
    s = 0.0
    for i = 0 to len5 - 1 by 1
        w = (len5 - i) * len5
        n += w
        s += src5[i] * w
        s
    s / n

hm = 2.0 * p(src1, math.floor(len5 / 3)) - p(src1, len5)
vhma = p(hm, math.floor(math.sqrt(len5)))
lineColor = vhma > vhma[1] ? color.lime : color.red
plot(vhma, title='VHMA', color=lineColor, linewidth=3)
hColor = true
vis = true
hu = hColor ? vhma > vhma[2] ? #00ff00 : #ff0000 : #ff9800

vl = vhma[0]
ll = vhma[1]
m1 = plot(vl, color=hu, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=hu, linewidth=2, transp=80)

fill(m1, m2, color=hu, transp=70)
//

b = timeframe.isintraday and timeframe.multiplier >= 1 ? 60 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7



//
res5 = input.timeframe('D')

o = request.security(syminfo.tickerid, res5, open, barmerge.gaps_off, barmerge.lookahead_on)
c = request.security(syminfo.tickerid, res5, close, barmerge.gaps_off, barmerge.lookahead_on)
hz = request.security(syminfo.tickerid, res5, high, barmerge.gaps_off, barmerge.lookahead_on)
l = request.security(syminfo.tickerid, res5, low, barmerge.gaps_off, barmerge.lookahead_on)



col = c >= o ? color.lime : color.red

ppo = plot(b ? o >= c ? hz : l : o, color=col, title='Open', style=plot.style_stepline, transp=100)
ppc = plot(b ? o <= c ? hz : l : c, color=col, title='Close', style=plot.style_stepline, transp=100)

plot(b and hz > c ? hz : na, color=col, title='High', style=plot.style_circles, linewidth=2, transp=60)
plot(b and l < c ? l : na, color=col, title='Low', style=plot.style_circles, linewidth=2, transp=60)

fill(ppo, ppc, col, transp=90)

//
// INPUTS //
st_mult = input.float(1, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(50, title='SuperTrend Period', minval=1)

// CALCULATIONS //
up_lev = l - st_mult * ta.atr(st_period)
dn_lev = hz + st_mult * ta.atr(st_period)

up_trend = 0.0
up_trend := c[1] > up_trend[1] ? math.max(up_lev, up_trend[1]) : up_lev

down_trend = 0.0
down_trend := c[1] < down_trend[1] ? math.min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := c > down_trend[1] ? 1 : c < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend

// Plotting
//plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy = ta.crossover(c, st_line)
sell = ta.crossunder(c, st_line)
signal = input(false)

/////////////// Plotting /////////////// 
plotshape(signal and buy, style=shape.triangleup, size=size.normal, location=location.belowbar, color=color.new(color.lime, 0))
plotshape(signal and sell, style=shape.triangledown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))


if buy
    strategy.entry('My Long Entry Id', strategy.long)

if sell
    strategy.entry('My Short Entry Id', strategy.short)



Mais.