Stratégie de trading de rupture de l'indicateur Momentum


Date de création: 2023-09-18 21:28:22 Dernière modification: 2023-09-18 21:28:22
Copier: 0 Nombre de clics: 405
1
Suivre
1166
Abonnés

Aperçu

Cette stratégie utilise un indicateur de dynamique de la courbe de Bolling pour effectuer des transactions de rupture, principalement pour déterminer si le prix a franchi la courbe de Bolling et s’est effondré, émettant un signal d’achat ou de vente.

Le principe

Cette stratégie est basée sur la direction de la tendance de l’indicateur de la ceinture de Brin. La ceinture de Brin est une zone en forme de bande constituée de moyennes mobiles et de leur écart-type. La ligne médiane de la ceinture de Brin est la moyenne mobile de n jours, la ligne supérieure est la ligne médiane + 2 fois l’écart-type, la ligne inférieure est la ligne médiane 2 fois l’écart-type.

Plus précisément, la stratégie commence par calculer le prix le plus élevé et le prix le plus bas sur n jours, puis le prix moyen (((le prix le plus élevé + le prix le plus bas) / 2). Ensuite, la moyenne mobile pondérée de la distance entre le prix de clôture et le prix moyen est calculée pour former la ligne médiane de la ceinture de Brin, et la ligne médiane est ajoutée au double de la différence standard pour former la voie ascendante et descendante.

Si le cours de clôture dépasse la barre supérieure, il indique une tendance à la hausse; si le cours dépasse la barre inférieure, il indique une tendance à la baisse.

En outre, la stratégie a introduit un mécanisme d’ouverture de position inverse. Lorsque le prix dépasse la courbe de Brin et se met en place, le MACD est en baisse et une opération contre-marché est effectuée.

Les avantages

  1. Les courbes de Brin sont utilisées pour déterminer la direction des tendances et ont une certaine capacité de suivi des tendances.

  2. La conception inverse de l’ouverture de la position peut générer des bénéfices négatifs.

  3. Il est possible de personnaliser des paramètres tels que la période de la ceinture de Bryn, le multiple de la différence standard, etc. pour s’adapter aux transactions de différentes périodes.

  4. Il est possible de fermer et de rétrograder pour réduire le risque.

Risques et contre-mesures

  1. Les bandes de Brin sont souvent utilisées pour les actions à forte volatilité et peuvent ne pas convenir à des variétés à long cycle telles que les ressources ou les indices. L’effet de différents paramètres de cycle peut être testé.

  2. Les signaux de rupture peuvent être falsifiés. Les signaux de filtration peuvent être combinés avec d’autres facteurs.

  3. La rétrogradation peut augmenter encore les pertes. Le module de rétrogradation peut être fermé.

  4. Les retraits peuvent être plus importants.

Direction d’optimisation

  1. Il est possible d’envisager d’ajouter des filtres de tendance pour éviter les chocs sur les marchés qui ne sont pas clairement orientés.

  2. On peut tester le multiple de la différence standard de la bande de Bryn pour trouver des paramètres plus appropriés.

  3. Il est possible d’introduire une stratégie de stop-loss pour contrôler les pertes individuelles.

  4. Il est possible d’optimiser la logique d’ouverture et d’augmentation des positions pour rendre les signaux de trading plus clairs.

Résumer

Cette stratégie est basée sur les indicateurs de la courbe de Brin, pour juger de la rupture de la tendance des prix. La stratégie de suivi de la tendance de base peut être réalisée en utilisant des paramètres simples. Cependant, il existe un certain risque de fausse rupture.

Overview

This strategy uses Bollinger Bands momentum indicator for breakout trading, mainly judging if price breaks through the upper or lower Bollinger Bands for trading signals.

Principles

The strategy is primarily based on Bollinger Bands indicator to determine trend direction. Bollinger Bands consist of a middle band based on a moving average and upper/lower bands defined by standard deviations. The middle band is a n-period moving average, the upper band is middle band + 2 standard deviations, and the lower band is middle band - 2 standard deviations. When price approaches the upper band it indicates overbought conditions, and when it approaches the lower band it signals oversold conditions.

Specifically, the strategy first calculates the highest high and lowest low over last n periods, and the middle price ((highest high + lowest low)/2). It then calculates the distance between close price and middle price, uses exponential moving average of the distance to form the middle band, and adds/subtracts 2 times standard deviation above and below to form the upper and lower bands.

When close price breaks through the upper band, it signals an uptrend; when it breaks the lower band, it signals a downtrend. The strategy goes long when the upper band is broken, and goes short when the lower band is broken.

In addition, the strategy incorporates a counter-trend mechanism. When price breaks the upper band but MACD is falling, it will take a counter-trend short position.

Advantages

  1. Using Bollinger Bands to determine trend direction provides certain trend following capability.

  2. Counter-trend design allows profiting from reversals.

  3. Customizable parameters like period and standard deviation multiples make it adaptable to different trading horizons.

  4. Disable counter-trend trading to reduce risk.

Risks and Mitigations

  1. Bollinger Bands work best for high volatility stocks, may not be suitable for stable commodities or indices. Can test different period parameters.

  2. Breakout signals may have false breakouts. Can add filters with other indicators.

  3. Counter-trend trading can further increase losses. Can disable counter-trend module.

  4. Drawdowns may be significant. Can adjust position sizing.

Enhancement Opportunities

  1. Consider adding trend filter to avoid whipsaw in non-directional markets.

  2. Test different standard deviation multiples to find optimal parameters.

  3. Incorporate stop loss to control single trade loss.

  4. Optimize entry and add-on logic for clearer trading signals.

Summary

The strategy uses Bollinger Bands as the primary indicator and trades based on trend breakouts. With simple parameters it provides basic trend following capabilities. But false breakout risks exist, requiring additional filters. Parameters, stop loss and risk controls can be enhanced. Overall it serves as a reasonable baseline breakout strategy.

Code source de la stratégie
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", 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")
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")
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, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00)
    strategy.close_all()