채널 브레이크업에 기초한 트렌드 다음 전략

저자:차오장, 날짜: 2023-09-15 12:02:10
태그:

이 문서에서는 채널 브레이크오웃을 활용한 트렌드 트레이딩 전략을 상세히 설명합니다. EMA 채널을 사용하여 트렌드 방향을 식별하고 볼링거 밴드를 사용하여 역 트렌드 거래를합니다.

I. 전략 논리

주요 구성 요소는 다음과 같습니다.

  1. 중간 EMA를 설정하고 비율을 기반으로 상부/하부 채널을 확장합니다.

  2. 위 채널 브레이크에서 길고 하위 채널 브레이크에서 짧게 트렌드를 따라가십시오.

  3. BB가 좁아지면, 트렌드 역전을 판단해서 트렌드 반대 거래를 합니다.

  4. 손실 위험을 제한하기 위해 ATR 정지를 사용하세요.

  5. 최적화를 위한 사용자 정의 가능한 채널 매개 변수

트렌드 방향에 대한 EMA 채널과 역행에 대한 BB 채널을 결합하여 완전한 시스템을 형성합니다.

II. 전략의 장점

가장 큰 장점은 합리적인 지표 사용이며, EMA는 주류 트렌드를 결정하고 BB는 반전을 결정합니다.

또 다른 장점은 위험 통제를 위한 직접적이고 효과적인 스톱 로스입니다.

마지막으로, 사용자 정의 가능한 매개 변수는 제품 간 최적화를 허용합니다.

III. 잠재적 위험

그러나 다음과 같은 위험 요소가 있습니다.

첫째, EMA와 BB 모두 문제가 있습니다.

둘째, 실패한 반전 거래는 고려되어야 합니다.

마지막으로, 과도한 부착을 방지하기 위해 광범위한 최적화가 필요합니다.

IV. 요약

요약적으로, 이 기사는 EMA 채널 브레이크아웃을 기반으로 트렌드 다음 전략을 설명했습니다. 역행 시 트렌드 반대 거래를 통해 매개 변수 최적화를 통해 안정적인 이익을 얻을 수 있지만 최적화 어려움과 지표 지연을 관리해야합니다.


/*backtest
start: 2023-08-15 00:00:00
end: 2023-09-14 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="[mdeacey] EMA Percentage Channel + Bollinger Band Trending Strategy", shorttitle="[mdeacey] EMA% Channel + BB Trend Strategy", overlay=true)

//EMA 200

len = input(title="EMA Length", type=input.integer, defval=100)
srce = input(title="EMA Source", type=input.source, defval=close)

ema1= ema(srce,len)

percent = input(title="Inside Channel (%)", type=input.float, defval= 1) 
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee
///2
percent2 = input(title="Outside Channel (%)", type=input.float, defval= 2) 
valuee2 = (percent2*ema1)/100
upperbande2 = ema1 + valuee2
lowerbande2 = ema1 - valuee2

plot(upperbande, title='Inside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande, title='Inside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )
plot(upperbande2, title='Outside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande2, title='Outside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )

length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, title="Multiplier", minval=0.001, maxval=50)

MA2 = sma(src, length)
dev = mult * stdev(src, length)
upper = MA2 + dev
lower = MA2 - dev

signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white

barcolor(color=signalColor)
nopo= strategy.position_size==0

upperBand = plot(upper, title='Upper Bollinger Band', color=color.gray, linewidth=1)
lowerBand = plot(lower, title='Lower Bollinger Band', color=color.gray, linewidth=1)
fill(upperBand, lowerBand, title='Bollinger Band', color=color.black)
strategy.entry("Long",true,when = crossover(close,lower)  and close <lowerbande and close>lowerbande2)
strategy.close("Long",when = crossunder(close,lowerbande2))//crossunder(close,lowerbande) or crossunder(close,lowerbande2))

strategy.entry("Short",false,when = crossunder(close,upper)  and close >upperbande and close<upperbande2)
strategy.close("Short",when = crossover(close,upperbande2) )//crossover(close,upperbande) or crossover(close,upperbande2) )

//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Stoploss', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier",group='ATR Stoploss',  type=input.float)// Adjust this to change the distance between your candles and the line

//ATR Calculation
pine_rma(x, y) =>
    alpha = y
    sum = 0.0
    sum := (x + (alpha - 1) * nz(sum[1])) / alpha

true_range() =>
    max(high - low, max(abs(high - close[1]), abs(low - close[1])))

//Long SL
plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1)
// Short SL
plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1)
strategy.exit("Exit","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )

/////////////////////new strategy
strategy.entry("Long",true,stop =upperbande  ,when = close <upperbande and  close[1] <upperbande and nopo )
strategy.close("Long",when = crossunder(close,upper) )//  and close <upperbande and close>lowerbande)

strategy.entry("Short",false,stop =lowerbande  ,when = close >lowerbande and close[1] >lowerbande and nopo )
strategy.close("Short",when = crossover(close, lower) )

strategy.exit("Exit","Long",stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )


더 많은