RSI 평균 역전 거래 전략

저자:차오장, 날짜: 2023-11-01 16:15:30
태그:

img

전반적인 설명

이 전략은 RSI 지표를 사용하여 트렌드와 과잉 구매 / 과잉 판매 조건을 식별합니다. 현재 트렌드 방향을 결정하기 위해 EMA와 결합하여 트렌드 방향이 RSI 신호와 일치 할 때 역 포지션을 열고 평균 반전 거래를 구현합니다.

전략 논리

  1. 현재 트렌드 방향을 결정하기 위해 EMA 지표를 사용하십시오. EMA 위는 상승 추세를 정의하고 EMA 아래는 하락 추세를 정의합니다.

  2. RSI 지표를 사용하여 과잉 구매/ 과잉 판매 상태를 식별합니다. 60 이상의 RSI는 과잉 구매 구역이고 40 이하는 과잉 판매 구역입니다.

  3. 상승 추세와 RSI가 40보다 낮을 때 구매 신호가 발동됩니다. 하락 추세와 RSI가 60보다 높을 때 판매 신호가 발동됩니다.

  4. 구매/판매 신호가 발사되면, 수익을 취하고 손해를 멈추는 가격은 입시 가격의 특정 비율에 따라 설정됩니다.

  5. 포지션 크기가 0보다 크면 영업 주문을 받습니다. 포지션 크기가 0보다 작으면 스톱 로스 주문을 받습니다.

이점 분석

  1. 이 전략은 EMA와 RSI를 합리적 방식으로 결합하여 트렌드와 과잉 구매/ 과잉 판매 조건을 파악하고 트렌드에 반하는 거래를 피합니다.

  2. 평균 회전 접근법은 수익을 위한 단기 회전을 포착합니다.

  3. 이윤을 취하고 손해를 멈추는 지점은 이윤을 확보하고 위험을 통제하는 데 도움이 됩니다.

  4. 단순하고 명확한 논리, 이해하기 쉽고 실행하기 쉬운, 초보자에게 적합합니다.

  5. EMA 기간과 RSI와 같은 매개 변수는 다른 제품과 시장 환경에 최적화 될 수 있습니다.

위험 분석

  1. 실패한 반전 위험 단기적 반전은 실패하여 손실이 발생할 수 있습니다.

  2. 불분명한 트렌드 위험. EMA는 다양한 시장에서 명확한 트렌드를 식별하지 못하여 잘못된 신호를 생성 할 수 있습니다.

  3. 스톱 로스 트리거된 위험. 너무 가까이 설정된 스톱 로스는 예상치 못한 방식으로 트리거될 수 있습니다.

  4. 과도한 최적화 역사 데이터 라이브 거래에 적용되지 않을 수 있습니다.

  5. 거래 빈도가 높습니다. 너무 빈번한 거래는 상당한 거래 비용을 발생시킵니다.

개선

  1. EMA와 RSI 매개 변수를 최적화하여 백테스팅을 통해 최적의 조합을 찾습니다.

  2. 시장에서 잘못된 신호를 피하기 위해 필터를 추가하십시오. 예를 들어 볼륨 조건을 추가하십시오.

  3. 수익을 차단하기 위해 수익/손실 비율을 최적화하십시오. 손해 중지 비율은 너무 넓지 않아야합니다.

  4. 단일 거래 손실을 통제하기 위해 고정 분수와 같은 포지션 사이징 규칙을 추가하십시오.

  5. 신호 정확성을 높이기 위해 MACD, KD와 같은 다른 지표를 결합하거나 다변형 모델을 사용합니다.

  6. 실시간 데이터에 대한 백테스트와 최신 시장 조건에 대한 지속적인 최적화

결론

이 전략은 EMA와 RSI를 기반으로 한 단기 평균 회전 접근 방식을 구현하고, 트렌드 식별 및 과소 구매/ 과소 판매 탐지의 명확한 논리를 가지고 있습니다. 단기 회전에서 이익을 얻는 동안 위험을 제어하기 위해 수익을 취하고 손실을 중지합니다. 단순성과 명확성은 장점입니다. 추가 최적화는 좋은 백테스트 결과를 얻을 수 있습니다. 그러나 실패한 반전 및 범위 시장과 같은 위험은 라이브 거래에 유의해야합니다. 전반적으로 초보자에게 배우기 위해 간단하고 실용적인 단기 거래 아이디어를 제공합니다.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-10-31 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Sarahann999
//@version=5
strategy("RSI Strategy", shorttitle="RSI", overlay= false)

//Inputs
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')
emaSettings = input(100, 'EMA Length')
ema = ta.ema(close,emaSettings)
rsi = ta.rsi(close,14)

//Conditions
uptrend = close > ema
downtrend = close < ema
OB = rsi > 60
OS = rsi < 40
buySignal = uptrend and OS and strategy.position_size == 0
sellSignal = downtrend and OB and strategy.position_size == 0

//Calculate Take Profit Percentage
longProfitPerc = input.float(title="Long Take Profit", group='Take Profit Percentage',
     minval=0.0, step=0.1, defval=1) / 100
shortProfitPerc = input.float(title="Short Take Profit",
     minval=0.0, step=0.1, defval=1) / 100

// Figure out take profit price 1
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Make inputs that set the stop %  1
longStopPerc = input.float(title="Long Stop Loss", group='Stop Percentage',
     minval=0.0, step=0.1, defval=1.5) / 100
shortStopPerc = input.float(title="Short Stop Loss",
     minval=0.0, step=0.1, defval=1.5) / 100

// Figure Out Stop Price
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)

// Submit entry orders
if buySignal and long_entry
    strategy.entry(id="Long", direction=strategy.long, alert_message="Enter Long")
    
if sellSignal and short_entry
    strategy.entry(id="Short", direction=strategy.short, alert_message="Enter Short")
    
//Submit exit orders based on take profit price
if (strategy.position_size > 0)
    strategy.exit(id="Long TP/SL", limit=longExitPrice, stop=longStopPrice, alert_message="Long Exit 1 at {{close}}")
if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", limit=shortExitPrice, stop=shortStopPrice, alert_message="Short Exit 1 at {{close}}")
    
//note: for custom alert messages to read, "{{strategy.order.alert_message}}" must be placed into the alert dialogue box when the alert is set.

plot(rsi, color= color.gray)
hline(40, "RSI Lower Band")
hline(60, "RSI Upper Band")

더 많은