Тенденционная стратегия на основе DMI и RSI

Автор:Чао Чжан, Дата: 2024-01-25 15:56:41
Тэги:

img

## Логика стратегии

  1. Используйте индикатор DMI для оценки направления тренда
    • DMI состоит из трех линий: +DI указывает на рост, -DI указывает на спад, ADX оценивает силу тренда
    • Когда +DI>-DI, это восходящий тренд, идти длинный; когда -DI>+DI, это нисходящий тренд, идти короткий
  2. Использовать индикатор RSI для оценки перекупленности и перепродажи
    • RSI сравнивает среднюю прибыль и убытки за период для определения перекупленности или перепродажи
  3. Сочетание DMI для определения направления тренда и RSI для перекупленных/перепроданных может лучше отразить рыночный ритм
    • Когда DMI показывает рост и RSI перепродан, хорошее время для длительного
    • Когда DMI показывает нисходящий тренд и RSI перекуплен, хорошее время для короткого
  4. Установите движущийся стоп-лосс для блокировки прибыли

Анализ преимуществ Это относительно зрелая и устойчивая тенденция, следующая за стратегией со следующими преимуществами:

  1. Сочетание тенденции и перекупленности/перепроданности позволяет избежать частой торговли на рынке с ограниченным диапазоном
  2. Популярные индикаторы DMI и RSI с легкой настройкой параметров и тщательной практической проверкой
  3. Следующая остановка потери блокирует прибыль и в некоторой степени избегает остановки потери
  4. Ясные и простые правила, простые в применении

## Анализ рисков Следует также отметить некоторые риски:

  1. DMI и RSI могут легко генерировать ложные сигналы, вызывая ненужные потери
  2. Неправильное настройка остановки потерь может остановить потерю слишком рано или слишком сильно
  3. Не может эффективно отфильтровывать рынки, склонные к попаданию в ловушку
  4. Следование тренду не выходит сразу, когда тренд меняется.

##Указания на оптимизацию Стратегия может быть оптимизирована в следующих аспектах:

  1. Добавьте фильтр волатильности, чтобы избежать рыночных колебаний.
  2. Комбинируйте шаблоны свечей, чтобы избежать ложного прорыва
  3. Установка правильного стоп-лосса вблизи ключевой поддержки/сопротивления для ограничения потерь
  4. Улучшить модель машинного обучения для прогнозирования трендов
  5. Динамическая оптимизация параметров DMI и RSI


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © YingYangJPN

//@version=5
strategy("DMI and RSI Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// DMI indikatörünü tanımlayalım
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
len = input.int(14, minval=1, title="DI Length")
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
trailing_stop_loss_factor = input.float(0.50, "Trailing Stop Loss Factor", step = 0.01)

// RSI indikatörünü tanımlayalım
rsiLength = input.int(14, minval=1, title="RSI Length")
rsiSource = input(close, title="RSI Source")
rsiOverbought = input.int(70, title="RSI Overbought Level")
rsiOversold = input.int(30, title="RSI Oversold Level")
rsiValue = ta.rsi(rsiSource, rsiLength)

// Uzun pozisyon açma koşullarını tanımlayalım
longCondition1 = rsiValue < rsiOversold // RSI oversold seviyesinin altındaysa
longCondition2 = adx > 20 // ADX 20'den büyükse
longCondition3 = minus > plus

// Kısa pozisyon açma koşullarını tanımlayalım
shortCondition1 = rsiValue > rsiOverbought // RSI overbought seviyesinin üstündeyse
shortCondition2 = adx > 20 // ADX 20'den büyükse
shortCondition3 = plus > minus

// Uzun pozisyon açalım
if longCondition1 and longCondition2 and longCondition3
    strategy.entry("Long", strategy.long)
    

// Kısa pozisyon açalım
if shortCondition1 and shortCondition2 and shortCondition3
    strategy.entry("Short", strategy.short)
    
// Trailing Stop Loss
longTrailingStopLoss = strategy.position_avg_price * (1 - trailing_stop_loss_factor / 100)
shortTrailingStopLoss = strategy.position_avg_price * (1 + trailing_stop_loss_factor / 100)
if strategy.position_size > 0 
    strategy.exit("Exit Long", "Long", stop  = longTrailingStopLoss)
if strategy.position_size < 0 
    strategy.exit("Exit Short", "Short", stop = shortTrailingStopLoss)

// DMI ve RSI indikatörlerini grafiğe çizelim
plot(adx, color=#F50057, title="ADX")
plot(plus, color=#2962FF, title="+DI")
plot(minus, color=#FF6D00, title="-DI")
plot(rsiValue, color=#9C27B0, title="RSI")
hline(rsiOverbought, title="RSI Overbought Level", color=#E91E63, linestyle=hline.style_dashed)
hline(rsiOversold, title="RSI Oversold Level", color=#4CAF50, linestyle=hline.style_dashed)



Больше