이 전략은 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가 극단적 인 값에 도달하고 가격 움직임이 위치를 유리한 경우 자동으로 포지션을 닫는다. 주목할 만한 특징은 주식 기반의 동적 포지션 계정 크기 시스템이며, 각 거래에 적합한 포지션 크기를 계산한다.
이 전략은 트렌드를 따르는 특징과 동력 거래를 결합하여 여러 기술적 지표를 통해 거래 신뢰성을 향상시킵니다. 특정 위험이 있지만 제안된 최적화 방향은 전략의 안정성을 더욱 향상시킬 수 있습니다. 전략의 주요 특징은 동적 위치 관리와 단기 및 중기 기술적 지표의 조합으로 완전한 거래 시스템을 형성합니다. 적절한 위험 관리 및 매개 변수 최적화를 통해이 전략은 실제 거래에서 안정적인 성과를 얻을 수 있습니다.
/*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)