Estratégia de reversão de tendências criptográficas baseada em pontos altos e baixos de oscilação pivot

Autora:ChaoZhang, Data: 2024-01-12 14:13:36
Tags:

img

Resumo

Esta estratégia identifica reversões de tendência em ativos criptográficos com base em pontos altos / baixos de swing PIVOT e sinais de ruptura. Ela pertence à categoria de estratégia de reversão de ruptura. A estratégia primeiro calcula os pontos mais altos e mais baixos de preços recentes como níveis PIVOT, e depois detecta se o preço rompe esses níveis-chave, sinalizando grandes mudanças de tendência.

Como funciona a estratégia

  1. Calcular os pontos altos/baixos PIVOT

    Usa ta.pivothigh (() e ta.pivotlow (()) para encontrar os preços mais altos e mais baixos em um período de busca de barra personalizado para traçar pontos PIVOT.

  2. Identificar sinais de ruptura

    Se o preço ultrapassar o ponto baixo PIVOT, ou ultrapassar o ponto alto PIVOT, a estratégia o considera um sinal de reversão da tendência.

  3. Defina as condições do filtro

    Requer que o preço quebre os níveis PIVOT por uma distância significativa e que o preço de fechamento cruze os preços de fechamento de 150 bares para evitar batidas.

  4. Entradas e saídas

    Trigger comprar sinal na condição longa, fechar a posição longa na condição de saída.

Vantagens

  1. Os pontos PIVOT são sensíveis a grandes mudanças de tendência
  2. Evitar falhas nas tendências de consolidação com filtros
  3. Captura reversões cedo com oscilação alta / baixa breakouts

Riscos

  1. Os ciclos maiores podem fazer com que a estratégia seja desviada.
  2. Pontos e filtros PIVOT precisam ser ajustados para cada ativo
  3. Impacto das taxas de câmbio nos resultados, necessidade de uma estrutura de taxas próxima de zero

Oportunidades de melhoria

  1. Teste diferentes períodos de revisão PIVOT
  2. Adicionar stop loss móvel à perda de controle por transação
  3. Combinar com outros indicadores para filtro

Conclusão

A estratégia é robusta em geral para capturar grandes reversões, mas precisa de parâmetros personalizados por ativo e controles de risco.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nkrastins95

//@version=5
strategy("Swing Hi Lo", overlay=true, margin_long=100, margin_short=100)

//-----------------------------------------------------------------------------------------------------------------------//

tf = input.timeframe(title="Timeframe", defval="")

gr="LENGTH LEFT / RIGHT"
leftLenH = input.int(title="Pivot High", defval=10, minval=1, inline="Pivot High",group=gr)
rightLenH = input.int(title="/", defval=10, minval=1, inline="Pivot High",group=gr)
colorH = input(title="", defval=color.red, inline="Pivot High",group=gr)

leftLenL = input.int(title="Pivot Low", defval=10, minval=1, inline="Pivot Low", group=gr)
rightLenL = input.int(title="/", defval=10, minval=1, inline="Pivot Low",group=gr)
colorL = input(title="", defval=color.blue, inline="Pivot Low",group=gr)

//-----------------------------------------------------------------------------------------------------------------------//

pivotHigh(ll, rl) =>
    maxLen = 1000
    float ph = ta.pivothigh(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(ph[offset])
            break 
        offset := offset + 1
    ph[offset]

pivotLow(ll, rl) =>
    maxLen = 1000
    float pl = ta.pivotlow(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(pl[offset])
            break 
        offset := offset + 1
    pl[offset]


//-----------------------------------------------------------------------------------------------------------------------//

ph = request.security(syminfo.tickerid, tf, pivotHigh(leftLenH, rightLenH), barmerge.gaps_off, barmerge.lookahead_on)
pl = request.security(syminfo.tickerid, tf, pivotLow(leftLenL, rightLenL), barmerge.gaps_off, barmerge.lookahead_on)

drawLabel(_offset, _pivot, _style, _color) =>
    if not na(_pivot)
        label.new(bar_index[_offset], _pivot, str.tostring(_pivot, format.mintick), style=_style, color=_color, textcolor=#131722)

//-----------------------------------------------------------------------------------------------------------------------//

VWAP = ta.vwap(ohlc4)

longcondition = ta.crossunder(close,pl) and close > close[150]
exitcondition = close > ph

shortcondition = ta.crossover(close,ph) and close < close[150]
covercondition = close < pl

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = exitcondition)

strategy.entry("Short", strategy.short, when = shortcondition)
strategy.close("Short", when = covercondition)

Mais.