Stratégie de rupture de choc de tendance unilatérale

Auteur:ChaoZhang est là., Date: le 18 janvier 2024 à 14 h 59
Les étiquettes:

img

Résumé

La stratégie de rupture de choc de tendance à sens unique est une stratégie de rupture qui utilise les canaux de prix et le jugement de tendance.

La logique de la stratégie

La stratégie calcule les bandes supérieures et inférieures d'un canal de prix en utilisant les prix les plus élevés et les plus bas au cours de N périodes récentes.

Pour la détection de tendance, la stratégie vérifie si les bougies récentes se ferment toutes au-dessus (hausse) ou en dessous (baisse) du canal.

La stratégie fixe un objectif de profit après l'entrée et prend un profit lorsque le prix l'atteint.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. Les filtres de canal de prix réduisent les risques de fausse rupture
  2. Les entrées inversées profitent des chocs de tendance
  3. Les échappatoires améliorent la précision d'entrée.
  4. L'objectif de profit permet de tirer activement parti des gains

Analyse des risques

Il y a aussi des risques:

  1. Un paramètre de canal incorrect peut élargir/rétrécir le canal de manière excessive.
  2. Les retours en arrière contre les fortes tendances peuvent entraîner de grosses pertes
  3. Les éruptions corporelles ont tendance à générer de faux signaux sur les sommets.
  4. L'objectif de profit rigide peut laisser des bénéfices sur la table

Ceux-ci peuvent être traités par la régulation des paramètres, en évitant les renversements lors de fortes tendances, en optimisant la logique de sortie, etc.

Des possibilités d'amélioration

Quelques façons d'améliorer la stratégie:

  1. Ajouter des indicateurs de tendance pour confirmer les tendances
  2. Optimiser les paramètres de rupture du corps pour réduire les faux signaux
  3. Filtres additionnels sur le calendrier d'entrée
  4. Ajustement dynamique de l'objectif de bénéfice

Conclusion

La stratégie de rupture de choc de tendance de côté unique profite des ruptures contre la tendance dans des périodes variables. Elle présente l'avantage de l'identification de tendance et de la prise de profit active, mais comporte également certains risques. Ces risques peuvent être réduits grâce à la confirmation multi-facteurs, l'optimisation des paramètres, etc. La stratégie convient au trading à court terme et peut compléter les stratégies de suivi de tendance.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.5", shorttitle = "Scalper str 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Plus de