Стратегия RMI Trend Sync эффективно сочетает в себе сильные стороны индекса относительной динамики (RMI) и индикатора супер-тенденции, чтобы реализовать интеграцию анализа импульса и суждения о тренде.
RMI является улучшенной версией индекса относительной силы (RSI). Он включает в себя больше особенностей изменений цен, таких как направленность и величина, чтобы более точно измерить рыночный импульс.
Метод расчета RMI заключается в следующем: сначала вычислить среднюю прибыль и среднюю потерю за определенный период. В отличие от RSI, RMI использует изменение между текущей ценой закрытия и предыдущей ценой закрытия, а не простой положительный и отрицательный рост. Затем разделить среднюю прибыль на средний убыток и нормализовать значение, чтобы соответствовать шкале от 0 до 100.
Эта стратегия использует среднее значение РМИ и МФИ для сравнения с заранее установленными положительными и отрицательными порогами импульса для определения текущего уровня импульса рынка для решений о входе и выходе.
Показатель Super Trend рассчитывается на основе более высокого временного интервала, который может дать суждения о основных тенденциях. Он динамически корректирует параметры на основе реальной волатильности ATR для эффективного выявления обратных тенденций.
Эта стратегия также включает в себя весовую скользящую среднюю величину объема (VWMA), чтобы еще больше улучшить ее способность обнаруживать важные сдвиги тенденций.
Эта стратегия позволяет выбирать длинную, короткую или двустороннюю торговлю.
По сравнению со стратегиями, основанными исключительно на индикаторах импульса или тренда, эта стратегия позволяет более точно определить рыночные тенденции путем интеграции сильных сторон RMI и Super Trend.
Применение RMI и Super Trend в разные временные рамки приводит к более подходящему пониманию как краткосрочных, так и долгосрочных тенденций.
Механизм стоп-лосса в режиме реального времени, основанный на супер-тенде, может эффективно ограничивать потери на одну сделку.
Выбор между длинной, короткой или двусторонней торговлей позволяет этой стратегии адаптироваться к различным рыночным условиям.
Оптимизация для таких параметров, как RMI и Super Trend, довольно сложна.
Чрезмерная чувствительность к небольшим колебаниям может привести к чрезмерному запуску стоп-лосса.
Решение: надлежащим образом ослабить диапазон стоп-лосса или использовать другие методы стоп-лосса, основанные на волатильности.
Расширение применяемых активов и определение направлений оптимизации параметров для различных активов, чтобы обеспечить более широкое повторение на большем количестве рынков.
Включить динамические механизмы стоп-лосса для лучшего отслеживания текущих колебаний и уменьшения чрезмерного стоп-лосса, вызванного незначительными ретрикциями.
Добавьте суждения от большего количества показателей в качестве условий фильтрации, чтобы избежать входа в позиции без четких сигналов.
Благодаря изобретательному сочетанию RMI и Super Trend, эта стратегия реализует точные суждения о рыночных условиях. Она также превосходит в управлении рисками. С глубокой оптимизацией считается, что ее производительность в большем количестве активов и временных рамок станет все более замечательной.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // @ presentTrading //@version=5 strategy("RMI Trend Sync - Strategy [presentTrading]", shorttitle = "RMI Sync [presentTrading]", overlay=true ) // ---> Inputs -------------- // Add Button for Trading Direction tradeDirection = input.string("Both", "Select Trading Direction", options=["Long", "Short", "Both"]) // Relative Momentum Index (RMI) Settings Length = input.int(21, "RMI Length", group = "RMI Settings") pmom = input.int(70, "Positive Momentum Threshold", group = "RMI Settings") nmom = input.int(30, "Negative Momentum Threshold", group = "RMI Settings") bandLength = input.int(30, "Band Length", group = "Momentum Settings") rwmaLength = input.int(20, "RWMA Length", group = "Momentum Settings") // Super Trend Settings len = input.int(10, "Super Trend Length", minval=1, group="Super Trend Settings") higherTf1 = input.timeframe('480', "Higher Time Frame", group="Super Trend Settings") factor = input.float(3.5, "Super Trend Factor", step=.1, group="Super Trend Settings") maSrc = input.string("WMA", "MA Source", options=["SMA", "EMA", "WMA", "RMA", "VWMA"], group="Super Trend Settings") atr = request.security(syminfo.tickerid, higherTf1, ta.atr(len)) TfClose1 = request.security(syminfo.tickerid, higherTf1, close) // Visual Settings filleshow = input.bool(true, "Display Range MA", group = "Visual Settings") bull = input.color(#00bcd4, "Bullish Color", group = "Visual Settings") bear = input.color(#ff5252, "Bearish Color", group = "Visual Settings") // Calculation of Bar Range barRange = high - low // RMI and MFI Calculations upChange = ta.rma(math.max(ta.change(close), 0), Length) downChange = ta.rma(-math.min(ta.change(close), 0), Length) rsi = downChange == 0 ? 100 : upChange == 0 ? 0 : 100 - (100 / (1 + upChange / downChange)) mf = ta.mfi(hlc3, Length) rsiMfi = math.avg(rsi, mf) // Momentum Conditions positiveMomentum = rsiMfi[1] < pmom and rsiMfi > pmom and rsiMfi > nmom and ta.change(ta.ema(close,5)) > 0 negativeMomentum = rsiMfi < nmom and ta.change(ta.ema(close,5)) < 0 // Momentum Status bool positive = positiveMomentum ? true : negativeMomentum ? false : na bool negative = negativeMomentum ? true : positiveMomentum ? false : na // Band Calculation calculateBand(len) => math.min(ta.atr(len) * 0.3, close * (0.3/100)) * 4 band = calculateBand(bandLength) // Range Weighted Moving Average (RWMA) Calculation calculateRwma(range_, period) => weight = range_ / math.sum(range_, period) sumWeightedClose = math.sum(close * weight, period) totalWeight = math.sum(weight, period) sumWeightedClose / totalWeight rwma = calculateRwma(barRange, rwmaLength) colour = positive ? bull : negative ? bear : na rwmaAdjusted = positive ? rwma - band : negative ? rwma + band : na max = rwma + band min = rwma - band longCondition = positive and not positive[1] shortCondition = negative and not negative[1] longExitCondition = shortCondition shortExitCondition = longCondition // Dynamic Trailing Stop Loss vwma1 = switch maSrc "SMA" => ta.sma(TfClose1*volume, len) / ta.sma(volume, len) "EMA" => ta.ema(TfClose1*volume, len) / ta.ema(volume, len) "WMA" => ta.wma(TfClose1*volume, len) / ta.wma(volume, len) upperBand = vwma1 + factor * atr lowerBand = vwma1 - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) float superTrend = na int direction = na superTrend := direction == -1 ? lowerBand : upperBand longTrailingStop = superTrend - atr * factor shortTrailingStop = superTrend + atr * factor // Strategy Order Execution if (tradeDirection == "Long" or tradeDirection == "Both") strategy.entry("Long", strategy.long, when = longCondition) strategy.exit("Exit Long", "Long", when=longExitCondition, stop = longTrailingStop) if (tradeDirection == "Short" or tradeDirection == "Both") strategy.entry("Short", strategy.short, when =shortCondition) strategy.exit("Exit Short", "Short", when=shortExitCondition, stop = shortTrailingStop)