Торговая стратегия с отсрочкой RSI использует обычный RSI-индикатор для выявления перекупа и перепродажи и откладывает вход через определенный период после появления сигнала входа, чтобы избежать ненужных потерь от ложного прорыва. Основная идея этой стратегии заключается в том, чтобы использовать RSI-индикатор для определения перекупа и перепродажи на рынке и на основе этого определения получить более точное время входа через отсрочку входа.
Эта стратегия использует RSI длиной 21 цикла для определения перекупа и перепродажи. Когда RSI пересекает линию перекупа, установленную пользователем (по умолчанию 60), считается перекуп; когда RSI пересекает линию перепродажи, установленную пользователем (по умолчанию 40), считается перепродажа.
После появления сигнала перекупа и перепродажи, стратегия не сразу вступает в игру, а начинает рассчитывать цикл задержки. Когда количество циклов задержки (по умолчанию 15 циклов) будет удовлетворено, затем в соответствии с сигналом перекупа сделайте пустоту, а сигнал перепродажи сделайте больше.
Эта стратегия позволяет пользователям корректировать количество циклов задержки, чтобы реализовать различные входные моменты. Чем дольше цикл задержки, тем больше ложных прорывов можно избежать, но также можно пропустить лучшую точку входа.
Кроме того, в стратегии также реализованы такие опции, как остановка, остановка и обратная торговля. Пользователи могут выбрать, как управлять позициями в виде фиксированного остановки, отслеживания остановки, фиксированной остановки и т. Д. Также можно выбрать логику обратной торговли, то есть делать больше, а не больше, в соответствии с сигналом перекупа.
Используйте RSI, чтобы определить, есть ли у вас перепродажи, чтобы точно уловить возможности для обратного пути. RSI является более зрелым индикатором перепродажи, который может эффективно идентифицировать возможности для обратного пути.
Механизм задержки входа позволяет избежать убытков, вызванных ложными прорывами. Многие прорывы не обязательно представляют собой существенный поворот, задержка входа может подтвердить эффективность прорыва.
Возможность корректировки циклов задержки, чтобы точно определить время входа. Пользователи могут корректировать циклы задержки в зависимости от характеристик разных сортов, чтобы достичь оптимальной точки входа.
Осуществление стоп-лосса, стоп-менеджмента, контролируемый риск. Политика предоставляет несколько стоп-лосса, которые могут быть использованы в сочетании с отсрочкой входа в игру для управления риском.
Предоставление реверсивной торговой опции, адаптированной к различным характеристикам разновидностей. Пользователи могут выбрать позитивную или реверсивную логику торговли, чтобы схуднуть неопределенность.
Риск, что RSI выдаст ложный сигнал. RSI сигналы не всегда работают, и в некоторых рыночных ситуациях могут быть ошибочные сигналы.
Слишком большая задержка рискует пропустить время входа. Слишком длинная задержка может пропустить лучшую точку.
Обратная торговля увеличивает риск потерь. Обратная торговля, хотя и может покрыть неопределенность, может также увеличить общие потери.
Следующий стоп подвергается риску. Следующий стоп может быть слишком близко к текущей цене, когда цена резко меняется, и цена может пробиться сквозной.
Ориентировочная остановка не должна приводить к недостаточной прибыли. Фиксированная остановка не может обеспечить максимальную прибыль, и для ее установки необходима разумная прогнозная оценка.
В связи с вышеуказанными рисками рекомендуется:
В сочетании с другими показателями фильтрации RSI сигналов, повышение надежности. Например, KDJ, MACD и другие показатели.
Для определения оптимальных параметров задержки цикла, исходя из исторических данных тестирования различных сортов, не следует делать обобщений.
Осторожно используйте функцию обратного трейдинга, предпочтительно в сочетании с трендовым трейдингом и т.д.
При отслеживании стоп-лосов устанавливайте более широкие интервалы, чтобы избежать слишком близкого приближения к текущей цене.
Тестирование различных стоп-множеств для определения оптимальных параметров. Также можно рассматривать динамические стопы.
Эта стратегия может быть улучшена в следующих аспектах:
В сочетании с различными индикаторами фильтруют входные сигналы. Например, KDJ, MACD и другие индикаторы в сочетании с RSI могут создать более надежный торговый сигнал.
Динамическая коррекция циклов задержки. Можно динамически изменять количество циклов задержки в зависимости от степени волатильности рынка, а также повышать точность входа, гарантируя избежать ложных прорывов.
Оптимизация стратегии стоп-стоп. Можно изучить динамические стоп-стоп, стоп-стоп доходности, стоп-стоп времени и т. Д., Чтобы стоп-стоп-стоп был более соответствующим рыночным колебаниям.
В сочетании с трендовыми факторами. Можно определить, соответствует ли направление прорыва направлению большого тренда, чтобы избежать обратной торговли. Можно также скорректировать количество задержек циклов в зависимости от силы прорыва.
Используя машинное обучение для поиска оптимальных комбинаций параметров. С помощью большого количества обучения и обратной связи с данными, машинное обучение может автоматически настраивать параметры для получения оптимальных комбинаций параметров.
В целом, в этой стратегии все еще есть много возможностей для оптимизации, что позволяет сделать стратегию более стабильной и надежной с помощью комбинации показателей, динамического дифференцирования и определения тенденций. Применение машинного обучения также является возможным направлением оптимизации в будущем.
Отсрочка стратегии RSI overall Использование показателя RSI для определения перепродажи и отсрочки повторного входа в определенный цикл после появления сигнала может эффективно предотвратить ненужные потери от ложного прорыва. Эта стратегия имеет преимущества, такие как точность определения показателя, отсрочка входа в рынок, чтобы избежать ложного прорыва, можно регулировать цикл отсрочки и реализовать управление стоп-стоп. Но также существуют риски, такие как ненадежность сигнала RSI, отсрочка слишком много пропущенных возможностей.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
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/
// © tweakerID and © BacktestRookies
// This strategy uses a 21 period RSI with an overbought (RSI indicator
// is greater than) level of 60 (user defined) to determines long entries and an oversold
// (RSI indicator is less than) level of 40 (user defined) for shorts. It introduces a bar delay that starts
// counting when the RSI < Oversold or RSI > Overbought conditions are true, delaying the entry with
// the amount of bars determined by the user. The trading logic can be reversed, which seems to work better.
//@version=4
strategy("Delayed RSI Strategy",
overlay=false,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=10000,
commission_value=0.04,
calc_on_every_tick=false,
slippage=0)
direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all :
(direction < 0 ? strategy.direction.short : strategy.direction.long))
// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1]
or strategy.position_size < strategy.position_size[1]
/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")
rsiLen=input(21, title="RSI Length")
i_OB = input(60, title="Overbought")
i_OS = input(40, title="Oversold")
i_delay = input(15, title="Entry Delay (# of Bars)")
i_Close= input(false, title="Use Strategy Close")
/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")
// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
TS=input(false, title="Use Trailing Stop")
i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=3, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(3, step=.1, title="ATR Multiple")
i_TPRRR = input(2, step=.1, title="Take Profit Risk Reward Ratio")
DPR=input(false, "Allow Direct Position Reverse")
reverse=input(true, "Reverse Trades")
// Swing Points Stop and Take Profit
SwingStopProfit() =>
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na
entry_HH_price = strategy.position_size < 0 ? HH_price : na
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR
[entry_LL_price, entry_HH_price, tp, stp]
// ATR Stop
ATRStop() =>
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR
[LongSL_ATR_price, ShortSL_ATR_price, ATRtp, ATRstp]
// Strategy Stop
StrategyStop(bought) =>
float LongStop = na
float ShortStop = na
float StratTP = na
float StratSTP = na
[LongStop, ShortStop, StratTP, StratSTP]
//TrailingStop
TrailingStop(SL,SSL) =>
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
-strategy.position_avg_price
trailOffset = strategy.position_avg_price - SL
var tstop = float(na)
if strategy.position_size > 0
tstop := high- trailOffset - dif
if tstop<tstop[1]
tstop:=tstop[1]
else
tstop := na
StrailOffset = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0
and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
Ststop := low+ StrailOffset + Sdif
if Ststop>Ststop[1]
Ststop:=Ststop[1]
else
Ststop := na
[tstop, Ststop]
//Stop Loss & Take Profit Switches
SLTPLogic(LongStop, ShortStop, StratTP, StratSTP, LongSL_ATR_price, ShortSL_ATR_price, ATRtp, ATRstp,
entry_LL_price, entry_HH_price, tp, stp) =>
SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP
[SL, SSL, TP, STP]
/////////////////////// STRATEGY LOGIC /////////////////////////////////////////
rsi = rsi(close, rsiLen)
isOB= rsi > i_OB
isOS= rsi < i_OS
BarsSinceOB = barssince(not isOB)
BarsSinceOS = barssince(not isOS)
BUY = BarsSinceOS == i_delay
SELL = BarsSinceOB == i_delay
/////////////////////// FUNCTION CALLS /////////////////////////////////////////
// Stops and Profits
[entry_LL_price, entry_HH_price, tp, stp] = SwingStopProfit()
[LongSL_ATR_price, ShortSL_ATR_price, ATRtp, ATRstp] = ATRStop()
[LongStop, ShortStop, StratTP, StratSTP] = StrategyStop(bought)
[SL, SSL, TP, STP] = SLTPLogic(LongStop, ShortStop, StratTP, StratSTP,
LongSL_ATR_price, ShortSL_ATR_price, ATRtp, ATRstp, entry_LL_price, entry_HH_price, tp, stp)
[tstop, Ststop] = TrailingStop(SL,SSL)
// Entries
if reverse
if not DPR
strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
else
strategy.entry("long", strategy.long, when=SELL)
strategy.entry("short", strategy.short, when=BUY)
else
if not DPR
strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
else
strategy.entry("long", strategy.long, when=BUY)
strategy.entry("short", strategy.short, when=SELL)
// Exits
if i_SL
strategy.exit("TP & SL", "long", limit=TP, stop=TS? tstop : SL)
strategy.exit("TP & SL", "short", limit=STP, stop=TS? Ststop : SSL)
if i_Close
strategy.close_all(when=cross(rsi, 50))
/////////////////////// PLOTS //////////////////////////////////////////////////
//Plots
rsiplot = plot(rsi, "RSI", color=#7E57C2)
band1 = hline(i_OB, "Upper Band", color=#787B86)
bandm = hline(50, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(i_OS, "Lower Band", color=#787B86)
fill(band1, band0, color=color.rgb(126, 87, 194, 90), title="Background")
plot(rsi, "RSI", color=#7E57C2)
// OSOBCount = plot(isOB ? BarsSinceOB : isOS ? BarsSinceOS : na, transp=100)
// OSOBColor = color.from_gradient(isOB ? BarsSinceOB : BarsSinceOS, 0, 20, color.black, isOB ? color.red : isOS ? color.green : na)
// OBP = plot(rsi > i_OB ? rsi : na, color=color.white, display=display.none)
// fill(plot(i_OB, display=display.none), OBP, color=OSOBColor, transp=0, fillgaps=false)
// OSP = plot(rsi < i_OS ? rsi : na, color=color.white, display=display.none)
// fill(plot(i_OS, display=display.none), OSP, color=OSOBColor, transp=0, fillgaps=false)
// plotshape(BUY ? 1 : na, style=shape.arrowdown, location=location.bottom,
// color=color.green, title="Bullish Setup", size=size.normal)
// plotshape(SELL ? 1 : na, style=shape.arrowup, location=location.top,
// color=color.red, title="Bearish Setup", size=size.normal)