채널 분리에 따른 트렌드 전략


생성 날짜: 2023-09-15 12:02:10 마지막으로 수정됨: 2023-09-15 12:02:10
복사: 0 클릭수: 739
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이 글은 채널 브레이크를 이용한 트렌드 트레이딩의 양적 전략에 대해 자세히 설명한다. 이 전략은 EMA 채널을 통해 트렌드 방향을 인식하고, 브린 밴드 판단 역전으로 역작업을 한다.

1 전략

이 전략은 다음과 같은 요소들을 포함하고 있습니다.

  1. 중선 EMA를 설정하고 상하로 확장합니다.

  2. 가격이 상단 경로를 넘으면 더 추적하고, 하단 경로를 넘으면 더 추적합니다.

  3. 브린이 좁아질 때, 트렌드가 반전된다고 판단하고, 반전으로 움직입니다.

  4. 손실 위험을 제한하기 위해 ATR을 설정하십시오.

  5. 사용자 정의 할 수 있는 통로 파라미터, 최적의 파라미터 조합을 찾습니다.

이 전략은 EMA 채널을 통해 주요 트렌드 방향을 판단하고, 브린을 활용하여 역전 기회를 식별하여 전체 트렌드 시스템을 구성한다.

2 전략적 장점

이 전략의 가장 큰 장점은 지표가 합리적으로 사용되고, EMA가 유행이라고 판단하고, 브린 벨트가 반전되었다는 것이다.

또 다른 장점은 Stop Loss 설정이 직접적으로 효과적이며, 위험을 통제할 수 있다는 것입니다.

마지막으로, 매개 변수는 사용자 정의가 가능하며, 다른 품종에 대해 최적화 할 수 있습니다.

  1. 잠재적인 위험

그러나 이 전략에는 다음과 같은 문제점이 있습니다.

우선, EMA와 브린지 지표는 모두 뒤쳐져 있습니다.

두번째로, 역전작업의 실패 위험은 고려해야 합니다.

마지막으로, 변수 최적화는 너무 최적화되지 않도록 많은 작업이 필요합니다.

네 가지 내용

이 문서에서는 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)  )