볼링거 밴드, RSI 및 이동 평균에 기초한 트렌드 다음 전략

저자:차오장, 날짜: 2024-02-02 11:35:17
태그:

img

전반적인 설명

이 전략은 볼링거 밴드, 상대 강도 지수 (RSI) 및 이동 평균 (MA) 를 통합하여 시장의 잠재적 진입 및 출구 지점을 식별합니다. 수동 또는 자동 거래 시스템을 통해 실행 할 수있는 구매 및 판매 신호 (주의보) 를 생성 할 수 있습니다.

전략 논리

이 전략은 가격 채널을 생성하기 위해 서로 다른 매개 변수와 함께 두 개의 볼링거 밴드를 사용합니다. 기본 매개 변수는 20 기간의 길이가 있으며 2의 표준편차입니다. 상부와 하부 밴드는 동적 저항 및 지원 수준으로 사용됩니다.

RSI 지표는 가격 동력 강도를 측정합니다. 그 값은 과잉 구매 또는 과잉 판매 상태가 있는지 결정하는 데 사용됩니다.

전체 트렌드 방향을 식별하기 위해 50 기간 이동 평균이 포함됩니다. 가격이 MA보다 높을 때 상승 추세를 나타냅니다. 가격이 MA보다 낮을 때 하락 추세를 나타냅니다.

긴 거래의 입시 조건은 RSI가 과소매 수준을 넘어서고 볼링거 밴드가 수축하지 않을 때입니다. 짧은 거래의 경우 RSI가 과소매 수준을 넘어서고 볼링거 밴드가 수축하지 않을 때입니다.

긴 거래의 출구 조건은 RSI가 과소매 수준 이하로 떨어지거나 가격이 50주기 MA 이하로 닫을 때입니다. 짧은 거래의 경우 RSI가 과소매 수준 이상으로 상승하거나 가격이 50주기 MA 이상으로 닫을 때입니다.

장점

  1. 볼링거 밴드, RSI 및 MA를 결합하면 신호를 횡단 검증함으로써 잘못된 신호를 생성하지 않습니다.

  2. 볼링거 밴드는 지역 최고/하위치를 식별하고 브레이크오웃을 확인합니다. RSI는 거짓 브레이크오웃을 필터합니다. MA는 전체 트렌드를 결정합니다. 신호는 검증됩니다.

  3. 두 개의 표준편차를 사용하는 최적화된 볼링거 밴드 매개 변수는 가격 채널을 더 정확하게 나타냅니다.

위험성

  1. 볼링거 밴드는 계약 시 거짓 신호를 생성 할 수 있습니다. RSI는 또한 중립적이며 거래는 피해야합니다.

  2. RSI와 MA는 범위 시장에서 잘못된 신호를 생성 할 수 있습니다. 범위 조건은 사전에 확인해야합니다.

  3. 가격 격차는 효과적으로 처리 할 수 없습니다. 다른 지표는 진정한 파장을 확인해야합니다.

더 나은 기회

  1. 다양한 제품과 시간 프레임에 대한 볼링거 밴드 및 RSI의 매개 변수를 최적화합니다.

  2. 스톱 로스 오더를 추가하면 가격이 스톱 레벨을 넘을 때 자동으로 트리거됩니다.

  3. ADX와 같은 트렌드 필터를 추가하여 시장의 범위에서 비효율적인 거래를 피합니다.

  4. 자동 거래 시스템과 통합하여 수동 개입 없이 신호를 자동으로 실행합니다.

결론

이 전략은 신호 정확성을 향상시키기 위해 최적화된 매개 변수와 볼링거 밴드, RSI 및 MA의 강점을 결합합니다. 실행을 위해 자동으로 거래 알림을 생성 할 수 있습니다. 주요 위험은 범위 시장에서 잘못된 신호에서 발생합니다. 트렌드 필터를 추가하면 비효율적인 거래를 줄일 수 있습니다. 전반적으로 매개 변수 최적화 및 여러 지표를 통합하여 이 전략은 신호 품질을 향상시키고 라이브 시장에서 사용에 대한 검증을 가치가 있습니다.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger Bands, RSI, and MA Strategy", overlay=true)

// Define input variables
b_len = input(20, title="BB Length")
bb_mult = input(2.0, title="BB Standard Deviation")
bb_deviation1 = input(1.0, title="BB Deviation 1")
rsi_len = input(14, title="RSI Length")
overbought = input(70, title="Overbought RSI Level")
oversold = input(30, title="Oversold RSI Level")
ma_len = input(50, title="MA Length")
stop_loss_percent = input(1.0, title="Stop Loss Percentage")
source = input(close, title="Source")

// Calculate Bollinger Bands
bb_upper = ta.sma(source, b_len) + bb_mult * ta.stdev(source, b_len)
bb_lower = ta.sma(source, b_len) - bb_mult * ta.stdev(source, b_len)
bb_upper1 = ta.sma(source, b_len) + bb_deviation1 * ta.stdev(source, b_len)
bb_lower1 = ta.sma(source, b_len) - bb_deviation1 * ta.stdev(source, b_len)

// Calculate RSI
rsi = ta.rsi(source, rsi_len)

// Calculate Moving Average
ma = ta.sma(source, ma_len)

// Determine if Bollinger Bands are contracting
bb_contracting = ta.stdev(source, b_len) < ta.stdev(source, b_len)[1]

// Entry conditions
enterLong = rsi > overbought and not bb_contracting
enterShort = rsi < oversold and not bb_contracting

// Exit conditions
exitLong = close < ma
exitShort = close > ma

// Exit trades and generate alerts
if strategy.position_size > 0 and exitLong
    strategy.close("Long") // Exit the long trade
    alert("Long Exit", alert.freq_once_per_bar_close)
if strategy.position_size < 0 and exitShort
    strategy.close("Short") // Exit the short trade
    alert("Short Exit", alert.freq_once_per_bar_close)

// Strategy orders
if enterLong
    strategy.entry("Long", strategy.long)
if enterShort
    strategy.entry("Short", strategy.short)
if exitLong
    strategy.close("Long")
if exitShort
    strategy.close("Short")

// Plotting Bollinger Bands
plot(bb_upper, color=color.blue, title="BB Upper 2")
plot(bb_lower, color=color.blue, title="BB Lower 2")
plot(bb_upper1, color=color.red, title="BB Upper 1")
plot(bb_lower1, color=color.red, title="BB Lower 1")

// Plotting RSI
plot(rsi, color=color.orange, title="RSI")

// Plotting Moving Average
plot(ma, color=color.green, title="Moving Average")


더 많은