Стратегия торговли средней реверсией RSI

Автор:Чао Чжан, Дата: 2023-11-01 16:15:30
Тэги:

img

Обзор

Эта стратегия использует индикатор RSI для выявления тенденций и условий перекупа / перепродажи. В сочетании с EMA для определения текущего направления тренда, он открывает обратные позиции, когда направление тренда соответствует сигналам RSI для реализации средней реверсионной торговли.

Логика стратегии

  1. Используйте индикатор EMA для определения текущего направления тренда. Выше EMA определяет восходящий тренд, а ниже EMA определяет нисходящий.

  2. Используйте индикатор RSI для выявления условий перекупа/перепродажи.

  3. При восходящем тренде и RSI ниже 40 запускается сигнал покупки.

  4. При запуске сигналов покупки/продажи цены на получение прибыли и стоп-лосс устанавливаются на основе определенного процента от входной цены.

  5. При размерах позиций больше 0, распоряжение на получение прибыли размещается.

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

  1. Стратегия разумно объединяет EMA и RSI для выявления тенденций и условий перекупа/перепродажи, избегая торговли против тенденций.

  2. Средний подход реверсии использует краткосрочные ротации прибыли.

  3. Точки получения прибыли и остановки потерь помогают зафиксировать прибыль и контролировать риски.

  4. Простая и понятная логика, легкая для понимания и реализации, подходящая для новичков.

  5. Параметры, такие как период EMA и RSI, могут быть оптимизированы для различных продуктов и рыночных условий.

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

  1. Риск неудачной реверсии. Краткосрочная реверсия может потерпеть неудачу, что приведет к потерям.

  2. Риск неясного тренда: EMA может не определить четкую тенденцию на различных рынках, создавая неверные сигналы.

  3. Риск, вызванный стоп-лосом. Стоп-лосс, установленный слишком близко, может быть неожиданно вызван.

  4. Превышение риска. Чрезмерная оптимизация исторических данных может не применяться для торговли в реальном времени.

  5. Высокий риск частоты торговли.Слишком частые торговли влекут за собой значительные затраты на транзакции.

Улучшение

  1. Оптимизируйте параметры EMA и RSI, чтобы найти лучшую комбинацию с помощью обратного тестирования.

  2. Добавьте фильтры, чтобы избежать неправильных сигналов в диапазоне рынка.

  3. Оптимизируйте соотношение прибыль/стоп-потеря, чтобы закрепить прибыль.

  4. Добавьте правила размещения позиций, такие как фиксированная доля, чтобы контролировать однократные убытки.

  5. Для улучшения точности сигнала комбинировать другие индикаторы, такие как MACD, KD или использовать многовариантные модели.

  6. Проверка на реальных данных и постоянная оптимизация для последних рыночных условий.

Заключение

Эта стратегия реализует краткосрочный средний реверсионный подход, основанный на EMA и RSI, с четкой логикой определения тренда и обнаружения перекупленного / перепроданного. Она устанавливает получение прибыли и остановку убытков для контроля рисков, получая прибыль от краткосрочных ротаций. Простота и ясность являются ее преимуществами. Дальнейшие оптимизации могут привести к хорошим результатам бэкстеста.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-10-31 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Sarahann999
//@version=5
strategy("RSI Strategy", shorttitle="RSI", overlay= false)

//Inputs
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')
emaSettings = input(100, 'EMA Length')
ema = ta.ema(close,emaSettings)
rsi = ta.rsi(close,14)

//Conditions
uptrend = close > ema
downtrend = close < ema
OB = rsi > 60
OS = rsi < 40
buySignal = uptrend and OS and strategy.position_size == 0
sellSignal = downtrend and OB and strategy.position_size == 0

//Calculate Take Profit Percentage
longProfitPerc = input.float(title="Long Take Profit", group='Take Profit Percentage',
     minval=0.0, step=0.1, defval=1) / 100
shortProfitPerc = input.float(title="Short Take Profit",
     minval=0.0, step=0.1, defval=1) / 100

// Figure out take profit price 1
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Make inputs that set the stop %  1
longStopPerc = input.float(title="Long Stop Loss", group='Stop Percentage',
     minval=0.0, step=0.1, defval=1.5) / 100
shortStopPerc = input.float(title="Short Stop Loss",
     minval=0.0, step=0.1, defval=1.5) / 100

// Figure Out Stop Price
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)

// Submit entry orders
if buySignal and long_entry
    strategy.entry(id="Long", direction=strategy.long, alert_message="Enter Long")
    
if sellSignal and short_entry
    strategy.entry(id="Short", direction=strategy.short, alert_message="Enter Short")
    
//Submit exit orders based on take profit price
if (strategy.position_size > 0)
    strategy.exit(id="Long TP/SL", limit=longExitPrice, stop=longStopPrice, alert_message="Long Exit 1 at {{close}}")
if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", limit=shortExitPrice, stop=shortStopPrice, alert_message="Short Exit 1 at {{close}}")
    
//note: for custom alert messages to read, "{{strategy.order.alert_message}}" must be placed into the alert dialogue box when the alert is set.

plot(rsi, color= color.gray)
hline(40, "RSI Lower Band")
hline(60, "RSI Upper Band")

Больше