Stratégie d'inversion de tendance

Auteur:ChaoZhang est là., Date: 2024-01-03 16h34 et 28h
Les étiquettes:

img

Résumé

La stratégie d'inversion de tendance est une stratégie de trading de tendance basée sur des moyennes mobiles et des extrêmes de prix. La stratégie utilise deux moyennes mobiles pour suivre les tendances de prix et ouvre des positions inversées lorsque les tendances s'inversent. En même temps, elle calcule également un canal de prix basé sur les prix les plus élevés et les plus bas des lignes K récentes pour arrêter la perte lorsque les prix approchent les limites du canal, contrôlant davantage les risques.

La logique de la stratégie

La stratégie utilise des moyennes mobiles de points hauts et bas de 3 périodes hma et lma pour suivre les tendances des prix.

La stratégie calcule également les rails supérieurs et inférieurs (uplevel et dnlevel) du canal de prix en fonction des prix les plus élevés et les plus bas dans les barres récentes K-lines. uplevel est le prix le plus élevé dans les barres récentes K-lines plus un coefficient de retracement vers le haut; dnlevel est le prix le plus bas dans les barres récentes K-lines moins un coefficient de retracement vers le bas.

Lors de l'ouverture de positions longues, le prix d'arrêt de perte est fixé à la barre supérieure du canal; lors de l'ouverture de positions courtes, le prix d'arrêt de perte est fixé à la barre inférieure du canal.

Lorsqu'un signal inverse apparaît, la stratégie inverse immédiatement les positions ouvertes pour suivre la nouvelle tendance des prix.

Les avantages

  • La stratégie tire pleinement parti des moyennes mobiles pour suivre les tendances et capturer rapidement les mouvements de prix.
  • Il applique des canaux de prix et inverse les positions d'ouverture pour contrôler efficacement les risques et les bénéfices.
  • La logique de la stratégie est simple et claire, facile à comprendre et à mettre en œuvre.
  • Les paramètres personnalisables tels que la longueur de jugement de tendance, les coefficients de retracement, etc., s'adaptent aux différents produits.
  • Soutenir la pyramide dans le même sens, saisir pleinement les opportunités de tendance.

Les risques

  • Prédisposé à de faux signaux lors de la consolidation des prix.
  • Les inversions de tendance peuvent ne pas toujours déclencher un stop loss, la perte maximale ne peut pas être contrôlée.
  • Des paramètres incorrects peuvent provoquer des réactions trop sensibles ou lentes.
  • Pour obtenir les meilleurs résultats, il faut choisir les produits et les délais appropriés.

Améliorations:

  1. Filtrer les signaux non valides par d'autres indicateurs;
  2. Ajouter un stop loss mobile pour verrouiller les bénéfices et limiter le tirage maximum;
  3. Tester et optimiser les paramètres pour différents produits et cycles.

Directions d'optimisation

Il est possible d'optimiser davantage:

  1. D'autres indicateurs peuvent être introduits pour filtrer certains signaux non valides, tels que le MACD, le KD, etc.

  2. Une logique d'arrêt de perte adaptative peut être ajoutée, telle que le déplacement de l'arrêt de perte, l'arrêt de perte de solde, etc., pour contrôler davantage les risques.

  3. Tester l'impact de différents paramètres sur les performances de la stratégie et optimiser les combinaisons de paramètres, telles que la longueur du cycle MA, la taille du coefficient de retracement, etc.

  4. La stratégie se négocie actuellement en sessions chronométrées. Elle peut également être ajustée à la négociation tout au long de la journée. Cela peut nécessiter des règles de filtrage supplémentaires.

Conclusion

En résumé, il s'agit d'une stratégie de trading d'inversion de tendance combinant des canaux de prix et des moyennes mobiles. En suivant les tendances et les positions d'ouverture inversées en temps opportun, il peut suivre efficacement les mouvements de prix. Dans le même temps, les mesures de contrôle des risques des canaux de prix et de l'ouverture inversée lui permettent également de contrôler efficacement les pertes individuelles. L'idée de stratégie est simple et claire, et vaut la peine d'être testée et optimisée dans le trading en direct.


/*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"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
corr = input(0.0, title = "Correction, %")
bars = input(1, minval = 1)
revers = input(false, defval = false, title = "revers")
showll = input(true, defval = true, title = "Show Levels")
showos = input(true, defval = true, title = "Show Levels one side")
showcl = input(false, defval = false, title = "Show Levels continuous line")
showbg = input(false, defval = false, title = "Show Background")
showar = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

len = input(3)

hma = sma(high, len)
lma = sma(low, len)
plot(hma)
plot(lma)

//Levels
hbar = 0
hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0
lbar = 0
lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0
uplevel = 0.0
dnlevel = 0.0
hh = highest(high, bars + 1)
ll = lowest(low, bars + 1)
uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1]
dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1]

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na
bgcolor(col)

//Lines
upcol = na
upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Arrows
longsignal = false
shortsignal = false
longsignal := size > size[1]
shortsignal := size < size[1]
plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0)

//Trading
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0 and revers == false
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Long stop", strategy.short, 0, stop = lma)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)
    strategy.entry("Short stop", strategy.long, 0, stop = hma)
    
// if time > timestamp(toyear, tomonth, today, 23, 59)
//     strategy.close_all()

Plus de