Длинные и короткие двунаправленные торговые стратегии на основе MACD и RSI


Дата создания: 2023-10-09 15:33:17 Последнее изменение: 2023-10-09 15:33:17
Копировать: 0 Количество просмотров: 701
1
Подписаться
1617
Подписчики

Обзор

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

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

  1. Вычислить быструю ЭМА (на 12-й линии) и медленную ЭМА (на 26-й линии)
  2. Вычислить MACD отклонение от сближения ((быстрая EMA минус медленная EMA)
  3. Вычислить 9-дневную подвижную среднюю MACD в качестве сигнальной линии
  4. Расчет 14-дневного RSI
  5. Если MACD <-0.1, RSI <27 и быстрая EMA ниже, чем медленная EMA, сделайте больше
  6. Продолжайте позицию, когда MACD> 0.125, RSI> 81 и быстрая EMA выше медленной EMA
  7. Настройка остановок, остановок и перемещения остановок для управления позициями

Анализ преимуществ

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

Анализ рисков

  1. Двусторонние сделки требуют дополнительных средств для обеспечения требований по гарантии
  2. В случае резкого переворота ситуация может привести к потере свободных позиций.
  3. Неправильная настройка параметров может привести к слишком частым сделкам

Решение риска:

  1. Достаточная финансовая поддержка, контроль над размером позиций
  2. Разумная установка остановочного расстояния, чтобы избежать слишком интенсивного остановки
  3. Оптимизация параметров, снижение частоты торгов

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

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

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

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

Исходный код стратегии
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Revision:        290
// Author:          @Hugo_Moriceau
//study("Moriceau_Crypto_strategies_Long_short_indicator_thesis",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Moriceau_Crypto_strategies_Long_short_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)

dataB = macd < -0.1  and rsi<27 and fastMA < slowMA
// data1 = macd > 0.125  and rsi>81 and fastMA> slowMA
dataS = macd > 0.125 and rsi > 81 and fastMA > slowMA

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
Achat = macd < -0.1  and rsi < 27 and fastMA < slowMA ? true : false
vente = macd > 0.125 and rsi > 81 and fastMA > slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = vente ? Achat ? false : true : Achat ? true : false

// === Plot Setting ===

plot(fastMA,color=red)
plot(slowMA,color=blue)
barcolor(color=iff(fastMA > slowMA, yellow, na))
barcolor(color=iff(fastMA < slowMA, black, na))
//barcolor(color=iff(macd > 0.12*close , fuchsia, na))
//barcolor(color=iff(macd < -0.1*close , lime, na))
plotchar(dataB, char='B',color=black,size = size.auto,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.auto,location = location.abovebar,transp= 0)

//fast = plot(maFast, title = "FastMA", color = yellow, linewidth = 2, style = line, transp = 50)
//slow = plot(maSlow, title = "SlowMA", color = black, linewidth = 2, style = line, transp = 50)

// === BACKTEST RANGE ===
FromMonth = input(defval = 05, title = "From Month", minval = 1)
FromDay   = input(defval = 23, title = "From Day", minval = 1)
FromYear  = input(defval = 2021, title = "From Year", minval = 2017)
ToMonth   = input(defval = 5, title = "To Month", minval = 1)
ToDay     = input(defval = 25, title = "To Day", minval = 1)
ToYear    = input(defval = 2021, title = "To Year", minval = 2017)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 2500, title = "Take Profit", minval = 28)
inpStopLoss     = input(defval = 600, title = "Stop Loss", minval = 15)
inpTrailStop    = input(defval = 300, title = "Trailing Stop Loss", minval = 5)
inpTrailOffset  = input(defval = 50, title = "Trailing Stop Loss Offset", minval = 1)

// === RISK MANAGEMENT VALUE PREP ===

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Achat", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "TP 50% Sell", when = exitLong()) // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Vente", long = false, when = enterShort())
strategy.close(id = "Vente", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Vente", from_entry = "Vente", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Short", from_entry = "Achat", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)