В процессе загрузки ресурсов... загрузка...

Комбинированная долгосрочная стратегия RSI и MACD

Автор:Чао Чжан, Дата: 2024-05-17 11:04:03
Тэги:РСИMACD

img

Обзор

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

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

  1. Расчет показателя RSI для определения условий перекупления и перепродажи:
    • Когда RSI выше 70 и пересекает линию 70, генерируется сигнал продажи.
    • Когда RSI ниже 30 и пересекает линию 30, генерируется сигнал покупки
  2. Расчет индикатора MACD для определения направления тренда:
    • Когда быстрая линия MACD пересекает медленную линию, генерируется сигнал для закрытия короткой позиции.
    • Когда быстрая линия MACD пересекается ниже медленной линии, генерируется сигнал для закрытия длинной позиции
  3. Установка точки остановки потери:
    • Вычислить среднее изменение цены актива и взять половину его в качестве точки остановки потери

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

Преимущества стратегии

  1. Стратегия сочетает в себе подходы к перекупке/перепродаже и подходы к тренду, что позволяет ей вступать в начале переворота и своевременно выходить, когда формируется тенденция, эффективно избегая потерь, вызванных колебаниями рынка.
  2. Точка стоп-лосса устанавливается на основе характеристик волатильности актива, что помогает контролировать вывод средств и повышать эффективность капитала.
  3. Логика кода ясна и использует модульный подход к программированию, что облегчает понимание и оптимизацию.

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

  1. Выбор параметров RSI и MACD оказывает значительное влияние на эффективность стратегии, и оптимизация параметров может потребоваться для различных активов и временных рамок.
  2. При экстремальных рыночных условиях, таких как быстрые изменения, вызванные неожиданными событиями, стратегия может сильно снизиться.
  3. Стратегия может плохо работать на рынке с ограниченным диапазоном, что приводит к частым сделкам и высоким затратам на транзакции.

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

  1. Оптимизировать параметры RSI и MACD, чтобы найти наиболее подходящую комбинацию для текущего актива и временных рамок, повышая стабильность и рентабельность стратегии.
  2. Добавить больше условий фильтрации, таких как показатели объема и волатильности, чтобы уменьшить частоту торговли и улучшить качество сигнала.
  3. Ввести модуль управления позициями для динамической корректировки позиций на основе рыночных тенденций и результатов, контролируя заимствования.
  4. Сочетание с другими стратегиями, такими как следование тенденциям и изменение среднего значения, для формирования портфеля с несколькими стратегиями и повышения адаптивности.

Резюме

Эта стратегия использует RSI для определения условий перекупки и перепродажи и MACD для определения направления тренда, формируя полную длинно-короткую торговую систему. Логика стратегии ясна, и преимущества очевидны, в то время как есть также определенные риски.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="RSI & MACD Strategy", shorttitle="RSI & MACD", overlay=true)

// Définition des entrées
rsi_length = 14
rsi_overbought = 70
rsi_oversold = 30
macd_fast_length = 12
macd_slow_length = 26
macd_signal_length = 9

// Fonction pour calculer le RSI
calculate_rsi(source, length) =>
    price_change = ta.change(source)
    up = ta.rma(price_change > 0 ? price_change : 0, length)
    down = ta.rma(price_change < 0 ? -price_change : 0, length)
    rs = up / down
    rsi = 100 - (100 / (1 + rs))
    rsi

// Fonction pour calculer le MACD
calculate_macd(source, fast_length, slow_length, signal_length) =>
    fast_ma = ta.ema(source, fast_length)
    slow_ma = ta.ema(source, slow_length)
    macd = fast_ma - slow_ma
    signal = ta.ema(macd, signal_length)
    hist = macd - signal
    [macd, signal, hist]

// Calcul des indicateurs
rsi_value = calculate_rsi(close, rsi_length)
[macd_line, signal_line, _] = calculate_macd(close, macd_fast_length, macd_slow_length, macd_signal_length)

// Conditions d'entrée et de sortie
// Entrée en vente : RSI passe de >= 70 à < 70
sell_entry_condition = ta.crossunder(rsi_value, rsi_overbought)

// Sortie en vente : MACD fast MA croise au-dessus de slow MA
sell_exit_condition = ta.crossover(macd_line, signal_line)

// Entrée en achat : RSI passe de <= 30 à > 30
buy_entry_condition = ta.crossover(rsi_value, rsi_oversold)

// Sortie en achat : MACD fast MA croise en-dessous de slow MA
buy_exit_condition = ta.crossunder(macd_line, signal_line)

// Affichage des signaux sur le graphique
plotshape(series=sell_entry_condition, title="Sell Entry", location=location.belowbar, color=color.red, style=shape.triangleup, size=size.small)
plotshape(series=sell_exit_condition, title="Sell Exit", location=location.abovebar, color=color.green, style=shape.triangledown, size=size.small)
plotshape(series=buy_entry_condition, title="Buy Entry", location=location.abovebar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=buy_exit_condition, title="Buy Exit", location=location.belowbar, color=color.red, style=shape.triangledown, size=size.small)

// Entrées et sorties de la stratégie
if (sell_entry_condition)
    strategy.entry("Short", strategy.short)
    
if (sell_exit_condition)
    strategy.close("Short")

if (buy_entry_condition)
    strategy.entry("Long", strategy.long)
    
if (buy_exit_condition)
    strategy.close("Long")


Связанные

Больше