Многопериодная торговая стратегия следования за трендом, основанная на пересечении сигнальных линий RSI

RSI MA RMA EMA SMA TMA ARSI
Дата создания: 2025-02-18 15:04:49 Последнее изменение: 2025-02-18 15:04:49
Копировать: 1 Количество просмотров: 358
1
Подписаться
1617
Подписчики

Многопериодная торговая стратегия следования за трендом, основанная на пересечении сигнальных линий RSI

Обзор

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

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

Основные принципы стратегии - выявление рыночных тенденций с помощью расчетов усиленного RSI (ARSI). В частности:

  1. Вычислите максимальную и минимальную цены за заданный период и получите диапазон цен
  2. Расчетная разница на основе изменения цен
  3. Сгладить разрыв с помощью метода выборочного скользящего среднего ((EMA, SMA, RMA, TMA)
  4. Стандартные результаты в диапазоне от 0 до 100
  5. Когда ARSI пересекает сигнальную линию ниже 50, образуется полисигнал
  6. Когда ARSI опускается выше 50 по линии сигнала, создается сигнал задержки

Стратегические преимущества

  1. Усовершенствованный механизм подтверждения сигнала - обеспечивает надежность сигнала с помощью перекрестка ARSI с сигнальной линией и фильтрации центральной оси
  2. Адаптируемость - поддержка нескольких методов подвижных средних, которые могут быть скорректированы в зависимости от особенностей рынка
  3. Разумный контроль риска - применение метода управления процентными позициями для эффективного контроля риска в каждой сделке
  4. Визуальный эффект выделяется - ярко показываются зоны перепродажи с помощью цветового наполнения, что позволяет быстро определить
  5. Реверсный менеджмент позиций - автоматическое ликвидация существующих позиций при возникновении обратного сигнала, чтобы избежать риска двойного позиционирования

Стратегический риск

  1. Риск рыночных потрясений - частое возникновение ложных сигналов в условиях поперечных колебаний
  2. Риск отставания - сигнал будет иметь некоторое отставание из-за использования подвижных средних
  3. Чувствительность параметров - различные параметры могут привести к значительным различиям в эффективности стратегии
  4. Риск рыночной адаптивности - существенное различие в эффективности стратегии в различных рыночных условиях
  5. Риск управления капиталом - управление фиксированными процентными позициями может быть более рискованным в условиях сильной волатильности

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

  1. Внедрение фильтрации волатильности - можно добавить ATR-индикатор, чтобы фильтровать торговые сигналы в условиях низкой волатильности
  2. Увеличение показателей подтверждения тенденции - в сочетании с более длительными циклами показателей тенденции для повышения надежности сигнала
  3. Оптимизация управления позициями - изменение доли позиций в зависимости от динамики волатильности рынка
  4. Присоединение к механизму остановки убытков - настройка динамического остановки на основе ATR для лучшего контроля риска
  5. Разработка адаптивных параметров - изучение методов динамической оптимизации параметров для повышения адаптивности стратегий

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

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

Исходный код стратегии
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Ultimate RSI [LuxAlgo] Strategy", shorttitle="ULT RSI Strat", overlay=false, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//------------------------------------------------------------------------------
// Settings
//------------------------------------------------------------------------------
length    = input.int(14, minval=2, title="RSI Length")
smoType1  = input.string("RMA", title="Method", options=["EMA", "SMA", "RMA", "TMA"])
src       = input(close, title="Source")

arsiCss   = input.color(color.silver, "RSI Color", inline="rsicss")
autoCss   = input.bool(true, "Auto", inline="rsicss")

// Signal Line settings
smooth    = input.int(14, minval=1, title="Signal Smooth", group="Signal Line")
smoType2  = input.string("EMA", title="Method", options=["EMA", "SMA", "RMA", "TMA"], group="Signal Line")
signalCss = input.color(color.new(#ff5d00, 0), "Signal Color", group="Signal Line")

// Overbought/Oversold style
obValue     = input.float(80, "Overbought", inline="ob", group="OB/OS Style")
obCss       = input.color(color.new(#089981, 0), "", inline="ob", group="OB/OS Style")
obAreaCss   = input.color(color.new(#089981, 80), "", inline="ob", group="OB/OS Style")

osValue     = input.float(20, "Oversold", inline="os", group="OB/OS Style")
osCss       = input.color(color.new(#f23645, 0), "", inline="os", group="OB/OS Style")
osAreaCss   = input.color(color.new(#f23645, 80), "", inline="os", group="OB/OS Style")

//------------------------------------------------------------------------------
// Function: Moving Average (selectable type)
//------------------------------------------------------------------------------
ma(x, len, maType)=>
    switch maType
        "EMA" => ta.ema(x, len)
        "SMA" => ta.sma(x, len)
        "RMA" => ta.rma(x, len)
        "TMA" => ta.sma(ta.sma(x, len), len)
 
//------------------------------------------------------------------------------
// Augmented RSI Calculation
//------------------------------------------------------------------------------
upper = ta.highest(src, length)
lower = ta.lowest(src, length)
r     = upper - lower

d     = src - src[1]
diff  = upper > upper[1] ? r : lower < lower[1] ? -r : d

num   = ma(diff, length, smoType1)
den   = ma(math.abs(diff), length, smoType1)
arsi  = den != 0 ? num / den * 50 + 50 : 50  // safeguard against division by zero

signal = ma(arsi, smooth, smoType2)

//------------------------------------------------------------------------------
// Strategy Entry Conditions
//------------------------------------------------------------------------------
// Long entry: Ultimate RSI crosses above its signal when it is below 50 (lower half)
// Short entry: Ultimate RSI crosses below its signal when it is above 50 (upper half)
longCondition  = ta.crossover(arsi, signal) and arsi < 50
shortCondition = ta.crossunder(arsi, signal) and arsi > 50

// Close opposite positions when conditions occur
if shortCondition
    strategy.close("Long")
if longCondition
    strategy.close("Short")

// Place new entries based on the conditions
if longCondition
    strategy.entry("Long", strategy.long)
if shortCondition
    strategy.entry("Short", strategy.short)

// //------------------------------------------------------------------------------
// // Plots and Constant Lines
// //------------------------------------------------------------------------------
// // Plot the Ultimate RSI and its Signal
// plot_rsi = plot(arsi, title="Ultimate RSI",
//      color = arsi > obValue ? obCss : arsi < osValue ? osCss : autoCss ? chart.fg_color : arsiCss,
//      linewidth=2)
// plot(signal, title="Signal Line", color=signalCss, linewidth=2)

// // Instead of using hline, create constant plots for OB, Midline, and OS
// plot_ob  = plot(obValue, title="Overbought", color=obCss, style=plot.style_line, linewidth=1)
// plot_mid = plot(50, title="Midline", color=color.gray, style=plot.style_line, linewidth=1)
// plot_os  = plot(osValue, title="Oversold", color=osCss, style=plot.style_line, linewidth=1)

// //------------------------------------------------------------------------------
// // Fill OB/OS Areas for Visual Clarity
// //------------------------------------------------------------------------------
// fill(plot_rsi, plot_ob, color=arsi > obValue ? obAreaCss : na)
// fill(plot_os, plot_rsi, color=arsi < osValue ? osAreaCss : na)