Это комбинированная стратегия, использующая RSI, MACD и скользящие средние показатели. Она включает сигналы перекупа/перепродажи от RSI, чувствительность MACD и индикаторный эффект скользящих средних показателей при определении пунктов входа.
Стратегия в основном рассматривает следующие четыре условия для принятия решения о долгосрочном вхождении:
При выполнении следующих двух условий выхода стратегия закрывает позиции для остановки потерь:
Таким образом, стратегия своевременно останавливает убытки и избегает огромных потерь при получении прибыли или ретрасе.
Наибольшее преимущество этой стратегии заключается в сочетании показателей, позволяющих полностью использовать преимущества каждого из них:
Применение РСИ позволяет избежать потерь по комиссионным за транзакции, вызванным неоднократным открытием позиций на рынках с ограниченным диапазоном.
Чувствительность индикатора гистограммы MACD обеспечивает своевременное определение точек перелома.
Движущиеся средние отфильтровывают краткосрочный рыночный шум и в полной мере влияют на эффект индикатора.
К основным рискам этой стратегии относятся:
Высокий риск ретрекшера. Самый большой риск движущейся средней, подобной трендовой стратегии, - это большой откат, вызванный переломом тренда. Это можно активно контролировать с помощью размещения позиций, стоп-лосса и т.д.
Трудность в оптимизации параметров. Многоиндикаторные комбинированные стратегии имеют более высокую сложность в установке и оптимизации параметров. Методы, такие как ходьба вперед, генетический алгоритм, могут быть приняты для оптимизации параметров.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
Увеличить количество дополнительных фильтров для дальнейшего предотвращения ложных сигналов, например, комбинировать с показателями объема, волатильности и т.д.
Различия в параметрах испытания, соответствующие большему количеству продуктов.
Оптимизировать настройки параметров скользящей средней.
Исследуйте адаптивные скользящие средние.
В заключение, эта стратегия является типичной оптимизированной версией скользящей средней и следующей за трендом стратегии. Она поглощает сильные стороны основных индикаторов, таких как MACD и RSI, в аспектах входа времени и остановки убытков. Следующими шагами могут быть улучшения с точки зрения оптимизации параметров и контроля рисков, чтобы сделать стратегию более надежной и адаптируемой к большему количеству продуктов, что приводит к более высокой стабильности.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true) // Inputs src = input(close, title="RSI Source") // RSI Settings lengthRSI = input.int(14, minval=1) // Stop Loss Settings stopLossPct = input.float(0.09, title="Stop Loss Percentage") takeProfitPct = input.float(0.15, title="Take Profit Percentage") // MACD Settings fastlen = input(12) slowlen = input(26) siglen = input(9) // Strategy Settings longEntry = input(0, title="Long Entry Level") exitLevel = input(0, title="Exit Level") // EMA Settings emaShortLength = input(8, title="Short EMA Length") emaLongLength = input(21, title="Long EMA Length") atrMultiplier = input.float(2, title="atrMultiplier") atrLength = input.int(20, title="atrLength") // Indicators rsi1 = ta.rsi(src, lengthRSI) [macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen) // Calculate EMAs emaShort = ta.ema(src, emaShortLength) emaLong = ta.ema(src, emaLongLength) // Calculate ATR atr = ta.atr(atrLength) // Variables var bool canEnterLong = na // Strategy conditions longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr // Entries and Exits if hist < exitLevel and emaShort < emaLong canEnterLong := true strategy.close("Long") // Store last entry price var lastEntryPrice = float(na) var lastEntryPrice2 = float(na) if longCondition strategy.entry("Long", strategy.long) canEnterLong := false lastEntryPrice := close if lastEntryPrice < close lastEntryPrice := close // Calculate Stop Loss and Take Profit Levels based on last entry price stopLossLevel = lastEntryPrice * (1 - stopLossPct) // Check for stop loss and take profit levels and close position if triggered if (strategy.position_size > 0) last_buy = strategy.opentrades[0] if (close < stopLossLevel) strategy.close("Long", comment="Stop Loss Triggered") if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) ) strategy.close("Long", comment="Take Profit Triggered")