Stratégie d'inversion de la barre de broche perforante

Auteur:ChaoZhang est là., Date: 2024-01-25 12:29:29
Les étiquettes:

img

Résumé

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.

Principaux

Signaux d'entrée

Le signal d'entrée pour cette stratégie est le perçage de barres d'épingles.

  1. Une tendance particulière à court terme se forme: signaux haussiers provenant de barres bullish pin, signaux baissiers provenant de barres bearish pin
  2. La barre d'aiguille traverse les moyennes mobiles: les barres haussières traverser les MAs à tendance baissière ou les barres baissières traverser les MAs à tendance haussière

Une telle combinaison permet de filtrer la plupart des bruits et augmente la précision d'entrée.

Définition de la tendance

Pour les entrées longues, une MA rapide > une MA moyenne > une MA lente est requise.

Mécanisme d'arrêt des pertes

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.

Analyse des avantages

Entrée à haut rendement

Les signaux de perçage permettent l'entrée uniquement à des points d'opportunité à forte probabilité, évitant ainsi les transactions excessivement bruyantes.

Profites extrêmement élevés

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.

Analyse des risques

Risque de surentraînement

É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.

Risques liés au retard

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.

Directions d'optimisation

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.

Optimiser les périodes de mise en œuvre

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.

Conclusion

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)









Plus de