
Cette stratégie est une stratégie de trading inverse de courte ligne basée sur l’indicateur de la ceinture de Brin. Elle combine la ligne moyenne, l’écart-type et le canal de la ceinture de Brin pour rechercher des opportunités de trading inverse lorsque le prix est anormalement dispersé.
Calculer la moyenne et l’écart-type. Calculer la moyenne et l’écart-type en utilisant la fonction sma (). Calculer l’écart-type en utilisant la fonction stdev ().
La bande de Brin monte et descend en fonction de la moyenne et de l’écart-type. La ligne supérieure est le prix + l’écart-type*1, la ligne de fond est le prix-différence standard*1。
Lorsque le prix est en hausse ou en baisse, cela indique qu’il y a une anomalie dans le prix, et c’est à ce moment-là que nous décidons de faire un revirement.
Plus précisément, si le prix est en dessous de la barre inférieure, nous faisons une transaction à plusieurs niveaux; si le prix est au-dessus de la barre supérieure, nous faisons une transaction à court.
L’utilisation du canal de la ceinture de Brin pour détecter des anomalies de prix fournit une base pour le renversement des transactions.
La combinaison de facteurs homogènes permet de filtrer efficacement une partie de la transaction de bruit.
L’introduction du facteur d’écart standard a permis à Brin d’être plus dynamique et de mieux juger des anomalies de prix.
La stratégie de retrait est plus modeste et présente une certaine stabilité.
L’indicateur de la ceinture de Brin ne permet pas de juger de manière exhaustive des anomalies dans les prix, et il est possible qu’il y ait une fausse rupture.
La fréquence des transactions peut être trop élevée, il est recommandé d’ajuster les paramètres pour contrôler la fréquence des transactions.
Le signal de descente à travers la bande de Brin peut prendre plus de temps et nécessite une adaptation appropriée des paramètres pour un meilleur effet de retour.
La mise en place d’un stop-loss approprié pour contrôler le risque.
La stratégie est basée sur l’indicateur de la courbe de Brin pour juger de l’anomalie des prix et de faire des transactions inverses avec des paramètres de moyenne et de standard. Elle a une certaine stabilité. Nous devons réduire davantage le retrait maximal 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 et le contrôle des positions.
/*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)