볼링거 밴드 범위 거래 전략과 함께 EMA 비율 채널

저자:차오장, 날짜: 2023-11-13 17:38:01
태그:

img

전반적인 설명

이 전략은 사용자가 EMA와 정의된 비율 채널을 선택하는 것을 기반으로합니다. 가격이 상단 이하일 때 길고 가격이 하단 위에있을 때 짧습니다. 가격이 트렌드를 시작하고 채널 밖에서 움직이면 손실을 방지하기 위해 모든 포지션이 폐쇄됩니다.

트렌딩 시장을 위해 자매 EMA 퍼센트 채널과 볼링거 밴드 트렌드 트레이딩 전략을 사용해야 합니다.

원칙

  1. 200주기 EMA를 기준 EMA로 계산합니다.

  2. 사용자 정의 비율을 기준으로 상부 및 하부 대역을 계산합니다. 상단역 = EMA * (1 + %) 하위 범주 = EMA * (1 - %)

  3. 채널 범위를 나타내기 위해 20주기 볼링거 밴드를 계산합니다.

  4. 닫기 가격이 아래쪽에서 아래쪽 볼링거 밴드를 넘을 때 장거리. 닫기 가격이 위에서 상위 볼링거 밴드를 넘을 때 단거리.

  5. 과도한 손실을 피하기 위해 정지 손실을 계산하기 위해 ATR을 사용하십시오.

  6. 만약 가격이 정의된 비율 채널 범위를 벗어난다면, 추가 손실을 방지하기 위해 모든 포지션을 닫습니다.

장점

  1. EMA 기본 라인은 트렌드 반전 지점을 더 잘 파악하는 데 도움이 됩니다.

  2. % 채널은 과도한 거래를 피하기 위해 합리적인 거래 범위를 설정합니다.

  3. 볼링거 대역은 진입 시기를 돕기 위해 지원 및 저항 수준을 제공합니다.

  4. ATR 트레일링 스톱은 트레이드 리스크별로 효과적으로 제어하기 위해 스톱 로스를 동적으로 설정합니다.

  5. 가격이 채널을 넘을 때 모든 포지션을 닫으면 손실을 빠르게 제어할 수 있습니다.

  6. 사용자 정의 가능한 매개 변수는 다른 시장 조건에 따라 유연합니다.

위험성

  1. 너무 넓은 채널 범위는 트렌드를 놓치거나 손실을 멈추는 것을 지연시킬 수 있습니다.

  2. 너무 좁은 채널 범위는 과잉 거래로 인해 거래 비용을 증가시킬 수 있습니다.

  3. 부적절한 볼링거 밴드 매개 변수 설정으로 인해 거래 기회를 놓칠 수 있습니다.

  4. 너무 느슨하게 설정된 스톱 로즈 문턱은 거래당 과도한 손실로 이어질 수 있습니다.

  5. 최적의 거래 범위를 찾기 위해 매개 변수를 최적화해야 합니다.

최적화 방향

  1. 가장 적합한 이동 평균을 찾기 위해 다른 EMA 기간을 테스트하십시오.

  2. 최적 채널 범위를 결정하기 위해 % 채널 매개 변수를 최적화합니다.

  3. 변동성을 더 잘 파악하기 위해 볼링거 밴드 기간을 조정합니다.

  4. ATR 기간과 멀티플리케이터를 조정하여 스톱 로스 전략을 더 정밀하게 조정합니다.

  5. EMA보다 높거나, EMA보다 낮거나 단축을 테스트해 보세요. 이 승률을 향상시킬 수 있는지 보세요.

  6. 추세 지표를 포함해서 조기 퇴출이 필요한지 결정합니다.

결론

이 전략은 이동 평균, 채널, 변동성 및 기타의 장점을 결합하여 비교적 안정적인 범위 거래 시스템을 만듭니다. 핵심은 위험과 보상을 균형 잡기 위해 각 특정 시장에 가장 적합한 매개 변수 설정을 찾는 것입니다. 미래의 개선은 규칙과 매개 변수를 최적화하거나 트렌드 전략과 결합하여 계속 할 수 있습니다.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="[mdeacey] EMA% Channel + BB Range Strategy", shorttitle="[mdeacey] EMA% Channel + BB Range Strategy", overlay=true)

//EMA 200

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

ema1= ema(srce,len)

percent = input(title="Channel Percentage (%)", type=input.float, defval= 1) 
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee


plot(ema1, title='EMA200', color=color.gray, linewidth=1, style=plot.style_line )
plot(upperbande, title='EMA Upper Band', color=color.gray, linewidth=1, style=plot.style_line )
plot(lowerbande, title='EMA Lower Band', color=color.gray, linewidth=1, style=plot.style_line )

length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, 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)


upperBand = plot(upper, color=color.gray, linewidth=1)
lowerBand = plot(lower, color=color.gray, linewidth=1)
fill(upperBand, lowerBand,color=color.gray)
strategy.entry("Long",true,when = crossover(close,lower)  and close <upperbande and close>lowerbande)
strategy.close("Long",when = crossunder(close,lowerbande))
strategy.entry("Short",false,when = crossunder(close,upper)  and close <upperbande and close>lowerbande)
strategy.close("Short",when = crossover(close,upperbande))

//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Settings', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier Period",group='ATR Settings',  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","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("eExit Short","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )


더 많은