
A estratégia determina a direção da tendência do mercado através da calculação de duas médias móveis indexadas (EMA) de diferentes períodos, combinando com a determinação da direção da tendência, a descoberta de oportunidades de sobrevenda e sobrevenda, em combinação com a auto-adaptação de Brin, para a realização de negociações de acompanhamento de tendências.
Calcule 200 e 30 EMAs. Se 200 EMAs forem maiores que 30 EMAs, será considerado um aumento na linha longa, caso contrário, será considerado um decréscimo na linha longa.
Depois de determinar a direção da tendência, calcule a linha de base, a linha de base e a linha de base. A linha de base usa o SMA de um período configurável (por exemplo, 8 ciclos), e a largura de banda usa o múltiplo configurável do extremo oposto dos preços mais altos e mais baixos do mesmo período (por exemplo, 1,3 e 1,1).
Quando a linha é longa para cima, quando o preço de baixo para cima quebra o downtrend, é julgado como um ponto de compra; quando a linha é longa para baixo, quando o preço de cima para baixo quebra o uptrend, é julgado como um ponto de venda.
Para filtrar a falsa ruptura, verifique se a taxa de variação da linha K anterior é menor do que o valor configurável (por exemplo, 3%), e verifique se a distância entre as faixas de Brin e as faixas de Brin é maior do que a distância configurável (por exemplo, 2,2%).
Depois da abertura da posição, configure um stop loss (por exemplo, 3%) e um stop loss (por exemplo, 10%), para bloquear o lucro.
A EMA dupla julga a tendência principal e evita abrir posições desordenadas quando a tendência principal é desconhecida.
O ponto de abertura de posição é configurado na faixa de Brin adaptável e os parâmetros de largura de banda são automaticamente ajustados de acordo com a tendência para bloquear a tendência.
A taxa de variação e o mecanismo de verificação de banda mínima filtram efetivamente as brechas falsas.
A configuração do Stop Loss Stop é razoável e o risco de bloqueio do lucro é controlado.
A dupla EMA não pode determinar com precisão o ponto de viragem e pode ter perdido a oportunidade de uma mudança de tendência.
A configuração incorreta dos parâmetros da faixa de Bryn pode causar um falso sinal.
O Stop Loss Parking fixo é difícil de adaptar às flutuações do mercado.
Combinado com outros indicadores para avaliar a tendência, para determinar o ponto de transição da tendência principal.
O método de ajuste dinâmico dos parâmetros da faixa de Bryn.
Configure um stop loss condicional, ajustando a linha de stop loss de acordo com as condições específicas.
Esta estratégia utiliza uma combinação de métodos de seguimento de tendências com o uso de duas EMAs para determinar a tendência principal e a descoberta de oportunidades nas bandas de furos. A vantagem da estratégia consiste em definir de forma razoável as condições de abertura e de parada para bloquear efetivamente o lucro da tendência.
/*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