Stratégie de réversion de la bande de volatilité de Bitcoin

Auteur:ChaoZhang est là., Date: 2023-10-12 17:38:39 Je suis désolé
Les étiquettes:

Résumé

Cette stratégie est un système de pullback conçu pour les titres à forte volatilité, donc naturellement Bitcoin est un excellent choix pour le négocier.

La logique de la stratégie

La stratégie calcule la volatilité en comparant le changement de prix de clôture des 2 bougies précédentes, et utilise ce changement de prix pour générer une moyenne mobile. Une bande est enroulée autour de la moyenne mobile avec un écart type de 1 pour la bande interne et 2 pour la bande externe. Si le prix est au-dessus d'un filtre MA (mobile average) prédéfini, il est déterminé que nous sommes dans une tendance haussière.

L'utilisateur peut modifier la plage de dates qu'il souhaite tester, la période moyenne mobile pour le suivi de la volatilité et les écarts des bandes interne et externe. Sur BTC, j'ai laissé les bandes de déviation interne et de déviation externe sur les paramètres standard, mais j'ai trouvé que le suivi de la volatilité à 3 périodes était bon pour le trading sur le graphique de 1 jour et le suivi de la volatilité à 5 périodes pour le graphique de 3 heures. Puisque ce n'est pas une stratégie d'achat et de détention, pour le trading, vous voudrez probablement vous en tenir aux pièces les plus liquides afin de pouvoir entrer et sortir très rapidement sur n'importe quel échange. Si vous voulez le faire sur des marchés moins volatils, alors changer la bande de déviation interne à ~ 0,75 fonctionnerait bien sur divers marchés à terme.

Les avantages de la stratégie

  • Utilise le trading de volatilité pour capturer les points tournants du marché
  • Opérations à la fois longues et courtes, profitant sur les marchés à la hausse et à la baisse
  • Paramètres standard simples et faciles à utiliser
  • Les paramètres peuvent être facilement optimisés pour différents sous-jacents
  • Des paramètres raisonnables de stop loss et de prise de profit aident à maintenir les bénéfices

Risques liés à la stratégie

  • Les actifs sous-jacents à volatilité élevée risquent des pertes plus importantes
  • Les coûts de négociation sont plus élevés si les échanges longs/courts sont fréquents
  • Les opérations à court terme nécessitent une surveillance étroite du marché
  • Difficile d'arrêter les pertes lorsque la liquidité du marché est faible
  • Un mauvais réglage des paramètres peut entraîner une survente

Méthodes d'atténuation des risques:

  1. Choisissez les sous-jacents volatils appropriés, contrôlez la taille de la position.

  2. Optimiser les paramètres pour réduire les transactions inefficaces.

  3. Utilisez le stop-loss et le profit, une gestion stricte de l'argent.

  4. Concentrez-vous sur l'efficacité de l'exécution, choisissez des sous-jacents liquides.

  5. Ajustez les paramètres en fonction des différentes caractéristiques sous-jacentes.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Optimiser la période de moyenne mobile pour mieux suivre la volatilité des différents actifs sous-jacents.

  2. Ajuster les paramètres de la fourchette de volatilité pour mieux s'adapter à la fourchette de volatilité spécifique de l'indice sous-jacent.

  3. Ajoutez d'autres filtres comme le pic de volume pour valider davantage les signaux.

  4. Utiliser des techniques d'apprentissage automatique pour optimiser dynamiquement les paramètres d'adaptabilité.

  5. Testez sur des délais de fréquence plus élevés pour saisir plus d'opportunités commerciales.

  6. Ajoutez le suivi stop loss/take profit pour en tirer plus.

  7. Combiner avec d'autres indicateurs ou modèles pour élaborer des stratégies de portefeuille quantitatives.

Résumé

La stratégie globale est assez simple et intuitive, identifiant les retours via l'indicateur de volatilité pour capturer les points tournants du marché. Il existe un grand espace d'optimisation en ajustant les paramètres et en incorporant d'autres indicateurs techniques pour améliorer davantage la stabilité et la rentabilité. Cependant, les traders doivent être conscients des problèmes de surajustement et de correction de courbe.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-10-11 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gary_trades
//This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC).
//It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest.

//@version=4

strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100)

//VOLATILTY
CandleChange = ((close - close[1])/close)*100         //OR CandleChange = ((close[2] - close[1])/close)*100
plot(CandleChange, color=color.red, linewidth = 1)

//VOLATILITY BANDS 
MAlen = input(7, minval=3, maxval=30, title=" MA Length")
MAout = sma(CandleChange, MAlen)
plot(MAout, color=color.black, display=display.none)

InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band")
OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band")
devInner = InnerBand * stdev(CandleChange, MAlen)
devOuter = OuterBand * stdev(CandleChange, MAlen)

upper1 = MAout + devInner
lower1 = MAout - devInner
b1 = plot(upper1, "Upper Inner", color=color.gray)
b2 = plot(lower1, "Lower Inner", color=color.gray)
upper2 = MAout + devOuter
lower2 = MAout - devOuter
b3 = plot(upper2, "Upper Outer", color=color.gray)
b4 = plot(lower2, "Lower Outer", color=color.gray)
fill(b1, b3, color.rgb(250,145,175,70), title="Background")
fill(b2, b4, color.rgb(250,145,175,70), title="Background")

band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)

//LONG FILTER
VolFilterL = CandleChange <= lower1 and CandleChange > lower2
SMAFilterL = close[1] > sma(close[1], 50)
PriceFilterL = close > lowest(close,7)
LongFilter = VolFilterL and SMAFilterL and PriceFilterL
bgcolor(LongFilter ? color.new(color.green, 80) : na)

//SHORT FILTER
VolFilterS = CandleChange >= upper1 and CandleChange < upper2
SMAFilterS = close[1] < sma(close[1], 50)
PriceFilterS = close < highest(close,7)
ShortFilter = VolFilterS and SMAFilterS and PriceFilterS
bgcolor(ShortFilter ? color.new(color.red, 80) : na)

//SETTING BACK TEST INPUTS
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)

startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00)
time_condition = time >= startDate and time <= finishDate

//ORDER DETAILS
Risk = (high[7] - low[7])/ 7
Profit = Risk*1.15
Loss = Risk*0.65

AlertMSG = "New stategy position" + tostring(strategy.position_size)

if (time_condition) 
    strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG)
    if (LongFilter)
        LongStop = strategy.position_avg_price - Loss
        LongProfit = strategy.position_avg_price + Profit 
        strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit)

if (time_condition)
    strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG)
    if (ShortFilter)
        ShortStop = strategy.position_avg_price + Loss
        ShortProfit = strategy.position_avg_price - Profit 
        strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)




Plus de