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.
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.
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.
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.
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.
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.
Ampla aplicabilidade: a lógica da estratégia pode ser facilmente aplicada a outros ativos e mercados, tendo uma boa generalização.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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")