Стратегия длинных и коротких позиций, объединяющая RSI и MACD

RSI MACD
Дата создания: 2024-05-17 11:04:03 Последнее изменение: 2024-05-17 11:04:03
Копировать: 0 Количество просмотров: 778
1
Подписаться
1617
Подписчики

Стратегия длинных и коротких позиций, объединяющая RSI и MACD

Обзор

Эта стратегия объединяет два технических показателя: 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")