Stratégie de négociation de rupture de l'élan

Auteur:ChaoZhang est là., Date: 2023-09-18 21h28 et 22h
Les étiquettes:

Résumé

Cette stratégie utilise l'indicateur de dynamisme de la courroie de Bryn pour effectuer des transactions de rupture, principalement pour déterminer si le prix dépasse la courroie de Bryn et envoie des signaux d'achat ou de vente.

Le principe

La stratégie est principalement basée sur la direction de la tendance des indicateurs de la courbe de Bryn. La courbe de Bryn est une zone conçue par une moyenne mobile et son écart type. La courbe de Bryn est une moyenne mobile de n jours, la courbe supérieure est la courbe + 2 fois l'écart type, la courbe inférieure est la courbe inférieure est la courbe supérieure à l'écart type.

Plus précisément, la stratégie consiste à calculer d'abord le prix le plus élevé et le prix le plus bas sur n jours, puis à calculer le prix intermédiaire (le prix le plus élevé + le prix le plus bas) / 2).

Si le prix de clôture dépasse la trajectoire, cela indique une tendance à la hausse; si il dépasse la trajectoire, cela indique une tendance à la baisse.

En outre, la stratégie introduit un mécanisme d'ouverture inverse des positions. Lorsque le prix dépasse la bande de Berlin, une opération de contre-marché est effectuée si le MACD est en baisse.

Les avantages

  1. Les bandes de frein sont utilisées pour déterminer la direction de la tendance et ont une certaine capacité de suivi de tendance.

  2. Les investisseurs qui investissent dans le secteur de l'électricité sont plus susceptibles d'obtenir des bénéfices de l'opération.

  3. Des paramètres tels que les cycles de Brainstorming, les multiplicateurs de décalage standard et autres peuvent être personnalisés pour s'adapter aux transactions de différents cycles.

  4. Il est possible de fermer les positions ouvertes à l'envers, ce qui réduit les risques.

Risques et contre-mesures

  1. Le Brainstorming est souvent utilisé pour des actions à forte volatilité et peut ne pas convenir à des variétés telles que les ressources ou les indices à long cycle.

  2. Les signaux de rupture peuvent provoquer de fausses ruptures.

  3. L'ouverture inverse peut augmenter encore les pertes.

  4. Les retraits peuvent être plus importants.

Optimisation

  1. Il peut être envisagé d'inclure le filtrage des tendances afin d'éviter les marchés instables dans des directions incertaines.

  2. On peut tester les multiples de la différence standard de la courroie de Bryn pour trouver un paramètre plus approprié.

  3. Une stratégie d'arrêt des pertes peut être introduite pour contrôler les pertes.

  4. La logique d'ouverture et d'augmentation des positions peut être optimisée pour rendre les signaux de trading plus clairs.

Résumé

Cette stratégie est basée sur des indicateurs de base de Brin pour déterminer la rupture de la tendance des prix. Une stratégie de suivi de tendance de base peut être réalisée en utilisant des paramètres simples. Cependant, il existe un risque de rupture et doit être filtré en combinaison avec d'autres indicateurs.

Résumé

Cette stratégie utilise l'indicateur de dynamique des bandes de Bollinger pour le trading de rupture, en jugant principalement si le prix franchit les bandes de Bollinger supérieures ou inférieures pour les signaux de trading.

Principaux

La stratégie est principalement basée sur l'indicateur Bollinger Bands pour déterminer la direction de la tendance. Les bandes de Bollinger se composent d'une bande moyenne basée sur une moyenne mobile et des bandes supérieures/inférieures définies par des écarts types. La bande moyenne est une moyenne mobile n-période, la bande supérieure est la bande moyenne + 2 écarts types, et la bande inférieure est la bande moyenne - 2 écarts types.

Plus précisément, la stratégie calcule d'abord le plus haut plus bas et le plus bas plus bas au cours des n dernières périodes, et le prix moyen ((plus haut plus bas plus bas) / 2). Il calcule ensuite la distance entre le prix de clôture et le prix moyen, utilise la moyenne mobile exponentielle de la distance pour former la bande du milieu, et ajoute / soustrait 2 fois l'écart type au-dessus et en dessous pour former les bandes supérieures et inférieures.

Lorsque le prix de clôture franchit la bande supérieure, il signale une tendance haussière; lorsqu'il franchit la bande inférieure, il signale une tendance à la baisse.

En outre, la stratégie intègre un mécanisme de contre-tendance: lorsque le prix franchit la bande supérieure mais que le MACD est en baisse, il prendra une position courte contre-tendance.

Les avantages

  1. L'utilisation des bandes de Bollinger pour déterminer la direction de la tendance fournit une certaine capacité de suivi de la tendance.

  2. La conception contre-tendance permet de profiter des retours en arrière.

  3. Les paramètres personnalisables tels que les multiples de période et d'écart type le rendent adaptable à différents horizons de négociation.

  4. Désactiver le trading contre tendance pour réduire le risque.

Risques et atténuations

  1. Les bandes de Bollinger fonctionnent mieux pour les actions à forte volatilité, mais peuvent ne pas convenir aux matières premières ou aux indices stables.

  2. Les signaux de rupture peuvent avoir de fausses ruptures, et ajouter des filtres avec d'autres indicateurs.

  3. Le contre-trend peut augmenter les pertes et désactiver le module contre-trend.

  4. Les retraits peuvent être importants et peuvent ajuster la taille des positions.

Des possibilités d'amélioration

  1. Considérez l'ajout d'un filtre de tendance pour éviter le fouet dans les marchés non directionnels.

  2. Testez différents multiples d'écart type pour trouver les paramètres optimaux.

  3. Incorporer un stop loss pour contrôler les pertes d'une seule transaction.

  4. Optimiser la logique d'entrée et d'ajout pour des signaux de trading plus clairs.

Résumé

La stratégie utilise les bandes de Bollinger comme indicateur principal et les transactions sont basées sur les ruptures de tendance. Avec des paramètres simples, elle fournit des capacités de base de suivi de tendance. Mais il existe de faux risques de rupture, nécessitant des filtres supplémentaires. Les paramètres, les arrêts de perte et les contrôles des risques peuvent être améliorés. Dans l'ensemble, elle sert de stratégie de rupture de base raisonnable.


/*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()

Plus de