Динамическая система торговли по каналу с отслеживанием тренда на основе пяти скользящих средних RSI

EMA RSI DC
Дата создания: 2024-12-05 15:15:28 Последнее изменение: 2024-12-05 15:15:28
Копировать: 0 Количество просмотров: 445
1
Подписаться
1617
Подписчики

Динамическая система торговли по каналу с отслеживанием тренда на основе пяти скользящих средних RSI

Обзор

Стратегия представляет собой систему отслеживания тенденций, которая сочетает в себе несколько технических показателей, в основном включает в себя пять различных циклов, такие как скользящие средние показатели (EMA), относительно сильные показатели (RSI) и два различных цикла, такие как Дончианский канал (Donchian Channel). Система использует комбинацию нескольких показателей для захвата рыночных тенденций и управления рисками и доходами с использованием динамических стоп-лосс и прибыльных целей.

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

Стратегия использует многоуровневые технические показатели для подтверждения сигнала: сначала используется 5 ЭМА (циклы 9, 21, 55, 89, 144) для построения трендовой структуры, определяющей начальное направление тренда через перекрестку быстрых ЭМА и медленных ЭМА. Затем используется RSI (цикл 14) в качестве фильтра тренда, требующего, чтобы RSI был выше, чем в зоне сверхпокупа (цикл 60), и ниже, чем в зоне сверхпродажи (цикл 40), чтобы позволить пустоту, что позволяет избежать частых сделок на рынке.

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

  1. Круговая проверка с использованием нескольких технологических показателей повышает надежность сигнала
  2. В сочетании с отслеживанием тенденций и динамическими показателями, можно добиться хороших результатов в трендовых рынках
  3. Использование динамических стоп-лосс и многократных прибыльных целей позволяет защитить средства и максимально использовать тенденции
  4. Фильтрация сигналов через RSI, снижение ложных сигналов на рынке
  5. Высокий уровень автоматизации системы, снижение эмоционального воздействия человеческого вмешательства

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

  1. Многочисленные показатели могут привести к задержке сигналов, что может привести к более значительным отступлениям в быстро меняющихся рынках.
  2. Фильтрация RSI может пропустить некоторые важные трендовые точки
  3. Фиксированные процентные установки стоп-лосса и прибыли могут не подходить для всех рыночных условий
  4. В условиях высокой волатильности рынка может часто возникать попадание в стоп-полюс.
  5. Слишком много технических показателей может привести к чрезмерной оптимизации системы

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

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

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA RSI Donchian Strategy", overlay=true)

// Input parameters
fastEmaLength = input(9, title="Fast EMA Length")
midEmaLength = input(21, title="Mid EMA Length")
slowEmaLength = input(55, title="Slow EMA Length")
ema89Length = input(89, title="89 EMA Length")
ema144Length = input(144, title="144 EMA Length")
rsiPeriod = input(14, title="RSI Period")
rsiOverbought = input(60, title="RSI Overbought Level")
rsiOversold = input(40, title="RSI Oversold Level")
donchianLength1 = input(21, title="Donchian Channel Length 1")
donchianLength2 = input(74, title="Donchian Channel Length 2")

// EMA calculations
fastEma = ta.ema(close, fastEmaLength)
midEma = ta.ema(close, midEmaLength)
slowEma = ta.ema(close, slowEmaLength)
ema89 = ta.ema(close, ema89Length)
ema144 = ta.ema(close, ema144Length)

// RSI calculation
rsi = ta.rsi(close, rsiPeriod)

// Donchian Channel calculations
donchianUpper1 = ta.highest(high, donchianLength1)
donchianLower1 = ta.lowest(low, donchianLength1)
donchianUpper2 = ta.highest(high, donchianLength2)
donchianLower2 = ta.lowest(low, donchianLength2)
donchianMid1 = (donchianUpper1 + donchianLower1) / 2
donchianMid2 = (donchianUpper2 + donchianLower2) / 2

// Plot EMAs
plot(fastEma, color=color.green, linewidth=2, title="Fast EMA")
plot(midEma, color=color.blue, linewidth=2, title="Mid EMA")
plot(slowEma, color=color.orange, linewidth=2, title="Slow EMA")
plot(ema89, color=color.red, linewidth=2, title="89 EMA")
plot(ema144, color=color.purple, linewidth=2, title="144 EMA")

// Plot Donchian Channels
plot(donchianUpper1, color=color.new(color.blue, 0), title="Donchian Upper 1")
plot(donchianLower1, color=color.new(color.blue, 0), title="Donchian Lower 1")
plot(donchianMid1, color=color.new(color.blue, 80), title="Donchian Mid 1")
plot(donchianUpper2, color=color.new(color.red, 0), title="Donchian Upper 2")
plot(donchianLower2, color=color.new(color.red, 0), title="Donchian Lower 2")
plot(donchianMid2, color=color.new(color.red, 80), title="Donchian Mid 2")

// Entry Conditions
longCondition = ta.crossover(fastEma, slowEma) and rsi > rsiOverbought
shortCondition = ta.crossunder(fastEma, slowEma) and rsi < rsiOversold

// Stop Loss and Take Profit
var float longStopLoss = na
var float longTakeProfit1 = na
var float longTakeProfit2 = na
var float shortStopLoss = na
var float shortTakeProfit1 = na
var float shortTakeProfit2 = na

if longCondition
    longStopLoss := high * 0.99
    longTakeProfit1 := longStopLoss * 1.02618
    longTakeProfit2 := longStopLoss * 1.036185
    strategy.entry("Long", strategy.long)
    
if shortCondition
    shortStopLoss := low * 1.01
    shortTakeProfit1 := shortStopLoss * 0.97382
    shortTakeProfit2 := shortTakeProfit1 * 0.96381
    strategy.entry("Short", strategy.short)

// Exit Conditions
if not na(longStopLoss)
    strategy.exit("Take Profit 1", "Long", limit=longTakeProfit1)
    strategy.exit("Take Profit 2", "Long", limit=longTakeProfit2)
    strategy.exit("Stop Loss", "Long", stop=longStopLoss)

if not na(shortStopLoss)
    strategy.exit("Take Profit 1", "Short", limit= shortTakeProfit1)
    strategy.exit("Take Profit 2", "Short", limit=shortTakeProfit2)
    strategy.exit("Stop Loss", "Short", stop=shortStopLoss)

// Labels for buy and sell signals
if longCondition
    label.new(bar_index, low, "Buy", color=color.green, style=label.style_label_up, textcolor=color.white)

if shortCondition
    label.new(bar_index, high, "Sell", color=color.red, style=label.style_label_down, textcolor=color.white)

// Alerts
alertcondition(longCondition, title="Long Entry Alert", message="Long entry signal")
alertcondition(shortCondition, title="Short Entry Alert", message="Short entry signal")