EMA 및 RSI 전략에 따른 경향

저자:차오장, 날짜: 2023-09-26 15:39:48
태그:

전반적인 설명

이 전략은 유동 평균과 상대 강도 지수를 최대한 활용하여 추세를 파악하고 추적합니다. 추세를 결정하고 적절한 입출시기를 찾기 위해 두 개의 지표 만 필요합니다. 전략은 단기 시장 소음을 피하면서 중장기 가격 추세를 파악하는 것을 목표로합니다.

전략 논리

이 전략은 서로 다른 기간을 가진 세 개의 EMA를 사용하며, EMA-A는 가장 짧은 기간, EMA-B는 중간, EMA-C는 가장 긴 기간을 가지고 있습니다. 짧은 EMA-A가 긴 EMA-B 위에 넘어가면 상승 추세를 신호하며, 따라서 길게 이동합니다. 반대로, EMA-A가 EMA-B 아래에 넘어가면 하락 추세를 신호하여, 따라서 짧게 이동합니다. 잘못된 신호를 필터링하기 위해 가장 긴 EMA-C를 사용합니다. 가격이 EMA-C를 넘은 후에 입시를 고려합니다.

이 전략은 또한 RSI를 사용하여 출구 지점을 찾습니다. 긴 경우, RSI가 70을 넘으면 포지션을 닫습니다. 짧은 경우, RSI가 30 이하로 떨어지면 포지션을 종료합니다. 이는 트렌드 수익을 잠금하고 손실이 더 확장되는 것을 방지합니다.

이점 분석

  • 트렌드 식별에서 EMA의 강점을 활용합니다.
  • RSI는 출입 및 출입 시기를 돕습니다.
  • 단순한 전략, 2가지 지표만
  • 전략 스타일을 조정할 수 있는 매개 변수
  • 초기, 중간 및 후기 트렌드 단계의 이익

위험 분석

  • 주요 트렌드에서 인하가 잘못된 신호를 생성 할 수 있습니다.
  • 다양한 시장에서 윙사 (wipssaws) 에 취약하다
  • 부적절한 RSI 매개 변수는 조기 종료로 이어질 수 있습니다.
  • EMA 기간은 신중한 선택이 필요합니다. 너무 짧으면 소음에 민감할 수 있습니다. 너무 길면 트렌드를 놓칠 수 있습니다.

이러한 위험은 RSI 매개 변수를 최적화하고 필터를 추가하고 트렌드 분석과 결합하여 줄일 수 있습니다.

최적화 방향

  • 더 나은 수익 및 위험 통제를 위해 RSI 매개 변수를 최적화하십시오.
  • 다른 EMA 기간 조합을 테스트합니다.
  • 부피 또는 다른 확인 지표를 추가합니다.
  • 스톱 손실 크기를 측정하기 위해 ATR를 사용
  • 트렌드 중간에 포지션 크기를 줄이는 것을 고려하십시오
  • 브레이크아웃, 볼륨 등으로 입력 타이밍을 최적화
  • 재입국 메커니즘을 탐구

요약

이 전략은 트렌드 추적 및 오시레이터 지표를 결합하여 트렌드 식별 및 포착을 수행합니다. 간단한 매개 변수 및 논리 최적화로 단순성을 유지하면서 크게 향상 될 수 있습니다. 중장기 투자자에게 적합한 매우 실용적인 트렌드 추적 템플릿입니다.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 2h
basePeriod: 15m
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/
//@author Alorse

//@version=5
// strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01)

// Bollinger Bands
len = input.int(14, minval=1, title='Length', group='RSI')
src = input.source(close, 'Source', group='RSI')
rsi = ta.rsi(src, len)

// Moving Averages
len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages')
out_a = ta.ema(close, len_a)
plot(out_a, title='EMA A', color=color.purple)

len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages')
out_b = ta.ema(close, len_b)
plot(out_b, title='EMA B', color=color.orange)

len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages')
out_c = ta.ema(close, len_c)
plot(out_c, title='EMA B', color=color.green)

// Strategy Conditions
stratGroup = 'Strategy'
showLong = input.bool(true, title='Long entries', group=stratGroup)
showShort = input.bool(false, title='Short entries', group=stratGroup)
closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup)
xBars = input.int(24, title='# bars')

entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open
exitLong = rsi > 70

entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open
exitShort = rsi < 30


bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1]
entry_price = ta.valuewhen(bought, open, 0)
var int nPastBars = 0
if strategy.position_size > 0
    nPastBars := nPastBars + 1
    nPastBars
if strategy.position_size == 0
    nPastBars := 0
    nPastBars
if closeAfterXBars
    exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong
    exitLong
    exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort
    exitShort

// Long Entry
strategy.entry('Long', strategy.long, when=entryLong and showLong)
strategy.close('Long', when=exitLong)

// Short Entry
strategy.entry('Short', strategy.short, when=entryShort and showShort)
strategy.close('Short', when=exitShort)



더 많은