Estratégia de Trailing Stop do Bitcoin Momentum


Data de criação: 2024-03-08 16:20:16 última modificação: 2024-03-08 16:20:16
cópia: 0 Cliques: 747
1
focar em
1617
Seguidores

Estratégia de Trailing Stop do Bitcoin Momentum

Visão geral da estratégia

A estratégia de parada de perda de seguimento de dinâmica do Bitcoin é uma estratégia de posição longa baseada na dinâmica, que visa capturar a tendência de alta do Bitcoin e, ao mesmo tempo, evitar o risco de queda, ajustando dinamicamente a parada de perda. A estratégia usa uma técnica de parada de parada de seguimento de dinâmica simples e engenhosa, apertando a parada para proteger o lucro da margem durante os períodos de alta volatilidade, enquanto libera a parada de perda durante a dinâmica de otimismo para deixar o lucro correr.

Princípio da estratégia

  1. O preço atual do bitcoin deve ser maior do que o EMA do quadro de tempo de nível superior (EMA de 20 semanas)
  2. O Bitcoin não pode estar em estado de “alerta”, ou seja, o pico mais recente do Bitcoin menos o preço mínimo da linha K atual é maior que 1,5 vezes o ATR, ou o preço de fechamento do dia é menor que a 20EMA do dia.
  3. A paragem de perda é definida como o pico de onda mais recente menos 1 ATR, ou seja, menos 20% do ATR se estiver em alerta (ou seja, 0,2 ATR)
  4. Quando o preço fechar abaixo do preço de parada, abra uma posição de liquidação na próxima linha K

A estratégia usa o gráfico de perímetros e a EMA de 20 semanas como filtros de tendência, entrando apenas quando o preço está acima da EMA de 20 semanas. O ATR de 5 ciclos é usado para ajustar dinamicamente a distância do traçado do stop loss e, em estado de alerta, o stop loss será apertado. O estado de alerta é definido por duas condições: a distância entre o pico da onda recente e o mínimo atual é maior que 1,5 vezes o ATR, ou o preço de fechamento do dia é menor que o 20EMA do dia.

Vantagens estratégicas

  1. Simples e eficaz: a lógica da estratégia é simples e clara, fácil de entender e implementar, ao mesmo tempo em que é capaz de capturar eficazmente as principais tendências de alta do Bitcoin.

  2. Stop loss dinâmico: é um método de stop loss mais equilibrado e robusto, que permite controlar a retração e fazer com que os lucros corram, ajustando dinamicamente a posição de stop loss de acordo com a situação de volatilidade do mercado.

  3. Filtragem de tendências: Filtragem de média de nível superior (EMA de 20 semanas) para entrar apenas em tendências ascendentes claras, aumentando significativamente a taxa de vitórias e perdas da estratégia.

  4. Gerenciamento de posições: negociação padrão de posições completas, permitindo o uso máximo dos fundos e a eficiência da utilização dos fundos. Além disso, é possível ajustar o tamanho das posições com flexibilidade.

  5. Ampla aplicabilidade: a lógica da estratégia pode ser facilmente transferida para outros padrões e mercados, com boa universalidade.

Risco estratégico

  1. Aplicabilidade dos parâmetros: Os parâmetros da estratégia são definidos com base nas características do mercado de Bitcoin. A aplicabilidade de outros mercados está sendo verificada e pode ser necessário otimizar os parâmetros para diferentes padrões.

  2. Identificação de tendências: a estratégia depende principalmente de indicadores técnicos de alto nível, como EMA e ATR, para determinar as tendências. A compreensão da situação do mercado é menos abrangente do que a análise fundamental, e os pontos de inflexão do mercado são propensos a erros.

  3. Risco de parada: Embora a parada dinâmica possa controlar o risco até certo ponto, em situações extremas (como queda acelerada ou tremores rápidos e profundos), ainda pode haver uma grande retração. E o ponto de parada é mais próximo, podendo ocorrer uma parada frequente em situações de tremores.

  4. Espaço de ganhos: a estratégia é excelente em uma tendência ascendente unilateral, mas é mais propensa a cair em situações de perda frequente em mercados turbulentos, e o espaço de ganhos em geral pode ser limitado.

  5. Desempenho do disco real: a estratégia tem um bom desempenho na retrospectiva, mas o disco real é afetado por fatores como slippage, comissões e outros, podendo haver um certo fosso com os ganhos teóricos, e deve ser avaliado com cautela.

Direção de otimização

  1. A análise de tendências: pode-se tentar introduzir mais medias de nível avançado, indicadores de volatilidade e até mesmo dados básicos para aumentar a precisão e a confiabilidade da identificação de tendências.

  2. Parâmetros dinâmicos: os parâmetros de stop loss e ATR podem ser melhorados, introduzindo mecanismos de ajuste dinâmico relacionados ao preço ou à volatilidade, para se adaptar a diferentes condições de mercado.

  3. Gerenciamento de posições: pode ajustar dinamicamente o tamanho das posições de acordo com indicadores como a intensidade da tendência, a volatilidade, aumentando as posições quando a tendência é forte e diminuindo as posições quando a volatilidade é alta, aumentando a taxa de risco de ganho.

  4. Mecanismo de mais espaço: introdução de um mecanismo de curto prazo em mercados em baixa, ampliando o alcance da estratégia e o potencial de lucro. Mas é necessário redesenhar as regras de entrada, parada e outros.

  5. Estratégia de combinação: a combinação da estratégia com outras estratégias (como reversão, regressão ao valor médio, etc.) complementa as vantagens e aumenta a estabilidade e a lucratividade da estratégia.

Resumo da estratégia

A estratégia de stop loss do Bitcoin Dynamic Tracking é uma estratégia de stop loss simples e eficaz, que utiliza a linha média de alto nível e os indicadores ATR para capturar uma forte tendência ascendente do Bitcoin e controlar o risco de queda por meio de um stop loss de ajuste dinâmico. A estratégia é lógica clara, fácil de implementar e otimizar, e é adequada para investidores de linha média que buscam ganhos estáveis. A estratégia pode ser usada como um modelo básico, e os investidores podem aperfeiçoá-la, de acordo com suas necessidades e experiências, em termos de discernimento de tendências, otimização de parâmetros, gerenciamento de posições, mecanismos de espaço amplo, etc., ou em combinação com outras estratégias, com o objetivo de obter uma maior proporção de risco de retorno. No entanto, é importante notar que o desempenho da estratégia no mercado real pode diferir dos resultados da retrospectiva, e é necessário avaliar e controlar os riscos com cuidado.

Código-fonte da estratégia
/*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")