볼링거 밴드, RSI, MACD 및 스토카스틱 멀티 인디케이터 퓨전 거래 전략

저자:차오장, 날짜: 2023-09-28 12:06:39
태그:

전반적인 설명

이 전략은 볼링거 밴드, RSI, MACD 및 스토카스틱, 네 가지 다른 기술적 지표를 통합하여 긴 및 짧은 결정을 내립니다. 먼저 가격이 볼링거 밴드 채널 밖에서 있는지 여부를 결정하고 그에 따라 긴 또는 짧은 포지션을 취합니다. 다음으로 RSI가 과소 구매 또는 과소 판매 구역에 있는지 확인하고 방향에 따라 진입합니다. 다음으로 MACD 황금 십자 및 죽음 십자 신호를 찾고 그에 따라 포지션을 취합니다. 마지막으로 과소 구매 / 과소 판매 구역에서 스토카스틱 황금 십자 및 죽음 십자 위치를 식별합니다. 네 가지 지표의 신호로 전략은 수익을 극대화하기 위해 더 공격적인 피라미드 포지션을 채택합니다.

원칙

이 전략은 주로 4개의 지표를 이용합니다. 볼링거 밴드, RSI, MACD 및 스토카스틱.

볼링거 대역은 단순한 이동 평균의 위와 아래의 표준 편차 수준에서 그래프화됩니다. 대역 밖의 가격은 가격이 정상적인 분포와 따라서 거래 기회를 벗어났다는 것을 암시합니다.

RSI는 더 높은 클로즈와 낮은 클로즈의 비율로 모멘텀을 계산합니다. 30 이하의 값은 과반 판매 상태를 나타내고 70 이상은 과반 구매를 나타냅니다. 이것들은 거래 신호로 사용됩니다.

MACD는 단기 및 장기 이동 평균의 차이입니다. MACD 라인과 신호 라인의 크로스오버는 거래 신호를 생성합니다. 긴 금색 십자가와 짧은 죽음의 십자가.

스토카스틱 K 및 D 라인 크로스오버는 또한 거래 신호로 사용됩니다. 20 이하의 K는 과반 판매를 제안하고 80 이상은 과반 구매를 제안합니다. D 이상의 K 크로스오버는 상승 신호를 보내고 아래의 크로스오버는 하락 신호를 제공합니다.

이 네 가지 지표의 신호를 결합하면 거래 항목의 정확성이 향상됩니다. 구체적으로, 가격이 볼링거 밴드 상단 범위를 초과할 때, RSI가 30 이하, MACD 황금 십자 및 스토카스틱 K가 D보다 낮을 때 긴 포지션을 전환합니다. 네 가지 조건이 모두 충족되면 긴 포지션을 피라미드화합니다. 짧은 신호는 비슷합니다.

장점

이 전략의 주요 장점은 여러 지표를 결합하여 정확성과 승률을 향상시키는 것입니다.

첫째, 다양한 시간 프레임에 대한 지표를 사용하는 것 - 중장기 Bollinger, 단기 MACD, RSI, 스토카스틱 - 는 실수를 줄입니다.

둘째, 모든 지표가 정렬되도록 요구하면 잘못된 신호가 감소합니다. 볼링거, RSI, MACD 및 스토카스틱이 모두 신호를 내릴 때만 입력하면 단일 지표의 실패를 피할 수 있습니다.

또한 상호 보완적인 지표를 결합하면 각 지점의 강점을 활용합니다. RSI는 과반 구매 / 과반 판매, 볼링거 트렌드 변화, MACD 추진력 변화 등을 식별합니다.

마지막으로, 확인된 신호를 가진 피라미드 포지션은 고정량 거래에 비해 수익을 극대화합니다.

위험성

고려해야 할 몇 가지 위험:

첫째, 더 많은 매개 변수와 지표가 최적화를 어렵게 만듭니다. 최상의 조합을 찾기 위해 광범위한 테스트가 필요합니다.

둘째, 동시 표시 신호는 희귀하여 거래 빈도가 낮습니다. 긴 기간 동안 조화를 이루지 않으면 전략 성과가 저하됩니다.

셋째, 피라미드 거래는 지표가 잘못된 신호를 내면 손실을 증폭시킬 수 있습니다. 잘못된 피라미드 거래는 더 큰 손실을 초래합니다.

마지막으로, 불일치한 지표 신호는 결정 규칙이 필요합니다. 지표가 충돌할 때 전략은 양적 논리를 가져야합니다.

개선

전략을 개선할 수 있는 몇 가지 방법:

  1. 유전자 알고리즘, 그리드 검색 등을 통해 최적화된 매개 변수를 사용하여 최적의 조합을 찾습니다.

  2. 스톱 로스 규칙을 추가하여 가격의 마이너스 변동이 발생하면 손실을 제어합니다.

  3. 일관성 없는 지표 신호와 가중된 매개 변수를 점수 시스템으로 입력 논리를 개선합니다.

  4. 이득/손실 데이터로 출구를 최적화하여 최적의 출구 규칙을 생성합니다.

  5. 전략에 가장 적합한 제품과 시간 프레임을 최적화합니다.

  6. 매개 변수 최적화에서 미끄러짐과 수수료와 같은 거래 비용을 계산합니다.

  7. 적응적 최적화를 위해 기계 학습을 활용합니다.

결론

이 전략은 여러 지표와 의사결정을 위한 확인 메커니즘을 결합한다. 적절한 매개 변수와 위험 통제를 통해 좋은 결과를 얻을 수 있다. 그러나 안정성을 위한 지속적인 개선으로 조정 복잡성과 위험을 해결해야 한다. 최적의 지표 조합, 과학적 입출 규칙 및 위험 통제를 찾는 것이 시장 조건에서 지속적인 수익성 확보의 핵심이다.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MD strategy", overlay=true)
lengthrsi = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
source = close
lengthbb = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
direction = input(0, title = "Strategy Direction",  minval=-1, maxval=1)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
lengthch = input( minval=1, maxval=1000, defval=5)
upBound = highest(high, lengthch)
downBound = lowest(low, lengthch)
lengthst = input(14, minval=1)
OverBoughtst = input(80)
OverSoldst = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, lengthst), smoothK)
d = sma(k, smoothD)



ups = price > price[1] ? nz(ups[1]) + 1 : 0
dns = price < price[1] ? nz(dns[1]) + 1 : 0
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

basis = sma(source, lengthbb)
dev = mult * stdev(source, lengthbb)

upper = basis + dev
lower = basis - dev

vrsi = rsi(price, lengthrsi)

if (not na(vrsi))
    if (crossover(vrsi, overSold))
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    if (crossunder(vrsi, overBought))
        strategy.entry("RsiSE", strategy.short, comment="RsiSE")

if (crossover(source, lower))
    strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="BBandLE")

if (crossunder(source, upper))
    strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
    strategy.cancel(id="BBandSE")
    
    
if (not na(k) and not na(d))
    if (crossover(k,d) and k < OverSoldst)
        strategy.entry("StochLE", strategy.long, comment="StochLE")
    if (crossunder(k,d) and k > OverBoughtst)
        strategy.entry("StochSE", strategy.short, comment="StochSE")   
        
if (crossover(delta, 0))
    strategy.entry("MacdLE", strategy.long, comment="MacdLE")

if (crossunder(delta, 0))
    strategy.entry("MacdSE", strategy.short, comment="MacdSE")


더 많은