이 전략은 MACD 및 RSI 지표의 교차를 계산하여 거래 신호를 생성합니다. RSI가 과잉 구매 또는 과잉 판매되고 MACD 교차가 발생하면 구매 및 판매 신호를 생성합니다. 전략은 가격 추세와 과잉 구매 / 과잉 판매 상황을 고려하여 두 가지 다른 유형의 지표의 장점을 결합하여 전략의 효과를 향상시킵니다.
이 전략은 주로 MACD와 RSI 지표의 조합을 사용하여 거래 신호를 생성합니다. MACD는 일반적으로 가격 추세와 동력 변화를 결정하는 데 사용되며, RSI는 과잉 구매 / 과잉 판매 조건을 결정하는 데 사용됩니다.
전략은 먼저 MACD의 빠른 라인, 느린 라인 및 신호 라인을 계산합니다. 빠른 라인이 느린 라인보다 크면 황금 십자 신호가 생성됩니다. 빠른 라인이 느린 라인보다 작을 때 죽음의 십자 신호가 생성됩니다. 이것은 가격 추세와 동력이 변화하고 있음을 나타냅니다.
동시에 전략은 RSI 지표를 계산하고 과잉 구매 및 과잉 판매 라인을 설정합니다. RSI가 과잉 판매 라인보다 낮으면 과잉 판매를 나타냅니다. RSI가 과잉 구매 라인보다 높으면 과잉 구매를 나타냅니다.
RSI가 과잉 구매 / 과잉 판매가 발생하면 전략은 MACD 황금 교차가 발생했을 때 구매 신호를 생성하고 MACD 죽음의 교차가 발생했을 때 판매 신호를 생성합니다. 즉 가격 추세가 역전되면 MACD 지표는 민감성으로 인해 전환점을 파악하는 데 사용됩니다. RSI 지표는 과잉 구매 / 과잉 판매가 발생하지 않을 때 잘못된 거래를 피합니다.
이 전략은 MACD와 RSI 지표의 장점을 결합하여 효율성을 향상시킵니다.
MACD는 가격 변화를 민감하게 파악할 수 있으며, RSI는 서로 보완하는 과잉 구매/ 과잉 판매 상황을 고려합니다.
두 지표를 결합하면 소란스러운 거래 신호를 필터링하고 불필요한 거래를 줄일 수 있습니다.
MACD는 이동 평균의 차이를 측정하고, RSI는 가격 변화의 비율을 측정합니다. 두 방법은 서로를 확인할 수 있습니다.
MACD는 가격 변화에 빠르게 반응하고, RSI는 과잉 구매/ 과잉 판매 분차가 명백하고, 좋은 콤보 효과입니다.
이 전략에는 또한 몇 가지 위험이 있습니다.
MACD와 RSI 모두 갑작스러운 사건에 취약하여 잘못된 신호를 생성할 수 있습니다. 신호를 필터링하기 위해 매개 변수를 조정할 수 있습니다.
개별 주식에 대한 영향은 이상적이지 않을 수 있습니다. 지수 또는 포트폴리오가 고려 될 수 있습니다.
MACD 크로스오버 및 RSI 과잉 구매/ 과잉 판매를 만족시키는 것은 몇 가지 기회를 놓칠 수 있습니다. RSI 매개 변수 요구 사항은 감소 될 수 있습니다.
이 전략은 다음 측면에서도 최적화 될 수 있습니다.
MACD 및 RSI 매개 변수를 최적화하여 다른 거래 종류에 맞게 조정합니다.
손실이 일정 비율에 도달했을 때 시간 내에 손실을 멈추기 위해 손해를 막는 전략을 추가합니다.
볼링거 반드와 KDJ와 같은 다른 지표와 결합하여 더 엄격한 거래 신호 조건을 설정합니다.
MACD의 빠른 / 느린 특성을 활용하고 전략 성능을 향상시키기 위해 높은 주파수 데이터에서 전략을 실행하십시오.
백테스트 결과에 따라 가장 좋은 매개 변수 조합을 찾기 위해 RSI의 과잉 구매/ 과잉 판매 라인을 조정합니다.
MACD와 RSI 크로스오버 전략은 트렌드 다음과 과잉 구매 / 과잉 판매 판단을 결합하여 가격 반전 지점을 효과적으로 파악하고 전략 성능을 향상시킬 수 있습니다. 그러나 전략이 최대 성능을 달성하려면 시장 조건에 따라 지속적인 테스트와 최적화가 필요한 일부 제한 사항이 있습니다.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // © sabirt strategy(title='MACD and RSI', overlay=true, shorttitle='MACD&RSI') //MACD Settings fastMA = input.int(title='Fast moving average', defval=12, minval=1) slowMA = input.int(title='Slow moving average', defval=26, minval=1) signalLength = input.int(9, minval=1) //RSI settings RSIOverSold = input.int(35, minval=1) RSIOverBought = input.int(80, minval=1) src = close len = input.int(14, minval=1, title='Length') up = ta.rma(math.max(ta.change(src), 0), len) down = ta.rma(-math.min(ta.change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) wasOversold = rsi[0] <= RSIOverSold or rsi[1] <= RSIOverSold or rsi[2] <= RSIOverSold or rsi[3] <= RSIOverSold or rsi[4] <= RSIOverSold or rsi[5] <= RSIOverSold wasOverbought = rsi[0] >= RSIOverBought or rsi[1] >= RSIOverBought or rsi[2] >= RSIOverBought or rsi[3] >= RSIOverBought or rsi[4] >= RSIOverBought or rsi[5] >= RSIOverBought [currMacd, _, _] = ta.macd(close[0], fastMA, slowMA, signalLength) [prevMacd, _, _] = ta.macd(close[1], fastMA, slowMA, signalLength) signal = ta.ema(currMacd, signalLength) avg_1 = math.avg(currMacd, signal) crossoverBear = ta.cross(currMacd, signal) and currMacd < signal ? avg_1 : na avg_2 = math.avg(currMacd, signal) crossoverBull = ta.cross(currMacd, signal) and currMacd > signal ? avg_2 : na strategy.entry('buy', strategy.long, when=crossoverBull and wasOversold) strategy.close('buy', when=crossoverBear and wasOverbought)