Stratégie de retournement à court terme


Date de création: 2024-01-25 12:29:29 Dernière modification: 2024-01-25 12:29:29
Copier: 1 Nombre de clics: 612
1
Suivre
1617
Abonnés

Stratégie de retournement à court terme

Aperçu

La stratégie d’inversion de la ligne courte est une stratégie de trading de tendance basée sur la forme de la ligne courte. Elle utilise la forme de la ligne courte comme signal, combinée à une moyenne mobile pour déterminer la direction de la tendance, permettant une entrée à taux élevé.

Principe de stratégie

Signaux d’entrée

La stratégie consiste à pénétrer le signal d’entrée en forme de ligne courte. Plus précisément, le signal est généré lorsque les deux conditions suivantes sont remplies:

  1. Formation d’une forme de courte ligne spécifique: le signal à plusieurs têtes est une courte ligne droite, le signal à tête vide est une courte ligne gauche
  2. Les courts-circuits traversent les moyennes mobiles: les courts-circuits traversent les moyennes mobiles en baisse, ou les courts-circuits traversent les moyennes mobiles en hausse

Ces signaux combinés filtrent la plupart du bruit, ce qui améliore la précision d’entrée.

Le jugement des tendances

La stratégie utilise des moyennes mobiles de trois périodes différentes pour juger de la tendance. Plus précisément, la ligne rapide, la ligne moyenne et la ligne lente sont définies comme tendances lorsqu’elles sont alignées de manière isoconditionnelle, sinon comme compilées.

Pour une entrée à plusieurs têtes, il faut une ligne rapide > moyenne > lente; pour une entrée à vide, il faut une ligne rapide < moyenne < lente.

Les mécanismes d’arrêt

Cette stratégie utilise un mécanisme unique de suivi des arrêts. Une fois la position ouverte, le point de rupture optimal est suivi en fonction du nombre de points et du décalage définis par l’utilisateur. Cela permet de bloquer le maximum de gains tout en contrôlant les risques.

Analyse des avantages

Entrée à haut rendement

Les signaux de pénétration de courte ligne permettent à la stratégie de ne prendre position que sur des opportunités à forte probabilité, évitant ainsi les transactions trop bruyantes. En combinaison avec le jugement de la tendance, la plupart des opérations de direction non traditionnelle peuvent être filtrées. Cela garantit une grande précision de la stratégie.

Une épaisseur supérieure à la normale

Un mécanisme unique de suivi des stop-loss est le point fort de la stratégie. Il permet de contrôler chaque stop-loss avec précision dans une petite plage, en garantissant un taux de réussite élevé et une très forte rentabilité.

Les résultats de la simulation ont montré qu’après avoir utilisé ce mécanisme, les paires de devises ont réalisé des rendements globaux supérieurs à 1000%, des gains maximaux de plus de 100 fois et des gains sans précédent.

Analyse des risques

Risques de sur-optimisation

Étant donné que les résultats des tests sont proches de la coupe sainte, il est fort probable qu’il s’agisse d’un résultat de la simulation excessive du marché. Le mécanisme de suspension des pertes sur disque peut ne pas fonctionner aussi précisément que dans les tests, ce qui entraînera un certain retrait.

De plus, la période de test est de deux ans seulement et les changements de structure du marché peuvent également affecter la performance du disque dur.

Suivre le risque de rupture

La traçabilité des arrêts de perte est trop sensible, ce qui peut entraîner un excès de déclenchement des arrêts. De plus, des événements inattendus sur le marché peuvent entraîner l’invalidation des arrêts de perte. Ce sont tous des risques auxquels il faut faire face en utilisant le suivi des arrêts de perte.

Direction d’optimisation

Ajustez le paramètre de suivi des pertes

Le suivi des stop-loss est la clé de l’ensemble de la stratégie de gain explosif. Afin de la rendre à la fois agile et fiable, il est possible d’essayer d’assouplir correctement le suivi des points de stop-loss pour le rendre moins sensible.

L’ajout d’une fenêtre de temps de test permet également de vérifier la stabilité des paramètres.

Optimisation des cycles de la moyenne mobile

La période de la moyenne mobile actuelle n’est pas la combinaison optimale des paramètres. On peut trouver de meilleurs paramètres en effectuant des tests d’optimisation pour obtenir de meilleurs résultats.

Par exemple, augmenter l’écart entre les périodes de la ligne rapide et de la ligne médiane, ou ajuster la manière dont les trois lignes se croisent.

Résumer

La stratégie d’inversion de la ligne courte de traversée a obtenu des résultats impressionnants dans les tests de simulation grâce à une entrée de jeu efficace et à des arrêts super puissants. Cependant, nous devons être conscients des risques de suradaptation et être prêts à contrôler les risques.

Avec des ajustements appropriés de paramètres ou d’optimisation, cette stratégie peut être capable de générer des gains significatifs dans le jeu réel et de devenir un système de tendance puissant. Son concept unique de suivi des arrêts de perte nous fournit également des informations précieuses qui peuvent générer plus de stratégies innovantes.

Code source de la stratégie
/*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)