Stratégie de rupture de Bollinger avec la pyramide

Auteur:ChaoZhang est là., Date: 2023-11-23 14h01 et 57 min
Les étiquettes:

img

Résumé

Cette stratégie permet d'entrer dans des positions longues ou courtes basées sur les ruptures des bandes de Bollinger. Elle est longue lorsque le prix dépasse la bande inférieure et court lorsque le prix dépasse la bande supérieure.

La logique de la stratégie

La stratégie utilise 3 lignes de bandes de Bollinger - moyenne, supérieure et inférieure. La ligne du milieu est la moyenne mobile de n jours. La ligne supérieure est la ligne du milieu + k * déviation standard de n jours. La ligne inférieure est la ligne du milieu - k * déviation standard de n jours.

Lorsque le prix dépasse la ligne supérieure, il signale une tendance à la baisse et va court.

Après avoir pris des positions, la stratégie continue de pyramider, ce qui signifie ajouter plus de positions dans la même direction.

Le stop loss pour toutes les positions est également mis à jour en temps réel en fonction de la différence entre le prix moyen de détention actuel et le prix de la fourchette.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Utilisez les bandes de Bollinger pour identifier avec précision les écarts et les changements de tendance.
  2. Entrez systématiquement dans les positions de croix dorée et de croix morte.
  3. Gagner plus de profits par pyramide.
  4. Mise à jour en temps réel pour éviter d'être assommé.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Les bandes de Bollinger sont sensibles à la volatilité du marché et peuvent entraîner des sauts.
  2. La pyramide augmente l'exposition et tire parti des pertes potentielles.
  3. L'arrêt de la perte n'est pas garanti et il existe toujours une probabilité d'arrêt.

Quelques méthodes pour lutter contre les risques:

  1. Optimiser les paramètres des bandes de Bollinger pour différents cycles.
  2. Ajustez l'échelle pyramidale et la fréquence.
  3. Ajouter la ligne du milieu comme ligne de stop loss.

Directions d'optimisation

La stratégie peut être optimisée à partir des aspects suivants:

  1. Optimiser les paramètres des bandes de Bollinger pour adapter davantage de régimes de marché.
  2. Améliorer la logique pyramidale pour équilibrer risque-récompense.
  3. Ajoutez plus de lignes de stop-loss comme la ligne du milieu.
  4. Développer un mécanisme de prise de bénéfices pour verrouiller les bénéfices de manière proactive.
  5. Combinez d'autres indicateurs pour filtrer les entrées.
  6. Améliorer la gestion des risques pour contrôler les pertes par transaction.

Conclusion

En conclusion, il s'agit d'une stratégie de suivi de tendance typique. Elle prend de l'ampleur lorsque la tendance émerge et génère des bénéfices en conséquence.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title='Bollinger Band strategy with split, limit, stop', shorttitle='bb strategy', overlay=true,commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, pyramiding = 4)



//Summary: Going Long or Short when Entering after Breaking the Bollinger Bands\
//At this time, the stop-loss, profit-taking price, and pyramiding standard\
// are determined from the difference between the position average price and the band price.

//After entering the position, if the price crosses the mid-band line, the stop loss is adjusted to the mid-band line.



//each trade, entry position size = 10% of total cash
//max pyramiding is 4
//commission = 0.01%





in_period = true


bb_length = input.int(20)
bb_mult = input.int(2)

[middle, upper, lower] = ta.bb(close,bb_length, bb_mult)
plot(middle, color=color.aqua)
plot(upper, color=color.orange)
plot(lower, color=color.orange)
long_cond = ta.crossover(close,lower)
short_cond = ta.crossunder(close,upper)

var saved_ph = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size > 0
    saved_ph := upper[1]
var saved_pl = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size < 0
    saved_pl := lower[1]

avg = strategy.position_avg_price

long_diff = saved_ph-avg
short_diff = saved_pl-avg

long_stoploss = avg - 1*long_diff
short_stoploss = avg - 1*short_diff

long_avgdown = avg - 0.5*long_diff
short_avgup = avg - 0.5*short_diff

long_profit_price = avg + 0.5*long_diff
short_profit_price = avg + 0.5*short_diff

var label _label = na
if in_period
    if long_cond and strategy.opentrades==0
        strategy.entry("Long",strategy.long)
    if long_cond and strategy.opentrades >0 and (close[1]<long_avgdown or close[2]<long_avgdown)
        strategy.entry("Long",strategy.long)

    if short_cond and strategy.opentrades==0
        strategy.entry("Short", strategy.short)
    if short_cond and strategy.opentrades>0 and (close[1]>short_avgup or close[2]>short_avgup)
        strategy.entry("Short",strategy.short)

plot(avg, style=plot.style_linebr)


plot(strategy.position_size > 0? long_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0? long_avgdown: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size > 0? long_stoploss: na,color=color.red, style=plot.style_linebr)

plot(strategy.position_size < 0? short_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0? short_avgup: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size < 0? short_stoploss: na,color=color.red, style=plot.style_linebr)

if strategy.position_size > 0
    if ta.crossover(close, middle)
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=middle)
    else
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=long_stoploss)
if strategy.position_size < 0
    if ta.crossunder(close, middle)
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=middle)
    else
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=short_stoploss)

Plus de