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.
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.
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.
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.
Entradas e saídas
Trigger comprar sinal na condição longa, fechar a posição longa na condição de saída.
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)