Комбинированная стратегия RSI с скользящей средней и MACD

Автор:Чао Чжан, Дата: 2024-02-20 14:28:59
Тэги:

img

Обзор

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

Логика стратегии

Основой этой стратегии является двойная система перекрестки скользящих средних, которая генерирует сигналы покупки и продажи, когда краткосрочная EMA (3-дневная) пересекает длительную EMA (30-дневную).

Кроме того, стратегия включает в себя 50-дневную скользящую среднюю линию, чтобы избежать частой торговли, используя ее в качестве фильтра для торговых сигналов. Только выше 50-дневной линии будут запускаться сигналы покупки, и наоборот.

Кроме того, индикатор RSI определяет сценарии перекупки (выше 70) и перепродажи (ниже 30).

Наконец, гистограмма MACD используется для определения среднесрочной и долгосрочной тенденции рынка. При гистограме MACD > 0 фон является восходящим, поэтому сигналы покупки более надежны. Когда гистограмма MACD < 0, фон является нисходящим, поэтому сигналы покупки могут вскоре столкнуться с коррекцией.

Плюсы

Самым большим преимуществом этой стратегии является комбинированное использование нескольких индикаторов, что делает каждое торговое решение очень уверенным и надежным. Ложные сигналы могут происходить с отдельными индикаторами довольно часто, в то время как эта стратегия улучшает точность, подтверждая сигналы с точки зрения краткосрочной тенденции, долгосрочной тенденции, состояния перекупленности / перепродажи, промежуточной тенденции и т. Д.

Другим преимуществом является то, что он сочетает в себе тренд-трейдинг и среднюю реверсию. Следование тренду имеет решающее значение для трейдеров тренда, но продвинутые стратегии не будут жесткими по этому поводу.

Риски

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

Еще один риск заключается в том, что стратегия может не воспользоваться полным потенциалом роста, если ее прервать преждевременно.

Усовершенствования

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

  1. Оптимизация параметров для поиска оптимальных комбинаций.

  2. Включить больше показателей, таких как полосы Боллинджера и KDJ для обогащения модели.

  3. Проверьте более продвинутые механизмы стоп-лосса, такие как стоп-лосс отслеживания и стоп-лосс волатильности.

  4. Оптимизировать части стратегии для адаптации к большему количеству рынков.

Заключение

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


/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('sachin 3.30 ', overlay=true)

// Input parameters
length = input.int(14, title='RSI Length', minval=1)
overbought = input.int(70, title='RSI Overbought Level', minval=0, maxval=100)
oversold = input.int(30, title='RSI Oversold Level', minval=0, maxval=100)
ema3_length = input(3, title='EMA 3 Length')
ema30_length = input(30, title='EMA 30 Length')
ema50_length = input(50, title='EMA 50 Length')

// Calculate EMAs
ema3 = ta.ema(close, ema3_length)
ema30 = ta.ema(close, ema30_length)
ema50 = ta.ema(close, ema50_length)

// Calculate RSI
rsiValue = ta.rsi(close, length)

// Calculate MACD
[macdLine, signalLine, hist] = ta.macd(close, 12, 26, 9)

var float buyPrice = na

// Buy condition: EMA 3 crosses above EMA 30 and price is above EMA 50
buyCondition = ta.crossover(ema3, ema30) and close > ema50
if (buyCondition)
    buyPrice := close
    strategy.entry('Buy', strategy.long)

// Exit long position when close is below EMA30 and below the low of the previous 3 candles after the buy entry
exitLongCondition = close < ema30 and close < ta.lowest(low, 3) and close < buyPrice
if (exitLongCondition)
    strategy.close('BuyExit')

// Sell condition: EMA 3 crosses below EMA 30 and price is below EMA 50
sellCondition = ta.crossunder(ema3, ema30) and close < ema50
if (sellCondition)
    strategy.entry('Sell', strategy.short)

// Exit short position when close is above EMA30 and above the high of the previous 3 candles after the sell entry
exitShortCondition = close > ema30 and close > ta.highest(high, 3)
if (exitShortCondition)
    strategy.close('SellExit')

// Plot EMAs on the chart
plot(ema3, color=color.new(color.blue, 0), title='EMA 3')
plot(ema30, color=color.new(color.red, 0), title='EMA 30')

// Change color of EMA 50 based on MACD histogram
ema50Color = hist > 0 ? color.new(color.blue, 0) : hist < 0 ? color.new(color.black, 0) : color.new(color.blue, 0)
plot(ema50, color=ema50Color, title='EMA 50 Colored')

// Change color of EMA 30 based on RSI trend
ema30Color = rsiValue > oversold ? color.new(color.green, 0) : rsiValue < overbought ? color.new(color.red, 0) : color.new(color.blue, 0)
plot(ema30, color=ema30Color, title='EMA 30 Colored')

// Highlight Buy and Sell signals on the chart
bgcolor(buyCondition ? color.new(color.green, 90) : na)
bgcolor(sellCondition ? color.new(color.red, 90) : na)

// Plotting Buy and Sell Signals on the Chart until strategy exit
barcolor(strategy.position_size > 0 and rsiValue > overbought ? color.new(color.yellow, 0) : strategy.position_size < 0 and rsiValue < oversold ? color.new(color.black, 0) : na)


Больше