Стратегия RSI с динамическим стоп-лоссом и тейк-профитом


Дата создания: 2024-03-19 15:54:01 Последнее изменение: 2024-03-19 15:54:01
Копировать: 1 Количество просмотров: 623
1
Подписаться
1617
Подписчики

Стратегия RSI с динамическим стоп-лоссом и тейк-профитом

Описание стратегии: Основная идея стратегии состоит в том, чтобы использовать характеристики RSI, связанные с перекупкой и перепродажей, в сочетании с изменениями цены и объема сделок, чтобы своевременно остановить в случае отклонения от RSI, а также контролировать риск с помощью динамического остановки.

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

  1. Вычислить значение RSI и определить порог перекупа и перепродажи на основе введенных параметров.
  2. Сравнение текущего значения RSI с значениями RSI на предыдущих нескольких линиях K позволяет определить, появилась ли верхняя форма ((isPeak) или нижняя форма ((isBottom) [2].
  3. При появлении верховой формы, если текущая цена выше, чем высота предыдущей вершины, и объем сделки меньше, чем объем сделки предыдущей вершины, то создается сигнал продажи.
  4. При появлении нижней формы, если текущая цена ниже низкой точки предыдущего нижнего уровня, а объем сделки меньше объема сделки предыдущего нижнего уровня, то создается сигнал покупки.
  5. После того, как сигнал покупки был активирован, он останавливается, когда цена возвращается к предыдущему минимуму или когда объем сделки меньше предыдущего минимума.
  6. После того, как сигнал продажи был активирован, цена была остановлена, когда она поднялась до предыдущего пика или когда объем сделки был меньше предыдущего пика.
  7. После открытия позиции, цена стоп-лосса устанавливается на определенную долю от цены открытия позиции ((2%)), чтобы контролировать риск.

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

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

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

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

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

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

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

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

//@version=4
strategy("RMM_byMR", overlay=true)

// RSI uzunluğu girişi
rsiLength = input(14, title="RSI Uzunluğu")

// Tepe ve dip seviyeleri için girişler
overboughtLevel = input(70, title="Aşırı Alım Seviyesi")
oversoldLevel = input(30, title="Aşırı Satım Seviyesi")

// RSI hesaplama
rsiValue = rsi(close, rsiLength)

// Son tepe noktalarını tespit etme // Son dip noktalarını tespit etme
isPeak = rsiValue[2] > overboughtLevel and rsiValue[2] > rsiValue[1] and rsiValue[2] > rsiValue[3] and (rsiValue[1] > rsiValue or rsiValue[3] > rsiValue[4])
isBottom = rsiValue[2] < oversoldLevel and rsiValue[2] < rsiValue[1] and rsiValue[2] < rsiValue[3] and (rsiValue[1] < rsiValue or rsiValue[3] < rsiValue[4])

// Önceki tepe noktalarını tespit etme
prevPeak = valuewhen(isPeak, rsiValue[2], 1)
prevPeakHighPrice = valuewhen(isPeak, high[2], 1)
volumePeak = valuewhen(isPeak, volume[1]+volume[2]+volume[3], 1)
prevPeakBarIndex = valuewhen(isPeak, bar_index, 1)

// Önceki dip noktalarını tespit etme
prevBottom = valuewhen(isBottom, rsiValue[2], 1)
prevBottomLowPrice = valuewhen(isBottom, low[2], 1)
volumeBottom = valuewhen(isBottom, volume[1]+volume[2]+volume[3], 1)
prevBottomBarIndex = valuewhen(isBottom, bar_index, 1)

// Tepe noktasında satış sinyali
isSellSignal = prevPeakBarIndex > prevBottomBarIndex and isPeak and rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice and (volume[1]+volume[2]+volume[3]) < volumePeak
isBuyTakeProfit = isPeak and ((rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice) or (rsiValue[2] < prevPeak and (volume[1]+volume[2]+volume[3]) < volumePeak))

// Dip noktasında alış sinyali
isBuySignal = prevBottomBarIndex > prevPeakBarIndex and isBottom and rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice and (volume[1]+volume[2]+volume[3]) < volumeBottom
isSellTakeProfit = isBottom and ((rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice) or (rsiValue[2] > prevBottom and (volume[1]+volume[2]+volume[3]) < volumeBottom))

sellTakeProfit = valuewhen(isSellTakeProfit, low, 1)
buyTakeProfit = valuewhen(isBuyTakeProfit, high, 1)

// isSellTakeProfit koşulu için işaretlemeyi yap
plotshape(isSellTakeProfit, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small, title="Sell Take Profit", offset=-2) 

// isBuyTakeProfit koşulu için işaretlemeyi yap
plotshape(isBuyTakeProfit, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small, title="Buy Take Profit", offset=-2)

buyComment = "Buy \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n Low:" + tostring(round(low[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2))
sellComment = "Sell \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n High:" + tostring(round(high[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2)) 

// Alış sinyali durumunda uzun pozisyon aç
if (isBuySignal)
    strategy.entry("Buy", strategy.long, comment = buyComment )
    strategy.exit("SL", "Buy", stop=close * 0.98)

// Satış sinyali durumunda kısa pozisyon aç
if (isSellSignal)
    strategy.entry("Sell", strategy.short, comment = sellComment )
    strategy.exit("SL","Sell", stop=close * 1.02)
// Limit değerini sonradan belirleme


// Alış sinyali durumunda uzun pozisyon kapat
if (isBuyTakeProfit)
    strategy.close("Buy", comment="TP")

// Satış sinyali durumunda kısa pozisyon kapat
if (isSellTakeProfit)
    strategy.close("Sell", comment="TP")