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.
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.
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.
Lorsque le prix franchit le rail supérieur ou inférieur, cela indique que le prix est anormal.
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.
Utilisez le canal de bande de Bollinger pour juger des prix anormaux, ce qui fournit une base pour le trading inverse.
Combiné avec le facteur de moyenne mobile, certaines transactions bruyantes peuvent être filtrées efficacement.
L'introduction du facteur d'écart type rend le canal de bande de Bollinger plus dynamique pour mieux juger des prix anormaux.
Cette stratégie présente des retombées relativement faibles et une certaine stabilité.
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.
Il est recommandé d'ajuster les paramètres de manière appropriée pour contrôler la fréquence des transactions.
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.
Mettre en place un stop loss approprié pour contrôler les risques.
Optimiser le cycle de la moyenne mobile et les paramètres d'écart type pour obtenir un canal de bande de Bollinger plus raisonnable.
Augmenter les facteurs auxiliaires tels que l'EMA et le MACD pour filtrer certains signaux.
Mettre en place des mécanismes de contrôle de la position et de stop-loss.
Optimiser la taille de la position et les mesures de contrôle de la position.
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)