Estratégia HODL de oscilação média móvel

Autora:ChaoZhang, Data: 2023-09-12 16:02:24
Tags:

Esta estratégia observa oscilações de preços em torno de médias móveis de longo período (por exemplo, 200 dias) para determinar sinais de retenção, breakouts de negociação para entrada de posição e usando a quebra abaixo como stop loss.

Estratégia lógica:

  1. Calcular uma média móvel de longo prazo, normalmente de 200 dias.

  2. Entre em longo quando o preço ultrapassa a média móvel.

  3. Sair longo quando o preço voltar abaixo da média móvel.

  4. Mantenha a posição longa até quebrar abaixo do stop loss.

Vantagens:

  1. A MA a longo prazo identifica eficazmente as tendências a médio e longo prazo.

  2. A negociação de breakout capta as reversões de longo prazo em tempo útil.

  3. Uma menor frequência de negociação reduz custos e riscos.

Riscos:

  1. A maior diferença entre as AAs é significativa, o que resulta num mau calendário de entrada.

  2. Não há limite para os riscos de retirada após a ruptura.

  3. Frequentes e pequenas fugas trazem perdas pequenas e sustentadas.

Em resumo, esta estratégia HODL usa oscilação de MA longa para determinar o tempo de retenção, minimizando a frequência do comércio.


/*backtest
start: 2022-09-05 00:00:00
end: 2023-04-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("HODLBot", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_every_tick=true, overlay=true)
    
//// Time limits 
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(01, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2029, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

maPeriod = input(200, "MA Period")
smoothing = input(defval="EMA", options=["EMA", "SMA"])

ma(smoothing, src, length) => 
    if smoothing == "EMA"
        ema(src, length)
    else
        if smoothing == "SMA"
            sma(src, length)
        
//// Main ////

movingAverage = ma(smoothing, close, maPeriod)

plot(movingAverage, color=orange, style = line, linewidth = 4)
 
// very simple, price over MA? Buy and HODL 
if (testPeriod() and close > movingAverage)
    strategy.entry("HODL", strategy.long)

// Price under, close long
if (testPeriod() and close < movingAverage)
    strategy.close("HODL")


Mais.