
Эта стратегия основана на относительно сильной (RSI) индикаторной конструкции, используя принцип перекупа и перепродажи RSI для двухсторонних прорывных операций. При пересечении установленной линии перекупа на RSI, когда вы делаете больше, а при пересечении установленной линии перепродажи на RSI, когда вы делаете меньше, это типичная стратегия обратного трейдинга.
Параметры RSI рассчитываются в зависимости от пользовательских входных настроек, включая длину цикла RSI, превышение порога покупки и превышение порога продажи.
Определяя, находимся ли мы в зоне сверхпокупа или сверхпродажи, следует учитывать, что на кривой RSI соотношение между линией сверхпокупа и линией сверхпродажи.
Когда индикатор RSI пробивает соответствующую пониженную линию, он открывает позицию в противоположном направлении. Например, когда RSI пробивает линию сверхпокупа, он открывает позицию сверхпокупа, считая, что ситуация изменилась.
После открытия позиции, устанавливается стоп-стоп-линия. Следить за состоянием стоп-стоп-линия и при выполнении условий проводить плавание.
Эта стратегия также предлагает возможность использовать EMA в качестве фильтра. Для открытия позиции цена должна пробиться через EMA только в том случае, если RSI сделает дополнительный сигнал о закрытии.
Стратегия также предлагает возможность торговать только в определенный период времени. Пользователь может установить, что он будет торговать только в определенный период времени, а после этого он может выйти из позиции.
Решение риска:
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизируйте RSI, чтобы найти оптимальную комбинацию параметров различных разновидностей. Вы можете найти оптимальный предел перекупа и перепродажи, пройдя через отсчет.
Попробуйте заменить или объединить RSI с другими индикаторами, чтобы получить более сильный сигнал для оценки. Например, MACD, KD, BRI и т. Д.
Оптимизация стратегии стоп-стоп, повышение стабильности стратегии. Можно установить плавающий стоп в зависимости от рыночной волатильности, или с функцией отслеживания стоп-стоп.
Оптимизируйте параметры фильтра EMA или тестируйте другие индикаторы фильтра, чтобы избежать дополнительного зацепления.
Добавить модуль для определения тенденций, чтобы избежать обратного многоголового поведения или обратного многоголового поведения.
Тестирование параметров различных периодов торговли, чтобы определить, какие периоды подходят для стратегии, а какие следует избегать.
Общая концепция двухсторонней стратегии прорыва RSI ясна, она использует классический принцип RSI оперебойного перепродажи для обратного трейдинга. Можно использовать как возможности для обратного обращения в зоне оперебойного перепродажи, так и контролировать риск с помощью фильтрации EMA и стоп-стоп. Большое пространство для оптимизации параметров и оптимизации модулей позволяет создать более стабильную и надежную стратегию обратного обращения.
/*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)