
Cette stratégie permet de déterminer la direction de la tendance du marché en calculant les moyennes mobiles indicielles (EMA) de deux périodes différentes, et de réaliser des transactions de suivi de tendance, en combinant l’adaptation de Brin avec la découverte d’opportunités de survente et de survente.
Calculer 200 cycles et 30 cycles EMA, 200 EMA supérieurs à 30 EMA jugé comme une tendance à la ligne longue vers le haut, sinon jugé comme une tendance à la ligne longue vers le bas.
Après avoir déterminé la direction de la tendance, calculer les lignes de base, les lignes supérieures et inférieures de la ceinture de Brin. Les lignes de base utilisent des périodes configurables (par exemple, 8 périodes) et les bandes de largeur utilisent les multiples configurables les plus éloignés des prix les plus élevés et les plus bas de la même période (par exemple, 1,3 et 1,1).
Lorsqu’une ligne est longue vers le haut, elle est considérée comme un point d’achat lorsque le prix dépasse la trajectoire de bas en haut. Lorsqu’elle est longue vers le bas, elle est considérée comme un point de vente lorsque le prix dépasse la trajectoire de haut en bas.
Pour filtrer une fausse rupture, vérifiez si le taux de variation de la première ligne K au moment de la rupture est inférieur à la valeur configurable (par exemple, 3%), et vérifiez si l’intervalle entre les rails de la ceinture de bourin est supérieur à la distance de configuration requise (par exemple, 2,2%).
Après l’ouverture de la position, définissez des arrêts configurables (par exemple, 3%) et des arrêts (par exemple, 10%), afin de bloquer les bénéfices.
Les doubles EMA évaluent les tendances dominantes et évitent d’ouvrir des positions désordonnées lorsque les tendances dominantes ne sont pas connues.
Le point d’ouverture de la zone de Brin adapté, qui ajuste automatiquement le paramètre de largeur de bande en fonction de la tendance, permet de bloquer davantage la tendance.
Le mécanisme de vérification du taux de variation et de la bande passante minimale est efficace pour filtrer les fausses intrusions.
Le stop loss est réglé de manière raisonnable et le risque de lock-in est contrôlable.
Les doubles EMA ne sont pas en mesure de déterminer avec précision les points de basculement et peuvent manquer une opportunité de basculement.
Une mauvaise configuration des paramètres de la bande de Bryn peut entraîner un faux signal.
Le stop loss fixe est difficile à adapter aux fluctuations du marché.
En combinaison avec d’autres indicateurs, les tendances sont évaluées et les principaux points de changement de tendance sont déterminés.
La méthode d’ajustement dynamique des paramètres de la bande de Bryn.
Réglez le stop conditionnel et ajustez la ligne de stop en fonction des conditions spécifiques.
Cette stratégie utilise une approche intégrée de suivi de la tendance en utilisant les deux EMA pour déterminer la tendance principale et la découverte d’opportunités de la bande de boulonnage. L’avantage de la stratégie réside dans la définition raisonnable des conditions d’ouverture et de fermeture, permettant de bloquer efficacement la tendance à la rentabilité. Il existe également certains risques, tels que l’incapacité à déterminer le point de basculement et la configuration incorrecte des paramètres de la bande de boulonnage.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2039, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
strategy("Custom Band Strategy", overlay=true)
source = close //종가 기준
//추세 조건 설정
emaLong = ema(source, input(200, minval=0))
emaShort = ema(source, input(30, minval=0))
trend = if emaShort>=emaLong
1
else
-1
plot(emaLong, color=red, transp=0)
plot(emaShort, color=blue, transp=0)
//BB 계산(default 14/3.2)
length = input(8, minval=1)
basis = sma(source, length)
plot(basis, color=green, transp=0)
max=highest(abs(source-basis), length)
factor1 = input(1.3, minval=0.5)
factor2 = input(1.1, minval=0.5)
upper = if trend==1
basis + max*factor1
else
basis + max*factor2
lower = if trend==-1
basis - max*factor1
else
basis - max*factor2
plot1 = plot(upper)
plot2 = plot(lower)
fill(plot1, plot2, transp=80, color=green)
//밴드 이탈 후 재진입 조건 설정
cross_over = (low<=lower and close>=lower) or crossover(close,lower)
cross_under = (high>=upper and close<=upper) or crossunder(close,upper)
//변동율 계산
maxCandle=highest(abs(open-close), length)
roc = abs(open-close)/open*100
changerate = input(3, minval=0.0)
//수익률 계산
value = abs(strategy.position_size)*strategy.position_avg_price
roe = strategy.openprofit/value * 100
expRoeL = (upper-lower)/lower*100
expRoeS = (upper-lower)/upper*100
exp = input(2.2, minval=0.0)
target = input(10, minval=0.0)
stop = input(-3, minval=-10.0)
strategy.close_all(when=roc>=changerate and testPeriod())
strategy.close_all(when=roe>=target and testPeriod())
strategy.close_all(when=roe<=stop and testPeriod())
plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross")
plotchar(roc>=changerate,color=red, transp=0, text="roc")
plotchar(roe>=target,color=blue, transp=0, text="target")
plotchar(roe<=stop,color=green, transp=0, text="stop")
minroe = input(2, minval=0.0)
strategy.close_all(when=cross_under and roe>minroe and testPeriod())
strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands", comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and
//else
strategy.close_all(when=cross_over and roe>minroe and testPeriod())
strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands", comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and