Cette stratégie identifie les renversements de tendance dans les actifs cryptographiques basés sur les points hauts / bas de swing PIVOT et les signaux de rupture. Elle appartient à la catégorie des stratégies de renversement de rupture.
Calculer les points pivot haut/bas
Utilise ta.pivothigh (() et ta.pivotlow (()) pour trouver les prix les plus élevés et les plus bas au cours d'une période de recherche de barre personnalisée pour tracer des points PIVOT.
Identifier les signaux de rupture
Si le prix dépasse le bas PIVOT ou le haut PIVOT, la stratégie le considère comme un signal d'inversion de tendance.
Définir les conditions du filtre
Exige que le prix dépasse les niveaux PIVOT à une distance significative, et que le prix de clôture franchisse les prix de clôture de 150 bar pour éviter les coups de fouet.
Entrées et sorties
Trigger le signal d'achat sur la condition longue, fermer la position longue sur la condition de sortie.
La stratégie est globalement robuste pour capturer de grands retours en arrière, mais nécessite des paramètres personnalisés par actif et des contrôles de risque.
/*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)