Это стратегия, которая сочетает в себе экспоненциальную скользящую среднюю (EMA) и индекс относительной силы (RSI). Стратегия идентифицирует торговые сигналы путем мониторинга перекрестного пересечения быстрых и медленных EMA, включая уровни перекупленности / перепродажи RSI и дивергенцию RSI для эффективного улавливания рыночных тенденций. Работая в течение 1 часа, она повышает точность торговли посредством проверки нескольких технических индикаторов.
Основная логика включает следующие ключевые элементы: 1. Использует 9-периодные и 26-периодные EMA для определения направления тренда, причем восходящий тренд указывается, когда быстрая линия выше медленной линии 2. использует 14-периодный RSI с 65 и 35 в качестве порогов для длинных и коротких сигналов 3. обнаруживает дивергенцию RSI в течение 1 часа путем сравнения ценовых максимумов / минимумов с максимумами / минимумами RSI 4. Долгий вход требует: быстрой EMA выше медленной EMA, RSI выше 65 и отсутствия медленного расхождения RSI 5. Краткий вход требует: быстрая EMA ниже медленной EMA, RSI ниже 35, и нет бычьего расхождения RSI
Эта стратегия создает относительно полную торговую систему путем сочетания скользящих средних, индикаторов импульса и анализа дивергенции. Она подчеркивает проверку нескольких сигналов для эффективного снижения рисков ложного суждения.
/*backtest start: 2024-12-10 00:00:00 end: 2025-01-08 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA9_RSI_Strategy_LongShort", overlay=true) // Parameters fastLength = input.int(9, minval=1, title="Fast EMA Length") slowLength = input.int(26, minval=1, title="Slow EMA Length") rsiPeriod = input.int(14, minval=1, title="RSI Period") rsiLevelLong = input.int(65, minval=1, title="RSI Level (Long)") rsiLevelShort = input.int(35, minval=1, title="RSI Level (Short)") // Define 1-hour timeframe timeframe_1h = "60" // Fetch 1-hour data high_1h = request.security(syminfo.tickerid, timeframe_1h, high) low_1h = request.security(syminfo.tickerid, timeframe_1h, low) rsi_1h = request.security(syminfo.tickerid, timeframe_1h, ta.rsi(close, rsiPeriod)) // Current RSI rsi = ta.rsi(close, rsiPeriod) // Find highest/lowest price and corresponding RSI in the 1-hour timeframe highestPrice_1h = ta.highest(high_1h, 1) // ราคาสูงสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง lowestPrice_1h = ta.lowest(low_1h, 1) // ราคาต่ำสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง highestRsi_1h = ta.valuewhen(high_1h == highestPrice_1h, rsi_1h, 0) lowestRsi_1h = ta.valuewhen(low_1h == lowestPrice_1h, rsi_1h, 0) // Detect RSI Divergence for Long bearishDivLong = high > highestPrice_1h and rsi < highestRsi_1h bullishDivLong = low < lowestPrice_1h and rsi > lowestRsi_1h divergenceLong = bearishDivLong or bullishDivLong // Detect RSI Divergence for Short (switch to low price for divergence check) bearishDivShort = low > lowestPrice_1h and rsi < lowestRsi_1h bullishDivShort = high < highestPrice_1h and rsi > highestRsi_1h divergenceShort = bearishDivShort or bullishDivShort // Calculate EMA emaFast = ta.ema(close, fastLength) emaSlow = ta.ema(close, slowLength) // Long Conditions longCondition = emaFast > emaSlow and rsi > rsiLevelLong and not divergenceLong // Short Conditions shortCondition = emaFast < emaSlow and rsi < rsiLevelShort and not divergenceShort // Plot conditions plotshape(longCondition, title="Buy", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") plotshape(shortCondition, title="Sell", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell") // Execute the strategy if (longCondition) strategy.entry("Long", strategy.long, comment="entry long") if (shortCondition) strategy.entry("Short", strategy.short, comment="entry short") // Alert alertcondition(longCondition, title="Buy Signal", message="Buy signal triggered!") alertcondition(shortCondition, title="Sell Signal", message="Sell signal triggered!")