Синхронная стратегия тренда Momentum


Дата создания: 2024-01-16 14:10:25 Последнее изменение: 2024-01-16 14:10:25
Копировать: 0 Количество просмотров: 818
1
Подписаться
1617
Подписчики

Синхронная стратегия тренда Momentum

Обзор

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

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

Относительно динамический индекс (RMI)

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

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

RMI рассчитывается следующим образом: сначала рассчитывается средний рост и средний падение за определенный период. В отличие от RSI, RMI использует значение изменения цены закрытия в тот же день по сравнению с ценой закрытия за предыдущий день, а не просто положительный рост и отрицательный рост. Затем средний рост делится на средний падение, затем проводится унификационная обработка, чтобы значение находилось в диапазоне 0-100 .

Движущая сила

Эта стратегия использует средние значения RMI и MFI для сравнения с заданными положительными и отрицательными динамическими понижениями, чтобы оценить текущий уровень динамики рынка и принять решение о создании позиции против плавных позиций.

Индекс супертенденции

Супертенденционный индикатор, основанный на более высоких временных циклах, позволяет судить о больших тенденциях. Он будет динамически корректировать параметры ATR в зависимости от реальной диапазона волн, чтобы эффективно идентифицировать точку переворота тенденции.
Также в стратегию включена VWMA, которая способствует выявлению важных изменений в тренде.

Выбор направления сделки

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

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

Сочетание динамики и тенденции

В отличие от стратегии, использующей только динамические или трендовые индикаторы, эта стратегия позволяет более точно оценивать движение рынка, объединяя преимущества RMI и супертенденционных индикаторов.

Многовременный анализ

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

Стратегия стоп-лосса в реальном времени

Реальная остановка убытков, основанная на супертенденции, позволяет эффективно контролировать одиночные убытки.

Гибкость в направлении торговли

Выбор оптовой, дискортовой или двусторонней торговли позволяет стратегии адаптироваться к различным рыночным условиям.

Анализ рисков

Оптимизация параметров сложна

Оптимизация таких параметров, как RMI и супертенденции, является сложной, неправильная настройка может повлиять на эффективность стратегии.

Слишком близкое сдерживание может привести к чрезмерному сдерживанию

Слишком высокая чувствительность к небольшим колебаниям рынка может привести к слишком частому возникновению проблем с остановкой убытков.

Решение: надлежащее расширение диапазона остановки или использование других методов остановки вибрационного типа.

Направление оптимизации стратегии

Оптимизация мультиплементной адаптации

Расширять диапазон применяемых сортов, идентифицировать параметры различных сортов и направлять оптимизацию. Позволять стратегии копировать на большом количестве рынков.

Динамическая оптимизация стоп-лосса

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

Добавить условия фильтрации

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

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

Эта стратегия позволяет точно оценивать состояние рынка с помощью RMI и супер трендовых индикаторов. Также она хорошо справляется с управлением рисками. С помощью глубокой оптимизации она, как полагают, будет работать лучше и лучше в течение нескольких сортов и нескольких циклов.

Исходный код стратегии
/*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)