리소스 로딩... 로딩...

RSI와 MACD를 결합한 다공간 전략

저자:차오장, 날짜: 2024-05-17 11:04:03
태그:RSIMACD

RSI与MACD结合的多空策略

개요

이 전략은 상대적으로 강한 지수 (RSI) 와 이동 평균 분산 지수 (MACD) 를 결합하여 RSI를 이용하여 과잉 매매를 판단하고 MACD를 통해 경향 방향을 판단하여 전체적인 다공간 전략을 형성한다. RSI가 과잉 매매를 할 때 파는 신호를 발산하고 MACD가 급격한 선이 위를 넘을 때 평형; RSI가 과잉 매매를 할 때 파는 신호를 발산하고 MACD가 급격한 선이 아래를 넘는 신호를 발산함으로써 손실을 정하는 것을 결정한다.

전략적 원칙

  1. RSI를 계산하여 과잉 매출을 판단합니다.
    • RSI가 70보다 높고 상하선에서 70선을 통과하면 파는 신호가 발사됩니다.
    • RSI가 30보다 작고 아래에서 상향으로 30선을 통과하면 구매 신호가 발송됩니다.
  2. MACD 지표를 계산하여 추세 방향을 결정합니다.
    • MACD 빠른 선이 아래에서 위로 느린 선을 통과하면 평형 판매 포지션 신호가 발산됩니다.
    • MACD 빠른 선이 상향에서 아래로 느린 선을 통과하면 평형으로 구매하는 신호가 발송됩니다.
  3. 정지점 설정:
    • 그 품종의 평균 수분 하락을 계산하고 그 중 절반을 중단점으로 가져갑니다.

RSI를 통해 과잉 구매 과잉 판매 상황을 판단하고 시장 반전 초기에는 개입합니다. MACD를 사용하여 트렌드 방향을 판단하고 트렌드 초기 평형화를 통해 트렌드를 더 잘 파악 할 수 있습니다. 두 지표는 상호 보완하여 완전한 거래 시스템을 형성합니다.

전략적 장점

  1. 과잉 구매 과잉 판매와 트렌드 추적의 두 가지 전략을 결합하여 시장 반전 초기 개입을 할 수 있으며, 트렌드가 형성된 후 적시에 평형화하여 시장의 반복적인 기동으로 인한 손실을 효과적으로 피할 수 있습니다.
  2. 손해배상 지점의 설정은 품종에 따라 변동성 특성으로 인해 철수를 제어하고 자금 활용 효율성을 높일 수 있습니다.
  3. 코드 논리가 명확하고 함수화 된 프로그래밍 방식을 사용하여 이해하기 쉽고 최적화 할 수 있습니다.

전략적 위험

  1. RSI와 MACD 파라미터의 선택은 전략 성능에 큰 영향을 미치며, 다른 품종과 주기에 파라미터 최적화가 필요할 수 있다.
  2. 이 전략은 급격한 변동과 같은 극단적인 시장 상황이 발생했을 때 더 큰 반퇴를 겪을 수 있습니다.
  3. 이 전략은 불안정한 시장에서 좋지 않은 성과를 낼 수 있으며, 높은 거래 비용을 초래하는 빈번한 거래가 발생할 수 있습니다.

전략적 최적화 방향

  1. RSI와 MACD의 매개 변수를 최적화하여 현재 품종과 시기로 가장 적합한 매개 변수 조합을 찾고 전략의 안정성과 수익성을 향상시킵니다.
  2. 거래량, 변동률 등의 지표에 더 많은 필터링 조건을 추가하여 빈번한 거래를 줄이고 신호 품질을 향상시킵니다.
  3. 포지션 관리 모듈을 도입하여 시장 추세와 자체 성과 동적에 따라 포지션을 조정하고 리콜을 제어합니다.
  4. 트렌드 추적, 평균값 응답 등 다른 전략과 결합하여 여러 전략 조합을 형성하여 전략 적응성을 향상시킵니다.

요약

이 전략은 RSI가 과소매를 판단하고 MACD가 경향 방향을 판단함으로써 완전한 다공간 거래 시스템을 형성한다. 전략의 논리가 명확하고 장점이 분명하지만 동시에 위험이 존재한다. 파라미터 최적화, 필터 조건의 추가, 위치 관리, 그리고 다른 전략과 결합하는 등의 방법으로 이 전략의 성능을 더욱 향상시켜 안정적인 거래 전략으로 만들 수 있다.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="RSI & MACD Strategy", shorttitle="RSI & MACD", overlay=true)

// Définition des entrées
rsi_length = 14
rsi_overbought = 70
rsi_oversold = 30
macd_fast_length = 12
macd_slow_length = 26
macd_signal_length = 9

// Fonction pour calculer le RSI
calculate_rsi(source, length) =>
    price_change = ta.change(source)
    up = ta.rma(price_change > 0 ? price_change : 0, length)
    down = ta.rma(price_change < 0 ? -price_change : 0, length)
    rs = up / down
    rsi = 100 - (100 / (1 + rs))
    rsi

// Fonction pour calculer le MACD
calculate_macd(source, fast_length, slow_length, signal_length) =>
    fast_ma = ta.ema(source, fast_length)
    slow_ma = ta.ema(source, slow_length)
    macd = fast_ma - slow_ma
    signal = ta.ema(macd, signal_length)
    hist = macd - signal
    [macd, signal, hist]

// Calcul des indicateurs
rsi_value = calculate_rsi(close, rsi_length)
[macd_line, signal_line, _] = calculate_macd(close, macd_fast_length, macd_slow_length, macd_signal_length)

// Conditions d'entrée et de sortie
// Entrée en vente : RSI passe de >= 70 à < 70
sell_entry_condition = ta.crossunder(rsi_value, rsi_overbought)

// Sortie en vente : MACD fast MA croise au-dessus de slow MA
sell_exit_condition = ta.crossover(macd_line, signal_line)

// Entrée en achat : RSI passe de <= 30 à > 30
buy_entry_condition = ta.crossover(rsi_value, rsi_oversold)

// Sortie en achat : MACD fast MA croise en-dessous de slow MA
buy_exit_condition = ta.crossunder(macd_line, signal_line)

// Affichage des signaux sur le graphique
plotshape(series=sell_entry_condition, title="Sell Entry", location=location.belowbar, color=color.red, style=shape.triangleup, size=size.small)
plotshape(series=sell_exit_condition, title="Sell Exit", location=location.abovebar, color=color.green, style=shape.triangledown, size=size.small)
plotshape(series=buy_entry_condition, title="Buy Entry", location=location.abovebar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=buy_exit_condition, title="Buy Exit", location=location.belowbar, color=color.red, style=shape.triangledown, size=size.small)

// Entrées et sorties de la stratégie
if (sell_entry_condition)
    strategy.entry("Short", strategy.short)
    
if (sell_exit_condition)
    strategy.close("Short")

if (buy_entry_condition)
    strategy.entry("Long", strategy.long)
    
if (buy_exit_condition)
    strategy.close("Long")


관련 내용

더 많은 내용