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 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.
Améliorations:
Il est possible d'optimiser davantage:
D'autres indicateurs peuvent être introduits pour filtrer certains signaux non valides, tels que le MACD, le KD, etc.
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.
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.
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.
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()