この戦略は,複数のタイムフレームにおける技術分析を組み合わせた,RSIとEMAの指標に基づいたモメント・トレーディング戦略である.この戦略は,RSIオーバーバイト/オーバーセールシグナルをベースに,EMAのトレンド確認とダイナミックなポジションサイジングを採用する.コアコンセプトは,トレンド方向の確認のために3つの異なる期間のEMA (50/100/200) を使用しながら,短期RSI (2期) と中期RSI (14期) のシグナルを組み合わせることにある.
この戦略は,取引決定のための多層検証メカニズムを採用している.ロング条件では,RSI14が31を下回り,RSI2が10を超越し,EMA50,EMA100,EMA200がベアラインナインしている.ショート条件では,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)