Стратегия синхронизации трендов RMI

Автор:Чао Чжан, Дата: 2024-01-16 14:10:25
Тэги:

img

Обзор

Стратегия RMI Trend Sync эффективно сочетает в себе сильные стороны индекса относительной динамики (RMI) и индикатора супер-тенденции, чтобы реализовать интеграцию анализа импульса и суждения о тренде.

Принципы стратегии

Индекс относительного импульса (RMI)

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

Метод расчета RMI

Метод расчета 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)

Больше