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


Date de création: 2024-01-18 14:59:30 Dernière modification: 2024-01-18 14:59:30
Copier: 1 Nombre de clics: 614
1
Suivre
1617
Abonnés

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

Aperçu

La stratégie de rupture de choc de tendance à un seul côté (Single Side Trend Shock Breakout Strategy) est une stratégie de rupture utilisant le canal de prix et le jugement de la tendance. Elle vise à identifier la direction de la tendance, à pénétrer dans la zone de choc et à s’en sortir après avoir atteint le but de profit fixé.

Principe de stratégie

La stratégie fonctionne en calculant la trajectoire ascendante et descendante de la chaîne de prix pour déterminer si le prix a franchi la chaîne. Plus précisément, la stratégie calcule d’abord le prix le plus élevé et le prix le plus bas des N cycles les plus récents et calcule la ligne médiane du prix.

Pour déterminer la tendance, la stratégie vérifie si les dernières lignes K sont toutes fermées au-dessus du canal (signaux à plusieurs têtes) ou sous le canal (signaux à vide). Après avoir déterminé la tendance, la stratégie attend que les prix oscillent, forment un signal de rupture près de la voie supérieure ou inférieure du canal et entrent dans le jeu en utilisant une entrée inversée.

En outre, la stratégie décide de la rupture de l’entité de la ligne K, comme signal d’entrée complémentaire. La stratégie définit un objectif de profit après l’entrée et arrête activement lorsque le prix atteint le but.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’utilisation des canaux de prix pour déterminer la direction de la tendance peut réduire la probabilité de fausses ruptures
  2. La rétrogradation permet de faire des bénéfices lorsque la tendance est instable
  3. La percée de l’entité sert de signal complémentaire pour améliorer la précision d’entrée
  4. Réglez un objectif d’arrêt, vous pouvez l’arrêter automatiquement.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Les paramètres du canal de prix sont mal configurés, ce qui peut entraîner une portée de canal trop grande ou trop petite
  2. Une inversion de tendance pourrait entraîner des pertes importantes
  3. Les fausses signaux sont faciles à détecter.
  4. Une mauvaise configuration du pare-brise peut entraîner une perte de profit

Pour réduire le risque, il est possible d’ajuster les paramètres pour réduire la portée des canaux, éviter les positions inversées dans une tendance forte, optimiser la logique d’arrêt, etc.

Direction d’optimisation

Cette stratégie peut également être optimisée dans les directions suivantes:

  1. Augmentation des indicateurs de jugement des tendances afin d’assurer l’exactitude des jugements des tendances
  2. Optimiser les paramètres de la percée de l’entité, réduire le taux de faux signal de tête
  3. Le moment de l’entrée, avec plus de filtres
  4. Modification dynamique de la position de l’arrêt

Résumer

La stratégie unilatérale de rupture de la tendance de la tendance à travers le canal de prix et la tendance de jugement, la méthode de construction de position inverse dans la zone de choc profite. Il a les avantages de la tendance de jugement, de l’arrêt de l’initiative, mais il y a aussi un certain risque.

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