Стратегия Golden Crossover RSI MACD на основе скользящей средней


Дата создания: 2024-01-05 16:11:23 Последнее изменение: 2024-01-05 16:11:23
Копировать: 0 Количество просмотров: 649
1
Подписаться
1617
Подписчики

Стратегия Golden Crossover RSI MACD на основе скользящей средней

Обзор

Стратегия представляет собой комбинированную стратегию, использующую RSI, MACD и движущиеся средние. Она объединяет сигналы RSI о перекупке и перепродаже, чувствительность MACD и индикаторные эффекты движущихся средних при определении времени выхода на рынок.

Стратегический принцип

В этой стратегии принято решение о дополнительном входе в рынок в соответствии с четырьмя основными критериями:

  1. столбик MACD больше, чем установленный многоголовый входный параметр;
  2. RSI больше 50, это означает, что мы перекупаем;
  3. Краткосрочная EMA пересекает долгосрочную EMA, образуя золотой крест;
  4. Долгосрочная ЭМА, находящаяся над ценой закрытия, выше, чем долгосрочная ЭМА плюс ATR.

Стратегия приостанавливает убытки, когда выполняются следующие два условия:

  1. столбик MACD меньше установленного параметра стоп-лосса;
  2. Краткосрочная EMA превышает долгосрочную.

Таким образом, стратегия своевременно останавливает убытки во время снятия прибыли, чтобы избежать больших потерь.

Анализ преимуществ

Наибольшее преимущество этой стратегии заключается в сочетании показателей, которые используют преимущества каждого из них, а именно:

  1. Использование RSI позволяет избежать потери в торговых расходах, связанных с многократным открытием позиций в условиях шока.
  2. Чувствительность MACD обеспечивает своевременное обнаружение переменных.
  3. Движущаяся средняя фильтрует короткую линию рынка и использует ее в качестве индикатора.

Риски и решения

Основные риски этой стратегии заключаются в двух аспектах:

  1. Наибольший риск для трендовых стратегий, таких как движущиеся средние, заключается в большом отступлении, вызванном рыночными изменениями. Отступление может быть активно контролировано путем снижения размеров позиций и установки стоп-лосс.

  2. Оптимизация параметров является сложной. Параметры многопоказательной комбинации сложнее всего настроить и оптимизировать. Для определения оптимальных параметров можно использовать методы оптимизации параметров, такие как пошаговые методы и генетические алгоритмы.

Оптимизация

Эта стратегия может быть улучшена в следующих аспектах:

  1. Добавление дополнительных условий для дальнейшей фильтрации фальшивых сигналов, таких как объединение показателей объема торговли, показателей волатильности и т. Д.

  2. Тестирование различий в параметрах настройки различных сортов. Настройка параметров для большего количества сортов.

  3. Оптимизация параметров скользящих средних. Тестирование различий в параметрах разных длин.

  4. Исследование использует адаптированные подвижные средние.

Подвести итог

В целом, эта стратегия является типичной оптимизированной версией стратегии движущихся средних и трендового отслеживания. Она поглощает преимущества нескольких основных индикаторов, таких как 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")