La piercing pin bar reversal strategy est une stratégie de trading de tendance basée sur des modèles de prix à court terme. Elle utilise des pin bars comme signaux, combinés avec des moyennes mobiles pour déterminer la direction de la tendance, pour atteindre une entrée de haute précision.
Le signal d'entrée pour cette stratégie est le perçage de barres d'épingles.
Une telle combinaison permet de filtrer la plupart des bruits et augmente la précision d'entrée.
Pour les entrées longues, une MA rapide > une MA moyenne > une MA lente est requise.
La stratégie utilise un mécanisme unique de stop loss. Après l'entrée, les points de stop loss optimaux sont suivis en fonction des valeurs définies par l'utilisateur pour les points de trailing et de décalage. Cela permet de maximiser les bénéfices capturés tout en contrôlant le risque.
Les signaux de perçage permettent l'entrée uniquement à des points d'opportunité à forte probabilité, évitant ainsi les transactions excessivement bruyantes.
L'arrêt de trail unique est le plus grand point fort de cette stratégie. Il contrôle précisément l'arrêt de perte dans une petite plage sur une base par transaction, tout en assurant le profit maximal capturé.
Les résultats de simulation montrent une rentabilité folle après l'application de ce mécanisme, avec un rendement total supérieur à 1000% pour plusieurs paires, et un profit maximum par transaction de plus de 100 fois le risque initial.
Étant donné les résultats presque "saints graals", il est fort probable qu'il s'agisse d'une simulation surchargée des marchés.
En outre, la courte période d'essai de deux ans peut ne pas tenir compte des changements structurels du régime du marché susceptibles d'avoir une incidence sur les résultats réels.
Les valeurs de stop de trailing trop sensibles peuvent provoquer des stop-out indésirables excessifs. Des événements soudains sur le marché peuvent également invalider les ordres de stop-loss de trailing.
Pour le rendre à la fois agile et fiable, essayez de détendre les points de retard pour éviter la sursensibilité.
L'augmentation du délai d'essai aide également à examiner la robustesse des paramètres.
Les périodes actuelles de MA ne sont probablement pas l'ensemble de paramètres optimal.
Par exemple, en augmentant la différence entre les périodes de MA rapides et moyennes, ou en modifiant la façon dont les MA interagissent.
La stratégie d'inversion de la barre de piercing a obtenu des résultats étonnants grâce à une entrée à haut rendement et à une prise de profit extrême.
Avec un ajustement ou une optimisation appropriés des paramètres, cette stratégie peut être en mesure de générer des profits considérables dans le trading en direct, devenant un système de suivi de tendance puissant.
/*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"}] */ //@version=4 //Time Frame: H1 strategy("Pin Bar Magic v1", overlay=true) // User Input usr_risk = input(title="Equity Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=3,confirm=false) atr_mult = input(title="Stop Loss (x*ATR, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=0.5,confirm=false) slPoints = input(title="Stop Loss Trail Points (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false) slOffset = input(title="Stop Loss Trail Offset (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false) sma_slow = input(title="Slow SMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false) ema_medm = input(title="Medm EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=18,confirm=false) ema_fast = input(title="Fast EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=6,confirm=false) atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,confirm=false) ent_canc = input(title="Cancel Entry After X Bars (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=3,confirm=false) // Create Indicators slowSMA = sma(close, sma_slow) medmEMA = ema(close, ema_medm) fastEMA = ema(close, ema_fast) bullishPinBar = ((close > open) and ((open - low) > 0.66 * (high - low))) or ((close < open) and ((close - low) > 0.66 * (high - low))) bearishPinBar = ((close > open) and ((high - close) > 0.66 * (high - low))) or ((close < open) and ((high - open) > 0.66 * (high - low))) atr = atr(atr_valu) // Specify Trend Conditions fanUpTrend = (fastEMA > medmEMA) and (medmEMA > slowSMA) fanDnTrend = (fastEMA < medmEMA) and (medmEMA < slowSMA) // Specify Piercing Conditions bullPierce = ((low < fastEMA) and (open > fastEMA) and (close > fastEMA)) or ((low < medmEMA) and (open > medmEMA) and (close > medmEMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA)) bearPierce = ((high > fastEMA) and (open < fastEMA) and (close < fastEMA)) or ((high > medmEMA) and (open < medmEMA) and (close < medmEMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA)) // Specify Entry Conditions longEntry = fanUpTrend and bullishPinBar and bullPierce shortEntry = fanDnTrend and bearishPinBar and bearPierce // Long Entry Function enterlong() => risk = usr_risk * 0.01 * strategy.equity stopLoss = low[1] - atr[1] * atr_mult entryPrice = high[1] units = risk / (entryPrice - stopLoss) strategy.entry("long", strategy.long, units, stop=entryPrice) strategy.exit("exit long", from_entry="long", trail_points=slPoints, trail_offset=slOffset) // Short Entry Function entershort() => risk = usr_risk * 0.01 * strategy.equity stopLoss = high[1] + atr[1] * atr_mult entryPrice = low[1] units = risk / (stopLoss - entryPrice) strategy.entry("short", strategy.short, units, stop=entryPrice) strategy.exit("exit short", from_entry="short", trail_points=slPoints, trail_offset=slOffset) // Execute Long Entry if (longEntry) enterlong() // Execute Short Entry if (shortEntry) entershort() // Cancel the Entry if Bar Time is Exceeded strategy.cancel("long", barssince(longEntry) > ent_canc) strategy.cancel("short", barssince(shortEntry) > ent_canc) // Force Close During Certain Conditions strategy.close_all(when = hour==16 and dayofweek==dayofweek.friday, comment = "exit all, market-closed") strategy.close_all(when = crossunder(fastEMA, medmEMA), comment = "exit long, re-cross") strategy.close_all(when = crossover(fastEMA, medmEMA), comment = "exit short, re-cross") // Plot Moving Averages to Chart plot(fastEMA, color=color.red) plot(medmEMA, color=color.blue) plot(slowSMA, color=color.green) // Plot Pin Bars to Chart plotshape(bullishPinBar, text='Bull PB', style=shape.labeldown, location=location.abovebar, color=color.green, textcolor=color.white, transp=0) plotshape(bearishPinBar, text='Bear PB', style=shape.labelup, location=location.belowbar, color=color.red, textcolor=color.white, transp=0) // Plot Days of Week plotshape(hour==0 and dayofweek==dayofweek.monday, text='Monday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0) plotshape(hour==0 and dayofweek==dayofweek.tuesday, text='Tuesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0) plotshape(hour==0 and dayofweek==dayofweek.wednesday, text='Wednesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0) plotshape(hour==0 and dayofweek==dayofweek.thursday, text='Thursday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0) plotshape(hour==0 and dayofweek==dayofweek.friday, text='Friday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0) plotshape(hour==16 and dayofweek==dayofweek.friday, text='Market Closed', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)