Эта стратегия основана на индикаторе относительной силы (RSI) и использует принципы перекупленности / перепроданности RSI для совершения сделок. Она длинна, когда RSI превышает порог перекупленности, и коротка, когда RSI превышает порог перепроданности.
Установка параметров индикатора RSI на основе данных пользователя, включая период RSI, порог перекупления и порог перепродажи.
Определить, находится ли RSI в зоне перекупа или перепродажи на основе его положения относительно порогов.
Когда RSI выходит из зоны перекупленности/перепроданности и пересекает соответствующую пороговую линию, совершайте сделки в противоположном направлении. Например, когда RSI выходит за пределы линии перекупленности из зоны перекупленности, рынок считается перевернутым, идите в длинный на этот момент. Когда RSI выходит за пределы линии перепроданности из зоны перепроданности, рынок считается перевернутым, идите в короткий здесь.
После входа, установите стоп-лосс и возьмите линию прибыли.
Стратегия также предусматривает возможность использования EMA в качестве фильтра. Принимать торговые сигналы только тогда, когда оба сигнала RSI и прорыв цены против направления EMA выполнены.
Он также позволяет торговать только в определенные временные рамки.
Использует классические принципы прорыва RSI с хорошими результатами обратных тестов.
Гибкое установление порога перекупки/перепродажи, подходящего для разных продуктов.
Факультативный EMA-фильтр позволяет избежать чрезмерных сделок.
Поддерживает SL/TP для повышения стабильности.
Поддерживает фильтр временных рамок, чтобы избежать неподходящего периода.
Поддерживает как длинный, так и короткий, чтобы полностью использовать двусторонние колебания цен.
Дивергенция RSI происходит часто, основываясь только на RSI может генерировать неточные сигналы. Необходимо сочетание с трендом, скользящими средними и т. Д.
Неправильное установление порога приводит к слишком частым или отсутствующим сделкам.
Плохие настройки SL/TP вызывают чрезмерную агрессивность или консервативность.
Неправильные настройки фильтра EMA могут пропустить действительные сделки или отфильтровать хорошие сигналы.
Решения рисков:
Оптимизировать параметры RSI для различных продуктов.
Сочетание с индикаторами тенденции для выявления расхождений.
Испытать и оптимизировать параметры SL/TP.
Тестировать и оптимизировать параметры EMA.
Стратегия может быть улучшена в следующих аспектах:
Оптимизировать параметры RSI для поиска оптимальных настроек для различных продуктов с помощью исчерпывающего обратного тестирования.
Попробуйте использовать различные индикаторы в сочетании с RSI или заменить их, чтобы получить более надежные сигналы, например, MACD, KD, Bollinger Bands и т.д.
Оптимизируйте стоп-лосс и используйте стратегии получения прибыли для повышения стабильности.
Оптимизируйте параметры фильтра EMA или экспериментируйте с другими фильтрами, чтобы лучше избежать ударов.
Добавить модули фильтра тренда, чтобы избежать торговли против основного тренда.
Проверьте различные временные рамки, чтобы найти лучшие торговые сессии для этой стратегии.
Стратегия реверсионного прорыва RSI имеет четкую логику, основанную на классических принципах перекупленности/перепроданности. Она направлена на захват среднего реверсия в крайних условиях с надлежащими фильтрами контроля риска. Есть хороший потенциал превратить ее в стабильную стратегию с помощью настройки параметров и модульных улучшений. Стоит оптимизировать и применять в живой торговле.
/*backtest start: 2023-10-08 00:00:00 end: 2023-11-07 00:00:00 period: 1h basePeriod: 15m 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/ // © REV0LUTI0N //@version=4 strategy("RSI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash) // Strategy Backtesting startDate = input(timestamp("2021-10-01T00:00:00"), type = input.time, title='Backtesting Start Date') finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date') time_cond = true // Strategy Length = input(12, minval=1) src = input(close, title="Source") overbought = input(70, minval=1) oversold = input(30, minval=1) xRSI = rsi(src, Length) rsinormal = input(true, title="Overbought Go Long & Oversold Go Short") rsiflipped = input(false, title="Overbought Go Short & Oversold Go Long") // EMA Filter noemafilter = input(true, title="No EMA Filter") useemafilter = input(false, title="Use EMA Filter") ema_length = input(defval=15, minval=1, title="EMA Length") emasrc = input(close, title="Source") ema = ema(emasrc, ema_length) plot(ema, "EMA", style=plot.style_linebr, color=#cad850, linewidth=2) //Time Restriction Settings startendtime = input("", title='Time Frame To Enter Trades') enableclose = input(false, title='Enable Close Trade At End Of Time Frame') timetobuy = (time(timeframe.period, startendtime)) timetoclose = na(time(timeframe.period, startendtime)) // Stop Loss & Take Profit % Based enablesl = input(false, title='Enable Stop Loss') enabletp = input(false, title='Enable Take Profit') stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100 takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100 longStop = strategy.position_avg_price * (1 - stopTick) shortStop = strategy.position_avg_price * (1 + stopTick) shortTake = strategy.position_avg_price * (1 - takeTick) longTake = strategy.position_avg_price * (1 + takeTick) plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL") plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL") plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit") plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit") // Alert messages message_enterlong = input("", title="Long Entry message") message_entershort = input("", title="Short Entry message") message_closelong = input("", title="Close Long message") message_closeshort = input("", title="Close Short message") // Strategy Execution if (xRSI > overbought and close > ema and time_cond and timetobuy and rsinormal and useemafilter) strategy.entry("Long", strategy.long, alert_message = message_enterlong) if (xRSI < oversold and close < ema and time_cond and timetobuy and rsinormal and useemafilter) strategy.entry("Short", strategy.short, alert_message = message_entershort) if (xRSI < oversold and close > ema and time_cond and timetobuy and rsiflipped and useemafilter) strategy.entry("Long", strategy.long, alert_message = message_enterlong) if (xRSI > overbought and close < ema and time_cond and timetobuy and rsiflipped and useemafilter) strategy.entry("Short", strategy.short, alert_message = message_entershort) if (xRSI > overbought and time_cond and timetobuy and rsinormal and noemafilter) strategy.entry("Long", strategy.long, alert_message = message_enterlong) if (xRSI < oversold and time_cond and timetobuy and rsinormal and noemafilter) strategy.entry("Short", strategy.short, alert_message = message_entershort) if (xRSI < oversold and time_cond and timetobuy and rsiflipped and noemafilter) strategy.entry("Long", strategy.long, alert_message = message_enterlong) if (xRSI > overbought and time_cond and timetobuy and rsiflipped and noemafilter) strategy.entry("Short", strategy.short, alert_message = message_entershort) if strategy.position_size > 0 and timetoclose and enableclose strategy.close_all(alert_message = message_closelong) if strategy.position_size < 0 and timetoclose and enableclose strategy.close_all(alert_message = message_closeshort) if strategy.position_size > 0 and enablesl and time_cond strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong) if strategy.position_size < 0 and enablesl and time_cond strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort) if strategy.position_size > 0 and enabletp and time_cond strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong) if strategy.position_size < 0 and enabletp and time_cond strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)