
Стратегия представляет собой комбинированную стратегию, использующую RSI, MACD и движущиеся средние. Она объединяет сигналы RSI о перекупке и перепродаже, чувствительность 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")