RSI Динамическая стратегия стоп-лосса и прибыли

Автор:Чао Чжан, Дата: 2024-03-19 15:54:01
Тэги:

img

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

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

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

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

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

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

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

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

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

Резюме: Динамическая стратегия СТОП-ЛОСС и ТЕК-ПРОФИТ получает прибыль своевременно в начале тренда, используя расхождение между индикатором СТОП-ЛОСС и ценой в сочетании с изменениями объема торговли, устанавливая при этом динамические стоп-потери для контроля риска. Преимущества этой стратегии заключаются в том, что она может зафиксировать прибыль в начале переворота тренда, уменьшить выводы стратегии и обладает определенной адаптивностью. Однако на боковом рынке стратегия может генерировать больше ложных сигналов, поэтому необходимо внедрить другие технические индикаторы и оптимизировать пороги получения прибыли и стоп-потери для улучшения эффективности стратегии. Кроме того, добавление управления позициями и оптимизация параметров также являются важными направлениями для дальнейшего улучшения стабильности и прибыли стратегии.


/*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")

Больше