양적 거래 전략 RSI, MACD 및 지원/저항을 결합

저자:차오장, 날짜: 2024-01-05 16:24:58
태그:

img

전반적인 설명

이 전략은 RSI와 MACD 지표, 무역 신호 판단을 위한 지원/저항 수준과 결합된 것을 기반으로 한다. 이 전략은 파다 스티킹 아웃 랭지 (Panda Sticking Out Tongue) 전략이다. 이 전략은 RSI 지표를 사용하여 과소매/대수매 수준을 결정하고, MACD 지표를 사용하여 상승/하락 추세를 결정하고, 지난 100 기간 동안의 최고와 최저 가격에 기초하여 지원/저항 수준을 그리며, 지원 근처에 구매 신호를 생성하고 저항 근처에 판매 신호를 생성한다. 이는 일반적인 트렌드 추종 전략에 속한다.

전략 논리

이 전략은 주로 두 가지 지표 - RSI와 MACD에 의존한다. RSI 지표는 과잉 구매 / 과잉 판매 상태를 판단하고 MACD 지표는 상승 / 하락 트렌드 상태를 결정한다. 먼저 14 기간 RSI 값을 계산하고 과잉 구매 임계값을 70으로 설정하고 과잉 판매 임계값을 30으로 설정하고, 12 일 빠른 라인, 26 일 느린 라인 및 9 일 신호 라인을 기반으로 MACD 값을 계산한다. 30 이하의 RSI는 과잉 판매로 간주되며, 70 이상의 RSI는 과잉 구매로 간주된다. MACD 황금 십자가는 구매 신호이며 죽음의 십자가는 판매 신호이다.

또한, 전략은 또한 지난 100 기간 동안 가장 높은 가격과 가장 낮은 가격을 지원/저항 수준으로 계산합니다. 구매 신호가 활성화되면 가격은 실제로 구매 주문을 발급하기 위해 지원 수준, 즉 지원 수준의 1% 이내에 가까운 곳에 있어야합니다. 마찬가지로 판매 신호가 활성화되면 가격은 실제로 판매 주문을 발급하기 위해 저항 수준보다 1% 이하에 있어야합니다.

전략 의 장점

이 전략은 트렌드 분석과 과잉 구매/ 과잉 판매 수준 검출을 결합하여 단일 지표에만 의존하는 잘못된 신호를 피합니다. 지원/저항 필터를 도입함으로써 주요 S/R 수준 근처에서 반등으로 인한 잘못된 거래를 줄일 수 있습니다. MACD와 RSI의 조합은 가격 움직임과 OB/OS 상태를 정확하게 식별 할 수 있습니다. 간단한 이동 평균 전략과 비교하면이 전략은 장기 가격 추세를 더 유연하게 파악 할 수 있습니다.

전략 의 위험

이 전략의 주요 위험은 다음과 같습니다.

  1. 강력한 트렌드에서 대부분의 수익을 놓칠 수 있습니다. 반전이 끝나고 나서 진입하는 경향이 있기 때문입니다.

  2. 부적절한 RSI 및 MACD 매개 변수 설정은 잘못된 신호를 일으킬 수 있습니다.

  3. 간단한 S/R 탐지 논리는 실제 S/R 구역을 과대평가하거나 과소평가할 수 있습니다.

  4. 스톱 로스 메커니즘이 없어 극한 시장 조건에서 손실을 효과적으로 제어할 수 없습니다.

이러한 위험을 해결하기 위해 적응성 MACD, 최적화된 RSI 매개 변수 조정, 향상된 S / R 식별, 시장 체제 모델링 등과 같은 방법을 사용하여 전략을 개선 할 수 있습니다.

개선 을 위한 지침

이 전략은 다음 차원에서 강화될 수 있습니다.

  1. Stop Loss 메커니즘을 도입합니다. 예를 들어 CANVAS Stop Loss

  2. 동적 매개 변수 조정에 적응 MACD를 사용

  3. 보다 과학적인 S/R 식별을 위해 가격 패턴 인식 도입

  4. 다른 매개 변수를 적응적으로 사용하기 위해 시장 상태 탐지 논리를 설정하기 위해 더 많은 데이터를 통합하십시오.

  5. 머신 러닝 알고리즘을 사용하여 전략을 끝에서 끝까지 최적화하십시오.

이러한 개선으로, 우리는 더 많은 마취량을 줄이고 전략의 안정성을 향상시킬 수 있습니다.

결론

이 전략은 OB/OS 상태를 결정하기 위해 RSI와 MACD 지표를 통합하고, 트렌드를 따르는 접근 방식을 나타내는 지원/저항 수준을 거래합니다. 지원/저항 필터를 통합함으로써 위험이 감소합니다. 장점은 장기 보유에 적합한 안정적인 신호와 제어 가능한 위험에 있습니다. 여전히 일부 구성 요소, 예를 들어 지표 매개 변수, S/R 범위는 수익성을 향상시키기 위해 추가적으로 조정 할 수 있습니다. 전반적으로 쉽게 구현 및 위험 통제로 시장 추세를 따라 좋은 성능을 보여줍니다.


/*backtest
start: 2023-12-28 00:00:00
end: 2024-01-04 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI + MACD with Support and Resistance", shorttitle="RSI_MACD_SR", overlay=true)

// Input for RSI and MACD values
rsiOverbought = input(70, title="RSI Overbought Threshold")
rsiOversold = input(30, title="RSI Oversold Threshold")
macdFastLength = input(12, title="MACD Fast Length")
macdSlowLength = input(26, title="MACD Slow Length")
macdSignalSmoothing = input(9, title="MACD Signal Smoothing")

// Calculating RSI and MACD
rsiValue = ta.rsi(close, 14)
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalSmoothing)

// Support and Resistance
support = ta.lowest(100)
resistance = ta.highest(100)

// Drawing support and resistance lines
// line.new(x1=bar_index[0], y1=support, x2=bar_index[-1], y2=support, color=color.green, width=1)
// line.new(x1=bar_index[0], y1=resistance, x2=bar_index[-1], y2=resistance, color=color.red, width=1)

// Buy Condition: If RSI is oversold and MACD line crosses above the signal line
// Additionally, check if price is near the support line
longCondition = ta.crossover(macdLine, signalLine) and rsiValue < rsiOversold and (close - support) < (close * 0.01)
strategy.entry("Long", strategy.long, when=longCondition, comment="Buy")

// Sell Condition: If RSI is overbought and MACD line crosses below the signal line
// Additionally, check if price is near the resistance line
shortCondition = ta.crossunder(macdLine, signalLine) and rsiValue > rsiOverbought and (resistance - close) < (close * 0.01)
strategy.entry("Short", strategy.short, when=shortCondition, comment="Sell")

// Plot values on the chart for visualization
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")

더 많은