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

포지션 스케일링이 가능한 다중 시간 프레임 RSI-EMA 모멘텀 거래 전략

저자:차오장, 날짜: 2024-11-29 15:23:44
태그:RSIEMA

img

전반적인 설명

이 전략은 RSI와 EMA 지표를 기반으로 한 모멘텀 거래 전략으로, 여러 시간 프레임에 걸쳐 기술 분석을 결합합니다. 이 전략은 EMA 트렌드 확인과 함께 RSI 과잉 구매 / 과잉 판매 신호를 기반으로 거래를 실행하고 동적 위치 사이징을 사용합니다. 핵심 개념은 트렌드 방향 확인을 위해 세 가지 다른 기간 EMA (50/100/200) 를 사용하여 단기 RSI (2 기간) 와 중기 RSI (14 기간) 신호를 결합하는 데 있습니다.

전략 원칙

이 전략은 거래 결정을 위한 다층 검증 메커니즘을 사용한다. 긴 조건은 EMA50, EMA100, 그리고 EMA200와 함께 하향 정렬에 있는 RSI14를 31 이하와 RSI2를 10 이상으로 통과하는 것을 요구한다. 짧은 조건은 RSI14를 69 이상과 RSI2를 90 이하로 통과하는 것을 요구하며, EMA는 상승 정렬에 있다. 이 전략에는 RSI를 기반으로 한 이익 취득 메커니즘이 포함되어 있으며, RSI가 극단적 인 값에 도달하고 가격 움직임이 위치를 유리한 경우 자동으로 포지션을 닫는다. 주목할 만한 특징은 주식 기반의 동적 포지션 계정 크기 시스템이며, 각 거래에 적합한 포지션 크기를 계산한다.

전략적 장점

  1. 포괄적 인 신호 확인 메커니즘은 여러 가지 기술 지표 검증을 통해 잘못된 신호 위험을 줄입니다.
  2. 동적 포지션 사이징 시스템은 계좌 크기에 따라 거래량을 자동으로 조정합니다.
  3. 여러 기간 RSI와 EMA 트렌드 확인은 거래 정확성을 향상시킵니다.
  4. 명확한 영리 메커니즘은 적시에 수익을 확보 할 수 있습니다.
  5. 우수한 시각화 기능은 거래자가 시장 상황을 이해하는 데 도움이됩니다.
  6. 계층화된 기술 지표 조합은 시장 동력의 변화를 더 잘 포착합니다.

전략 위험

  1. 높은 레버리지 (20배) 는 중요한 계좌 변동성을 초래할 수 있습니다.
  2. 다양한 시장에서 빈번한 잘못된 파업 신호를 생성할 수 있습니다.
  3. 포지션 곱셈 메커니즘은 연속 손실 거래에서 손실을 증폭시킬 수 있습니다.
  4. 스톱 로스 메커니즘이 없으면 극한 시장 조건에서 상당한 손실이 발생할 수 있습니다.
  5. EMA의 추세 판단은 급격한 시장 반전 때 지연될 수 있습니다.
  6. RSI 지표는 특정 시장 조건에서 잘못된 신호를 생성할 수 있습니다.

전략 최적화 방향

  1. ATR 또는 변동성에 기반한 동적 스톱 로스 메커니즘을 도입
  2. 위험 통제를 위한 최대 포지션 제한으로 포지션 관리 시스템을 최적화
  3. 높은 변동성 환경에서 거래 매개 변수를 조정하기 위해 변동성 필터를 추가합니다.
  4. 불리한 거래 기간을 피하기 위해 시간 필터를 구현하는 것을 고려하십시오.
  5. 부피 지표와 같은 추가 시장 상태 지표를 포함합니다.
  6. 시장 조건에 기초한 지표 매개 변수를 동적으로 조정할 수 있는 적응형 매개 변수 시스템을 개발

요약

이 전략은 트렌드를 따르는 특징과 동력 거래를 결합하여 여러 기술적 지표를 통해 거래 신뢰성을 향상시킵니다. 특정 위험이 있지만 제안된 최적화 방향은 전략의 안정성을 더욱 향상시킬 수 있습니다. 전략의 주요 특징은 동적 위치 관리와 단기 및 중기 기술적 지표의 조합으로 완전한 거래 시스템을 형성합니다. 적절한 위험 관리 및 매개 변수 최적화를 통해이 전략은 실제 거래에서 안정적인 성과를 얻을 수 있습니다.


/*backtest
start: 2024-11-21 00:00:00
end: 2024-11-28 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI EMA Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Definování vstupních podmínek
rsi_14 = ta.rsi(close, 14)
rsi_2 = ta.rsi(close, 2)
ema_50 = ta.ema(close, 50)
ema_100 = ta.ema(close, 100)
ema_200 = ta.ema(close, 200)

// Pákový efekt
leverage = 20

// Podmínky pro long pozici
longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200)

// Podmínky pro short pozici
shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200)

// Definování průměrné ceny pozice
var float long_avg_price = na
var float short_avg_price = na

// Sledujeme, zda se velikost pozice změnila
var float last_position_size = na

// Přerušení průměrné ceny pozice při změně pozice
if (last_position_size != strategy.position_size)
    long_avg_price := na
    short_avg_price := na

// Aktualizace průměrné ceny pozice
if (strategy.position_size > 0)
    long_avg_price := strategy.position_avg_price
    short_avg_price := na
else if (strategy.position_size < 0)
    short_avg_price := strategy.position_avg_price
    long_avg_price := na

// Uložení aktuální velikosti pozice pro příští bar
last_position_size := strategy.position_size

// Podmínky pro take profit
takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close)
takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close)

// Velikost pozice
new_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2

// Úprava velikosti pozice s ohledem na pákový efekt
position_value = strategy.equity * leverage
trade_qty = position_value / close

// Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (longCondition)
    strategy.entry("Long", strategy.long, qty=new_position_size == na ? trade_qty : new_position_size)

// Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=new_position_size == na ? trade_qty : new_position_size)

// Výstup z long pozice při splnění podmínek pro take profit
if (takeProfitLongCondition)
    strategy.close("Long")

// Výstup z short pozice při splnění podmínek pro take profit
if (takeProfitShortCondition)
    strategy.close("Short")

// Zvýraznění části grafu, kde platí podmínky pro long
highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200)
bgcolor(highlightLongCondition ? color.new(color.green, 90) : na)

// Zvýraznění části grafu, kde platí podmínky pro short
highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200)
bgcolor(highlightShortCondition ? color.new(color.red, 90) : na)

// Přidání bodů pozic do grafu
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")

// Vykreslení průměrné ceny pozice pro long a short
plot(long_avg_price, title="Long Avg Price", color=color.blue, linewidth=2)
plot(short_avg_price, title="Short Avg Price", color=color.orange, linewidth=2)

관련

더 많은