この戦略は,相対強度指数 (RSI) と移動平均 (MA) を組み合わせて市場動向と取引機会を特定する定量的な取引システムである.このシステムは,取引シグナルの信頼性を高めるため,ボリュームと変動性フィルターも組み込む.コアコンセプトは,RSIを使用してモメンタム確認の同時,高速および遅い移動平均のクロスオーバーを通じてトレンド方向を決定することであり,最終的には完全な取引決定フレームワークを形成する.
戦略は二重信号の確認メカニズムを使用します. トレンド確認層: 市場傾向を決定するために,高速移動平均 (FastMA) とスロー移動平均 (SlowMA) のクロスオーバーを使用する.高速線がスローラインを越えると上昇傾向が確立され,高速線がスローラインを下回ると下落傾向が確立される. 2.モメンタム確認層:RSIをモメンタム確認ツールとして使用する.上昇傾向では,RSIは50以下で,上昇可能性を示し,下落傾向では,RSIは50以上で,下落可能性を示します. 3. トレーディングフィルター: 流動性や波動性が不十分な信号をフィルタリングするために,ボリュームとATR波動性の最低限値を設定する.
この戦略は,トレンドとモメンタム指標の統合された利用を通じて包括的な取引システムを確立する.このシステムの強みは,多層の信号確認メカニズムと包括的なリスク管理フレームワークにあります.しかし,実用的な適用には,実際の状況に基づいて戦略パフォーマンスとパラメータ最適化に対する市場の状況の影響に注意が必要です.継続的な改善と最適化を通じて,この戦略は,異なる市場環境で安定したパフォーマンスを維持する可能性があります.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-16 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ // © Boba2601 //@version=5 strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100) // === Налаштування індикаторів === length_rsi = input.int(14, title="RSI Period", group="Індикатори") fastMALength = input.int(9, title="Fast MA Length", group="Індикатори") slowMALength = input.int(21, title="Slow MA Length", group="Індикатори") // === Налаштування стоп-лосу і тейк-профіту === useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт") stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") // === Налаштування об'єму та волатильності === useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність") volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність") useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність") atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність") volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність") // === Розрахунок індикаторів === rsiValue = ta.rsi(close, length_rsi) fastMA = ta.sma(close, fastMALength) slowMA = ta.sma(close, slowMALength) // === Розрахунок об'єму та волатильності === averageVolume = ta.sma(volume, 20) atrValue = ta.atr(atrLength) // === Умови входу в позицію === longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50 if useVolumeFilter longCondition := longCondition and volume > volumeThreshold if useVolatilityFilter longCondition := longCondition and atrValue > volatilityThreshold shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50 if useVolumeFilter shortCondition := shortCondition and volume > volumeThreshold if useVolatilityFilter shortCondition := shortCondition and atrValue > volatilityThreshold // === Логіка входу та виходу з позиції === if (longCondition) strategy.entry("Long", strategy.long) if (useStopLossTakeProfit) stopLossPrice = close * (1 - stopLossPercent / 100) takeProfitPrice = close * (1 + takeProfitPercent / 100) strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice) if (shortCondition) strategy.entry("Short", strategy.short) if (useStopLossTakeProfit) stopLossPrice = close * (1 + stopLossPercent / 100) takeProfitPrice = close * (1 - takeProfitPercent / 100) strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice) // === Закриття позицій за зворотнім сигналом === if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50)) strategy.close("Long", comment="Закрито по сигналу") if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50)) strategy.close("Short", comment="Закрито по сигналу")