Stratégie cryptographique de bandes de Bollinger sur plusieurs délais

Auteur:ChaoZhang est là., Date: le 27 février 2024 14:13:39
Les étiquettes:

img

Résumé

Cette stratégie applique l'indicateur Bollinger Bands sur des délais de 1 minute, 3 minutes, 5 minutes et 15 minutes pour analyser les mouvements de prix des crypto-monnaies, afin d'identifier les opportunités d'achat et de vente. Elle utilise les prix de 5 minutes du Bitcoin comme référence pour le sentiment global du marché des crypto-monnaies. Lorsque le prix du Bitcoin dépasse la bande supérieure, le marché est considéré comme haussier. Lorsque le prix dépasse la bande inférieure, le marché est considéré comme baissier.

La logique de la stratégie

La stratégie calcule les bandes de Bollinger simultanément sur les délais de 1 minute, 3 minutes, 5 minutes et 15 minutes. Les bandes de Bollinger se composent d'une moyenne mobile de n jours (défaut de 20 jours) et d'un certain nombre d'écarts types (défaut 1.5x) au-dessus et en dessous. La moyenne mobile représente le prix moyen de la crypto sur une période de temps et l'écart type mesure la volatilité. Lorsque les prix approchent ou dépassent la bande supérieure, cela indique que le marché est sur-étendu et que la volatilité s'étend, ce qui indique un potentiel renversement vers le bas. Lorsque les prix approchent ou dépassent la bande inférieure, cela indique que le marché est survendu avec une volatilité croissante et un potentiel renversement vers le haut.

En tirant parti de cette caractéristique des bandes de Bollinger, la stratégie juge les derniers développements du marché à travers différents horizons temporels - 1 minute, 3 minutes, 5 minutes et 15 minutes. Lorsqu'il y a une rupture de bande supérieure ou inférieure dans les délais de 3 minutes ou 5 minutes, plus des signes de confirmation dans les délais de 1 minute et 15 minutes, la stratégie détermine si un dernier signal d'achat ou de vente est déclenché. En outre, la stratégie se réfère également aux prix de 5 minutes du Bitcoin pour évaluer la tendance et le sentiment du marché global (bias haussier/baissier) sur l'ensemble du marché des crypto-monnaies.

Après avoir entré dans les transactions, la stratégie définit également les conditions de prise de profit et de stop-loss. Si le prix d'entrée augmente ou diminue de 25%, le profit sera déclenché. Si le prix se déplace de plus de 25% contre la direction d'entrée, le stop-loss sera déclenché.

Les avantages

  1. La stratégie intègre à la fois des vues de marché à court et moyen terme - 1 minute et 5 minutes pour les dernières mises à jour, 15 minutes pour la tendance à moyen terme, pour éviter d'être induit en erreur par les fluctuations temporaires du marché.

  2. La stratégie surveille les éruptions de la bande du milieu, de la bande supérieure et de la bande inférieure, minimisant les occasions manquées.

  3. Le Bitcoin sert de référence et de baromètre pour les conditions et les sentiments globaux du marché, améliorant la précision des décisions.

  4. Les mécanismes de prise de bénéfices et d'arrêt des pertes contrôlent efficacement les risques.

Les risques

  1. Les écarts de bande de Bollinger présentent des caractéristiques de retard et peuvent manquer le meilleur moment d'entrée.

  2. La stratégie est vulnérable aux risques systémiques à l'échelle du marché, tels que les événements de mot de passe du cygne noir.

  3. Malgré la prise de profit et le stop loss en place, les pertes peuvent encore dépasser la marge de stop loss dans des cas extrêmes.

  4. Des paramètres inappropriés tels que la période de temps, le multiplicateur d'écart type peuvent entraîner une mauvaise qualité du signal.

Solution correspondante:

  1. Incorporer plus d'indicateurs pour déterminer le moment optimal d'entrée.

  2. Améliorer l'évaluation des risques systémiques au niveau du marché.

  3. Réduire la taille des positions et la marge de stop loss pour chaque transaction.

  4. Optimiser les paramètres par le backtesting.

Des possibilités d'amélioration

  1. Ajoutez plus de délais comme les bandes de Bollinger de 30 minutes ou 60 minutes.

  2. Sélectionnez les paramètres des bandes de Bollinger plus adaptés aux caractéristiques de chaque crypto.

  3. Incorporer le volume des transactions pour vérifier les résultats, car les volumes des transactions valident la fiabilité des mouvements de prix.

  4. Combinez d'autres indicateurs comme le Stock RSI, le MACD pour améliorer la précision des décisions.

  5. Comparez les mouvements de prix et les corrélations entre les cryptos et choisissez ceux qui ont le plus de marge de manœuvre.

  6. Optimiser les mécanismes de prise de bénéfices et d'arrêt des pertes par analyse statistique des performances historiques afin de déterminer les paramètres optimaux.

Conclusion

Il s'agit d'une stratégie de trading de crypto-monnaie à bandes de Bollinger multi-temporelles. Elle se concentre sur l'évolution des prix à court et moyen terme, en utilisant les bandes de Bollinger pour évaluer le statut MULTI haussier / baissier du marché. Pendant ce temps, elle utilise les niveaux de prix du Bitcoin comme repères et références pour aider à déterminer la tendance globale du marché des crypto-monnaies.


/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(shorttitle="Crypto BB", title="Multi-Interval Bollinger Band Crypto Strategy", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(1.5, minval=0.001, maxval=50, title="StdDev")

interval1m = request.security(syminfo.tickerid, '1', src)
interval3m = request.security(syminfo.tickerid, '3', src)
interval5m = request.security(syminfo.tickerid, '5', src)
interval15m = request.security(syminfo.tickerid, '5', src)
btcinterval5m = request.security("BTC_USDT:swap", "5", src)
bitcoinSignal = 'flat'

var entryPrice = 0.000

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

bitcoinBasis = ma(btcinterval5m, length, maType)
bitcoinDev = ta.stdev(btcinterval5m, length)
bitcoinUpper = bitcoinBasis + bitcoinDev
bitcoinLower = bitcoinBasis - bitcoinDev

basis1m = ma(interval1m, length, maType)
basis3m = ma(interval3m, length, maType)
basis5m = ma(interval5m, length, maType)
basis15m = ma(interval5m, length, maType)
dev1m = mult * ta.stdev(interval1m, length)
dev3m = mult * ta.stdev(interval3m, length)
dev5m = mult * ta.stdev(interval5m, length)
upper1m = basis1m + dev1m
lower1m = basis1m - dev1m
upper3m = basis3m + dev3m
lower3m = basis3m - dev3m
upper5m = basis5m + dev5m
lower5m = basis5m - dev5m
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis3m, "Basis 3 minute", color=#2962FF, offset = offset)
p3upper = plot(upper3m, "Upper", color=#2962FF, offset = offset)
p3lower = plot(lower3m, "Lower", color=#2962FF, offset = offset)

//Exit protocols
if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Buy'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((interval1m - entryPrice)/entryPrice) * 30 > .25
        strategy.close('Buy', comment='Take Profit on Buy')
    if ((interval1m - entryPrice)/entryPrice) * 30 < -.25
        strategy.close('Buy', comment='Stop Loss on Buy')

if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Sell'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((entryPrice - interval1m)/entryPrice) * 30 > .25
        strategy.close('Sell', comment='Take Profit on Sell')
    if ((entryPrice - interval1m)/entryPrice) * 30 < -.25
        strategy.close('Sell', comment='Stop Loss on Sell')

//Bitcoin Analysis
if (btcinterval5m < bitcoinUpper and btcinterval5m[1] > bitcoinUpper[1] and btcinterval5m[2] < bitcoinUpper[2] and btcinterval5m[3] < bitcoinUpper[3])
    bitcoinSignal := 'Bear'
if (btcinterval5m > bitcoinUpper and btcinterval5m[1] < bitcoinUpper[1] and btcinterval5m[2] > bitcoinUpper[2] and btcinterval5m[3] > bitcoinUpper[3])
    bitcoinSignal := 'Bull'

//Short protocols
if (interval3m < basis3m and interval3m[1] > basis3m[1] and interval3m[2] < basis3m[2] and interval3m[3] < basis3m[3]) or 
 (interval5m < basis5m and interval5m[1] > basis5m[1] and interval5m[2] < basis5m[2] and interval5m[3] < basis5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell'
   and src < basis1m and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Basis Band Bearish Reversal')
    //strategy.order('Sell', strategy.short, comment = 'Basis band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m < upper3m and interval3m[1] > upper3m[1] and interval3m[2] < upper3m[2] and interval3m[3] < upper3m[3]) or 
 (interval5m < upper5m and interval5m[1] > upper5m[1] and interval5m[2] < upper5m[2] and interval5m[3] < upper5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell' and bitcoinSignal == 'Bear' and src < upper1m  and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Bearish Trend Reversal')
    strategy.order('Sell', strategy.short, comment = 'Upper band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m > basis3m and interval3m[1] < basis3m[1] and interval3m[2] > basis3m[2] and interval3m[3] > basis3m[3]) or 
 (interval5m > basis5m and interval5m[1] < basis5m[1] and interval5m[2] > basis5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > basis1m  and src > basis15m
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Basis Band Bullish Reversal')
    //strategy.order('Buy', strategy.long, comment = 'Basis band fractal rejection', stop = (lower1m + basis1m)/2)

if (interval3m > lower3m and interval3m[1] < lower3m[1] and interval3m[2] > lower3m[2] and interval3m[3] > lower3m[3]) or 
 (interval5m > lower5m and interval5m[1] < lower5m[1] and interval5m[2] > lower5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > lower1m  and src > basis15m and bitcoinSignal == 'Bull' 
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Bullish Trend Reversal')
    strategy.order('Buy', strategy.long, comment = 'Lower band fractal rejection', stop = (lower1m + basis1m)/2)

Plus de