Esta estrategia identifica las reversiones de tendencia en los activos criptográficos en función de los puntos altos/bajos de swing PIVOT y las señales de ruptura. Pertenece a la categoría de estrategia de reversión de ruptura. La estrategia primero calcula los puntos de precio más altos y más bajos recientes como niveles PIVOT, luego detecta si el precio rompe estos niveles clave, lo que señala cambios importantes en la tendencia.
Calcular los puntos altos/bajos del PIVOT
Utiliza ta.pivothigh (()) y ta.pivotlow (()) para encontrar los precios más altos y más bajos durante un período de búsqueda de barra personalizada para trazar puntos PIVOT.
Identificar las señales de ruptura
Si el precio se rompe por encima del punto bajo PIVOT, o se rompe por debajo del punto alto PIVOT, la estrategia lo considera una señal de inversión de tendencia.
Establecer las condiciones del filtro
Requiere que el precio rompa los niveles de PIVOT por una distancia significativa, y el precio de cierre cruza los precios de cierre de 150 bares para evitar los golpes.
Entrada y salida
Trigger buy en condiciones largas, cierre de posición larga en condiciones de salida.
La estrategia es robusta en general para capturar grandes reversiones, pero necesita parámetros personalizados por activo y controles de riesgo.
/*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)