Estratégia de parada de tração do Bitcoin Momentum

Autora:ChaoZhang, Data: 2024-03-08 16:20:16
Tags:

img

Estratégia geral

A Estratégia de Paragem de Momentum do Bitcoin é uma estratégia baseada em momentum de longo prazo projetada para capturar as tendências de alta do Bitcoin enquanto mitiga o risco de queda através de stop-losses ajustados dinamicamente. A estratégia emprega uma técnica de stop-loss de momentum simples, mas inteligente, que aperta o stop-loss durante a volatilidade altamente baixa para proteger os lucros abertos e afrouxa o stop-loss durante o impulso de alta sustentada para deixar os lucros correrem. A estratégia permanece investida enquanto o preço do Bitcoin estiver acima da média móvel exponencial de 20 semanas (EMA) e sai quando o preço fecha abaixo dela.

Princípio da estratégia

  1. O preço atual do Bitcoin deve ser negociado acima da EMA de período mais longo (20 semanas).
  2. O Bitcoin não deve estar em um estado de cautela, definido como a alta de balanço recente menos a baixa da barra atual sendo maior que 1,5 vezes o ATR, ou o fechamento diário sendo menor que a EMA diária de 20.
  3. O valor da posição em risco deve ser calculado em função do valor da posição em risco.
  4. A saída na próxima barra é aberta quando o preço fecha abaixo do stop-loss.

A estratégia usa o gráfico semanal e a EMA de 20 semanas como um filtro de tendência, apenas entrando quando o preço está acima da EMA de 20 semanas. Um ATR de 5 períodos é usado para ajustar dinamicamente a distância da parada de trail, que se aperta no estado de cautela.

Vantagens da estratégia

  1. Simplicidade e eficácia: A lógica da estratégia é simples, clara, fácil de entender e implementar, enquanto captura efetivamente as principais tendências de alta do Bitcoin.

  2. A posição stop-loss é dinâmica: a posição stop-loss é ajustada dinâmicamente com base nas condições de volatilidade do mercado, controlando os drawdowns enquanto deixa os lucros correrem, o que é uma abordagem relativamente equilibrada e robusta para a gestão de stop-loss.

  3. Filtragem de tendência: Ao filtrar com uma média móvel de nível superior (EMA de 20 semanas), a estratégia só entra durante tendências de alta claras, melhorando muito a taxa de ganho e a relação risco-recompensa da estratégia.

  4. Dimensão da posição: O padrão é negociar com uma posição completa, maximizando a utilização do capital e melhorando a eficiência do capital.

  5. Ampla aplicabilidade: a lógica da estratégia pode ser facilmente aplicada a outros ativos e mercados, tendo uma boa generalização.

Riscos estratégicos

  1. Aplicabilidade dos parâmetros: Os parâmetros da estratégia são definidos com base nas características do mercado Bitcoin, e sua aplicabilidade a outros mercados precisa ser validada e pode exigir otimização de parâmetros para diferentes ativos.

  2. Identificação de tendências: A estratégia baseia-se principalmente em indicadores técnicos, como as EMA e ATR de nível superior, para avaliar as tendências, que não são tão abrangentes como a análise fundamental para compreender as condições do mercado e são propensas a erros nos pontos de virada do mercado.

  3. Risco de stop-loss: Embora os stop-loss dinâmicos possam controlar o risco até certo ponto, ainda podem ocorrer retrações significativas em condições de mercado extremas (como quedas bruscas ou flutuações profundas rápidas).

  4. Potencial de lucro: a estratégia tem um bom desempenho em tendências de alta unidirecionais, mas é mais provável que caia no dilema de frequentes stop-losses em mercados de gama, limitando potencialmente o potencial de lucro global.

  5. Desempenho ao vivo: Embora a estratégia tenha um bom desempenho no backtesting, a negociação ao vivo é afetada por fatores como deslizamento e comissões, e os resultados reais podem diferir dos retornos teóricos, exigindo uma avaliação cuidadosa.

Orientações de otimização

  1. Determinação da tendência: considerar a introdução de médias móveis de nível mais elevado, indicadores de volatilidade ou mesmo dados fundamentais para melhorar a precisão e a confiabilidade da identificação da tendência.

  2. Parâmetros dinâmicos: as posições de stop-loss e os parâmetros ATR podem ser ainda mais otimizados através da introdução de mecanismos de ajustamento dinâmico relacionados com o preço ou a volatilidade para se adaptarem aos diferentes estados do mercado.

  3. Dimensão das posições: ajustar dinamicamente a dimensão das posições com base em indicadores como a força da tendência e a volatilidade, aumentando a dimensão das posições quando a tendência é forte e reduzindo a dimensão das posições durante a elevada volatilidade para melhorar o rácio risco/retorno.

  4. Mecanismo longo/curto: Introduzir um mecanismo de venda a descoberto nos mercados de baixa para expandir a aplicabilidade e a rentabilidade potencial da estratégia.

  5. Combinação de estratégias: combinar esta estratégia com outras estratégias (como a reversão média) para complementar os pontos fortes de cada uma e melhorar a estabilidade e a rentabilidade da estratégia.

Resumo da estratégia

A Estratégia de Stop Trailing do Momentum do Bitcoin é uma estratégia de momento simples e eficaz que captura as fortes tendências de alta do Bitcoin usando médias móveis de nível mais alto e indicadores ATR, controlando o risco de queda através de stop-loss ajustados dinamicamente. Esta estratégia pode servir como um modelo básico, e os investidores podem refiná-la com base em suas próprias necessidades e experiência em áreas como determinação de tendências, otimização de parâmetros, gerenciamento de posição e mecanismos longos / curtos, ou combiná-la com outras estratégias para alcançar uma maior relação risco-recompensa.


/*backtest
start: 2023-03-08 00:00:00
end: 2024-03-07 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/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")

Mais.