이동 평균과 RSI를 결합한 거래 전략

MA DEMA RSI
생성 날짜: 2024-04-30 16:31:24 마지막으로 수정됨: 2024-04-30 16:31:24
복사: 4 클릭수: 812
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동 평균과 RSI를 결합한 거래 전략

개요

이 전략은 여러 이동 평균과 상대적으로 약한 지수 (RSI) 를 결합하여 거래 신호를 생성합니다. 그것은 9, 21, 25, 99 일간의 4 개의 다른 주기 이동 평균을 사용하여 그 사이의 교차로 트렌드의 방향을 판단합니다. 동시에, 이 전략은 RSI 지표를 보조 판단으로 도입하여 시장이 과매매 또는 과매매 할 때 추가 거래 신호를 제공합니다.

이 전략의 주요 아이디어는 시장의 주요 추세를 판단하기 위해 다양한 주기적인 이동 평균의 추세 특성을 활용하는 것입니다. 단기 평균이 장기 평균을 상향으로 가로질러 상승하는 것은 낙관적 신호로 간주되며 반대로 하향 신호로 간주됩니다. RSI 지표는 시장의 정서를 판단하여 시장이 과매매되거나 과매매 될 때 반전을 제공합니다.

전략 원칙

  1. 9일, 21일, 25일, 99일 4개의 다른 주기들의 간단한 이동 평균을 계산한다.
  2. 9일 평균선과 21일 평균선의 교차 상황을 판단하여, 9일 평균선이 21일 평균선을 상향으로 통과할 때, 다중 신호를 생성한다. 9일 평균선이 21일 평균선을 하향으로 통과할 때, 공백 신호를 생성한다.
  3. 25일 평균선과 99일 평균선의 교차 상황을 판단하여, 25일 평균선이 99일 평균선을 위쪽으로 통과하면, 다중 신호가 발생한다. 25일 평균선이 99일 평균선을 아래로 통과하면, 공백 신호가 발생한다.
  4. 14일 RSI를 계산할 때 RSI가 70보다 크면 시장은 과매매 상태이고, RSI가 30보다 작으면 시장은 과매매 상태이다.
  5. 통합 이동 평균 크로스 신호와 RSI 신호, 최종 거래 신호를 생성:
    • 9일 평균이 21일 평균을 상향으로 넘어가고 RSI가 70보다 크면 공백을 만듭니다.
    • 9일 평균이 21일 평균을 아래로 넘어가고 RSI가 30보다 작을 때 더 많은 포지션을 열고;
    • 25일 평균이 99일 평균을 상향으로 넘어가고 RSI가 70보다 크면 더 많은 포지션을 열고
    • 25일 평균선이 99일 평균선을 아래로 통과하고 RSI가 30보다 작을 때, 빈 포지션을 니다.
  6. 이동 평균의 교차 신호는 평행 포지션에도 사용되며, 해당 평행의 교차가 발생하면 이전 포지션을 평행한다.

우위 분석

  1. 트렌드 추적: 이 전략은 다양한 주기 이동 평균의 트렌드 특성을 활용하여 시장의 주요 트렌드를 판단하여 시장의 큰 방향을 파악하는 데 도움이됩니다.
  2. 필터링 노이즈: 단일 이동 평균을 사용하는 것과 달리, 이 전략은 여러 개의 다른 주기의 이동 평균을 사용하여 단기 잡음을 필터링하고 신호의 신뢰성을 높이는 데 도움이됩니다.
  3. 감정 판단: 시장 감정이 너무 낙관적이거나 비관적일 때 역전 신호를 제공하는 보조 판단으로 RSI 지표를 도입하면 시장의 극단적 인 상태에서 전략이 더 크게 회수되는 것을 어느 정도 방지 할 수 있습니다.
  4. 논리 명확성: 전략의 거래 논리는 간단하고 명확하며, 이해하기 쉽고 구현하기 쉽습니다.
  5. 적응력: 이 전략은 이동 평균의 주기 및 RSI의 변수를 조정하여 다른 시장 환경과 거래 품종에 적응할 수 있습니다.

위험 분석

  1. 변수 민감: 전략의 성능은 이동 평균의 주기적 선택과 RSI의 변수 설정에 민감할 수 있으며, 다른 변수는 전략의 성능에 큰 차이를 초래할 수 있다.
  2. 트렌드 인식 지연: 이동 평균은 본질적으로 지연 지표이며, 시장의 전환점에서 약간의 지연이 발생할 수 있으며, 이는 거래 기회를 놓치거나 잘못된 신호를 발생시킵니다.
  3. 흔들리는 시장에서 부실한 성능: 흔들리는 시장에서, 빈번한 평평선 교차는 전략이 더 많은 거래 신호를 생성하도록 만들 수 있으며, 성능이 좋지 않을 수 있다.
  4. 검은 천둥 사건: 이 전략은 주로 역사적 데이터에 근거하여 판단되며, 일부 갑작스러운 검은 천둥 사건에 대한 반응이 부족할 수 있습니다.

최적화 방향

  1. 파라미터 최적화: 이동 평균의 주기 및 RSI의 파라미터를 최적화하여 특정 시장에서 최적의 성능을 보이는 파라미터 조합을 찾습니다. 유전 알고리즘과 같은 최적화 방법을 사용하여 최적의 파라미터를 자동으로 찾을 수 있습니다.
  2. 신호 필터링: 평행선 교차와 RSI 신호를 기반으로, 다른 기술 지표 또는 가격 행동 패턴을 도입하여 신호의 정확도를 높이는 2차 필터링을 수행합니다. 예를 들어, 브린 밴드, MACD 등의 지표와 결합 할 수 있습니다.
  3. 포지션 관리: 현재 전략에 기초하여 포지션 관리의 개념을 도입하고, 시장 추세의 강도와 확실성의 동성에 따라 포지션 크기를 조정하여 위험을 더 잘 제어하고 수익을 향상시킵니다.
  4. 손해 차단: 단편 거래의 최대 위험 을 제어하기 위해 손해 차단 및 차단 장치를 도입, 특히 변동성 중지 또는 추적 중지.
  5. 다중 시장 적응: 전략이 여러 시장과 품종으로 확장되어 적절한 매개 변수 조정과 위험 통제를 통해 다른 시장의 거래 기회를 잡습니다.

요약하다

이 전략은 다양한 주기의 이동 평균과 RSI 지표를 결합하여 트렌드 추적과 감정 판단의 거래 전략을 형성한다. 이 전략의 장점은 논리적으로 명확하고 적응력이 강하며, 다평선 조합을 통해 시장 추세를 더 잘 파악할 수 있다. 그러나 동시에 파라미터 민감성, 트렌드 식별 지연, 변동 시장의 열악한 성능과 같은 위험이 존재한다. 향후 파라미터 최적화, 신호 필터링, 포지션 관리, 스톱 로즈 등의 측면에서 개선하여 전략의 성능과 안정성을 더욱 향상시킬 수 있다.

전략 소스 코드
/*backtest
start: 2023-04-24 00:00:00
end: 2024-04-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Estratégia de Médias Móveis e RSI (por Svitorino_trade)", shorttitle="Estratégia-Médias Móveis", overlay=true)

len1 = input.int(9, minval=1, title="Length 1")
len2 = input.int(21, minval=1, title="Length 2")
len3 = input.int(25, minval=1, title="Length 3")
len4 = input.int(99, minval=1, title="Length 4")
rsi_length = input.int(14, minval=1, title="RSI Length")
rsi_oversold = input.float(30, minval=0, maxval=100, title="RSI Oversold Level")
rsi_overbought = input.float(70, minval=0, maxval=100, title="RSI Overbought Level")

src = input(close, title="Source")

ama(src, length) =>
    sum = 0.0
    for i = 0 to length - 1
        sum := sum + src[i]
    sum / length

avg1 = ama(src, len1)
avg2 = ama(src, len2)
avg3 = ama(src, len3)
avg4 = ama(src, len4)

rsi_value = ta.rsi(src, rsi_length)

// Condições de entrada e saída para períodos de 9 e 21
cruzamento_9_21_acima = avg1 > avg2 and avg1[1] <= avg2[1]
cruzamento_9_21_abaixo = avg1 < avg2 and avg1[1] >= avg2[1]

// Condições de entrada e saída para períodos de 25 e 99
cruzamento_25_99_acima = avg3 > avg4 and avg3[1] <= avg4[1]
cruzamento_25_99_abaixo = avg3 < avg4 and avg3[1] >= avg4[1]

// Plotando os sinais de entrada e saída
plotshape(series=cruzamento_9_21_acima, style=shape.triangleup, color=color.green, size=size.small, location=location.belowbar)
plotshape(series=cruzamento_9_21_abaixo, style=shape.triangledown, color=color.red, size=size.small, location=location.abovebar)
plotshape(series=cruzamento_25_99_acima, style=shape.triangleup, color=color.green, size=size.small, location=location.belowbar)
plotshape(series=cruzamento_25_99_abaixo, style=shape.triangledown, color=color.red, size=size.small, location=location.abovebar)

// Entradas e saídas para períodos de 9 e 21
if cruzamento_9_21_acima and rsi_value > rsi_overbought
    strategy.entry("Venda Curta", strategy.short)
if cruzamento_9_21_abaixo and rsi_value < rsi_oversold
    strategy.entry("Compra Curta", strategy.long)
if cruzamento_9_21_acima
    strategy.close("Compra Curta")
if cruzamento_9_21_abaixo
    strategy.close("Venda Curta")

// Entradas e saídas para períodos de 25 e 99
if cruzamento_25_99_acima and rsi_value > rsi_overbought
    strategy.entry("Compra Forte", strategy.long)
if cruzamento_25_99_abaixo and rsi_value < rsi_oversold
    strategy.entry("Venda Forte", strategy.short)
if cruzamento_25_99_acima
    strategy.close("Venda Forte")
if cruzamento_25_99_abaixo
    strategy.close("Compra Forte")