Stratégie quantitative de réversion à court terme de la bande de Bollinger basée sur la moyenne mobile

Auteur:ChaoZhang est là., Date: le 19 décembre 2023 16:17:47
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de négociation à court terme basée sur l'indicateur Bollinger Band. Elle combine les moyennes mobiles, les écarts types et les bandes de Bollinger pour rechercher des opportunités de négociation à court terme lorsque les prix sont anormalement dispersés.

Principe de stratégie

  1. Calculer la moyenne mobile et l'écart type. Utilisez la fonction sma ((() pour calculer la moyenne mobile sma et la fonction stdev ((() pour calculer l'écart type.

  2. Calculer les rails supérieur et inférieur de la bande de Bollinger en fonction de la moyenne mobile et de l'écart type.1 et le rail inférieur est l'écart prix-type1.

  3. Lorsque le prix franchit le rail supérieur ou inférieur, cela indique que le prix est anormal.

  4. Plus précisément, si le prix est inférieur au rail inférieur, nous allons long; si le prix est supérieur au rail supérieur, nous allons court.

Analyse des avantages

  1. Utilisez le canal de bande de Bollinger pour juger des prix anormaux, ce qui fournit une base pour le trading inverse.

  2. Combiné avec le facteur de moyenne mobile, certaines transactions bruyantes peuvent être filtrées efficacement.

  3. L'introduction du facteur d'écart type rend le canal de bande de Bollinger plus dynamique pour mieux juger des prix anormaux.

  4. Cette stratégie présente des retombées relativement faibles et une certaine stabilité.

Analyse des risques

  1. L'indicateur de la bande de Bollinger ne peut pas déterminer complètement la situation anormale des prix. Il peut y avoir de fausses ruptures.

  2. Il est recommandé d'ajuster les paramètres de manière appropriée pour contrôler la fréquence des transactions.

  3. Les signaux de rupture des bandes supérieures et inférieures de Bollinger peuvent durer longtemps. Un ajustement approprié des paramètres est nécessaire pour obtenir de meilleurs effets d'inversion.

  4. Mettre en place un stop loss approprié pour contrôler les risques.

Directions d'optimisation

  1. Optimiser le cycle de la moyenne mobile et les paramètres d'écart type pour obtenir un canal de bande de Bollinger plus raisonnable.

  2. Augmenter les facteurs auxiliaires tels que l'EMA et le MACD pour filtrer certains signaux.

  3. Mettre en place des mécanismes de contrôle de la position et de stop-loss.

  4. Optimiser la taille de la position et les mesures de contrôle de la position.

Résumé

Cette stratégie juge les prix anormaux à travers l'indicateur de la bande de Bollinger et effectue des transactions d'inversion avec des moyennes mobiles et des paramètres d'écart type. Elle a une certaine stabilité. Nous devons réduire davantage le tirage maximum de la stratégie et améliorer la stabilité par des moyens tels que l'optimisation des paramètres, l'introduction de facteurs auxiliaires, la gestion des pertes d'arrêt et le contrôle de position.


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

//@version=3
strategy("BCE Version of EMA, SMA Mean Reversion", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
 
// Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sma_lookback = input(defval=100, title="Lookback Period For SMA")
ema_lookback = input(defval=10, title="Lookback Period For EMA")
long_diff_perc = input(defval=6, title="Percentage Deviation From SMA to go Long")/100
short_diff_perc = input(defval=20, title="Percentage Deviation From SMA to go Short")/100
ema_filter_bars = input(defval=4, title="The number of bars the EMA must rise/fall")
lng_allwd = input(defval=true, title="Allow Longs?")
srt_allwd = input(defval=true, title="Allow Shorts?")
use_stop = input(defval=true, title="Use Stoploss?")
stop_perc = input(defval=30, title="Stop Loss Percentage")/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
can_trade = time >= start and time <= end
// Indicators Setup
sma = sma(close, sma_lookback)
ema = ema(close, ema_lookback)
 
// Strategy Calcuations
close_stdev = stdev(close, sma_lookback)
sd1_upper = close + (close_stdev * 1)
sd1_lower = close - (close_stdev * 1)
close_diff = (close - sma) / sma
 
// Entries and Exits
longCondition = close > sma and open > sma
if (time >= start and time <= end)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if use_stop
        stop_price = close * (1 - stop_perc)
        strategy.order("Long Stoploss", false, stop=stop_price)
 
shortCondition = close < sma and open < sma
if (shortCondition)
//    strategy.entry("Short", strategy.short)
//    if use_stop
//        stop_price = close * (1 + stop_perc)
//        strategy.order("Short Stoploss", true, stop=stop_price)
//if (time >= start)    
    strategy.close("Long", when=close < sma and open < sma)
//strategy.cancel("Long Stoploss", when=sma < sma[1])
//    strategy.close("Short", when=close > sma and open > sma)
//strategy.cancel("Short Stoploss", when=close_diff<=0)
 
// Plotting
sma_col = sma > sma[1] ? green : red
ema_fill = close_diff <= -long_diff_perc ? lime : close_diff >= short_diff_perc ? maroon : aqua
p_sma = plot(sma, color=sma_col, linewidth=3)
p_ema = plot(ema, color=black, linewidth=2)
p_sd1 = plot(sd1_upper, color=black, linewidth=1, transp=85)
p_sd2 = plot(sd1_lower, color=black, linewidth=1, transp=85)
fill(p_sd1, p_sd2, title='STDEV Fill', color=silver, transp=80)
fill(p_sma, p_ema, title='EMA > Mean Percentage', color=ema_fill, transp=80)

Plus de