
RSI отклоняется от торговой стратегии, которая дает сигналы покупки и продажи, идентифицируя отклонение между RSI и ценовым движением. Эта стратегия одновременно имеет функции, такие как остановка, остановка и отслеживание остановки, что позволяет эффективно контролировать риск.
Стратегия использует отклонения от RSI для выявления торговых возможностей. В частности, стратегия сначала рассчитывает значение RSI в течение определенного периода, а затем рисует трендовую линию RSI. В то же время, стратегия также рисует трендовую линию цены.
Если идентифицировано, что RSI снижается, а цена снижается, то дается сигнал к покупке. Если идентифицировано, что RSI снижается, а цена снижается, то дается сигнал к продаже.
Кроме того, в стратегии также установлены функции остановки, остановки и отслеживания остановки. Остановка позволяет контролировать риск потери, остановка может блокировать прибыль, а отслеживание остановки позволяет продолжать прибыль. Эти настройки позволяют эффективно управлять риском для каждой сделки.
Такой способ отвлечения от RSI имеет следующие преимущества:
Раннее обнаружение ценовых поворотов может быть достигнуто, если отклонение от RSI будет зафиксировано.
RSI широко используется, и большинство торговых программ встроены в RSI.
Параметры RSI могут быть настроены гибко, в зависимости от наблюдательного цикла рынка.
В сочетании с параметрами Stop Loss, Stop Stop и Stop Loss Track, можно эффективно контролировать риск каждой сделки.
Стратегия торговли: используйте умеренную частоту сигналов, избегайте слишком интенсивной торговли.
Стратегическая концепция понятна и легко реализуется компьютерной программой.
Однако эта стратегия также несет в себе некоторые риски:
Отклонения от RSI не являются стопроцентно надежными и могут привести к появлению ложных сигналов. Необходимо сочетать фильтрующие сигналы с другими показателями.
В трендовых ситуациях RSI отклоняется от сигнала, который может не сработать, и его следует избегать.
Неправильная настройка параметров RSI также может повлиять на эффективность стратегии. Слишком короткая настройка цикла увеличивает частоту торговли и риск.
Стоп-стоп может быть слишком маленьким, что может привести к преждевременному прекращению; слишком большим стоп-стоп не удастся эффективно контролировать риск. Необходимо установить баланс.
Следить за остановкой может быть преждевременно при резких колебаниях цен. Необходимо установить разумную дистанцию слежения за остановкой в сочетании с рыночными колебаниями.
Соответствующие риски могут быть смягчены следующими мерами:
Добавление других показателей, таких как MACD, линия Блинна и т.д. для фильтрации сигналов, уменьшение ложного сигнала.
Применяйте эту стратегию только в случае, если рынок находится в состоянии колебаний, чтобы избежать явных тенденций.
Оптимизация параметров RSI, выбор оптимальной длины цикла. При этом тестирование параметров различных рынков.
Установление разумных стоп-позиций и остановок на основе исторических данных.
Стойкость отслеживания убытков корректируется в зависимости от рыночных колебаний и предпочтений в отношении риска.
Эта стратегия может быть оптимизирована в следующих аспектах:
Добавление других показателей для фильтрации торговых сигналов повышает их надежность.
Автоматическая оптимизация параметров RSI с использованием технологий машинного обучения.
Динамические алгоритмы построены в соответствии с различными моделями рыночных событий. Например, расширяется стоп-позиция при шокирующих событиях и сокращается стоп-позиция при трендовых событиях.
Дизайн алгоритма управления динамическими позициями, который корректирует размер позиции для каждой сделки в зависимости от таких факторов, как волатильность рынка.
Внедрение концепции волатильности при отслеживании стоп-ложа, установление отслеживаемой стоп-дальности в зависимости от интенсивности колебаний цены.
Попытка развернуть стратегию на другие виды рынков, такие как Forex и криптовалюты.
Создание системы количественного трейдинга, автоматизированного трейдинга для реализации стратегии.
Стратегия RSI отклоняется от торговли, чтобы создать торговый сигнал, захватывая отклонение между RSI и ценовым движением. Преимущество стратегии заключается в том, что она проста и понятна, и ее легко автоматизировать. В то же время, установка стоп-порогов и отслеживания стоп-порогов также позволяет эффективно контролировать риск. Однако у стратегии есть некоторые ограничения, требующие подтверждения сигналов в комбинации с несколькими индикаторами, и она не подходит для сильных тенденций.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 4h
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/
// © faytterro
//@version=5
// strategy("RSI Divergence Strategy", overlay=true, scale = scale.none)
rsilen=input.int(14, title="rsi length")
rsisrc=input(close, title="source")
x=ta.rsi(rsisrc,rsilen)
len=input.int(14, title="RSI Divergence length", maxval=500)
tpb = input.float(25, title="take profit", group = "buy", step = 0.5)
sb = input.float(5, title="stop", group = "buy", step = 0.5)
tsb = input.float(0.25, title="trailing stop", group = "buy", step = 0.5)
tps = input.float(25, title="take profit", group = "sell", step = 0.5)
ss =input.float(5, title="stop", group = "sell", step = 0.5)
tss = input.float(0.25, title="trailing stop", group = "sell", step = 0.5)
src=close
extrapolation=0
zoom=input.int(0, title="zoom", maxval=27, minval=-27)
hline(300-zoom*10, color=color.rgb(54, 58, 69, 100))
hline(10, color=color.rgb(54, 58, 69, 100))
// for ax+b
xo=0.0
yo=0.0
xyo=0.0
xxo=0.0
for i=0 to len-1
xo:= xo + i/(len)
yo:= yo + x[len-1-i]/(len)
xyo:= xyo + i*x[len-1-i]/(len)
xxo:= xxo + i*i/(len)
dnm=ta.lowest(low,200)
dizi=array.new_float(len*2+1+extrapolation)
// linedizi=array.new_line()
a=(xo*yo-xyo)/(xo*xo-xxo)
b=yo-a*xo
for i=0 to len-1+extrapolation
array.set(dizi,i,a*i+b)
//// for src
// for ax+b
xo2=0.0
yo2=0.0
xyo2=0.0
xxo2=0.0
for i=0 to len-1
xo2:= xo2 + i/(len)
yo2:= yo2 + src[len-1-i]/(len)
xyo2:= xyo2 + i*src[len-1-i]/(len)
xxo2:= xxo2 + i*i/(len)
dizi2=array.new_float(len*2+1+extrapolation)
// linedizi2=array.new_line()
a2=(xo2*yo2-xyo2)/(xo2*xo2-xxo2)
b2=yo2-a*xo2
for i=0 to len-1+extrapolation
array.set(dizi2,i,a2*i+b2)
ttk=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))? 1 :
((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))? -1 : 0
cg=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))// and ta.highest(ttk[1],len/2)<1)
cr=((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))// and ta.lowest(ttk[1],len/2)>-1)
bgcolor(color=(cg and ta.highest(ttk[1],len/2)<1)? color.rgb(76, 175, 79, 50) :
(cr and ta.lowest(ttk[1],len/2)>-1)? color.rgb(255, 82, 82, 50) : na, offset=0, display=display.none)
plot(x)
// for ax+b
xo3=0.0
yo3=0.0
xyo3=0.0
xxo3=0.0
for i=0 to len-1
xo3:= xo3 + i/(len)
yo3:= yo3 + x[len-1-i+(ta.barssince(cg))]/(len)
xyo3:= xyo3 + i*x[len-1-i+(ta.barssince(cg))]/(len)
xxo3:= xxo3 + i*i/(len)
dizi3=array.new_float(len*2+1+extrapolation)
// linedizi3=array.new_line()
a3=(xo3*yo3-xyo3)/(xo3*xo3-xxo3)
b3=yo3-a3*xo3
for i=0 to len-1+extrapolation
array.set(dizi3,i,a3*i+b3)
// for ax+b
xo4=0.0
yo4=0.0
xyo4=0.0
xxo4=0.0
for i=0 to len-1
xo4:= xo4 + i/(len)
yo4:= yo4 + x[len-1-i+(ta.barssince(cr))]/(len)
xyo4:= xyo4 + i*x[len-1-i+(ta.barssince(cr))]/(len)
xxo4:= xxo4 + i*i/(len)
dizi4=array.new_float(len*2+1+extrapolation)
// linedizi4=array.new_line()
a4=(xo4*yo4-xyo4)/(xo4*xo4-xxo4)
b4=yo4-a4*xo4
for i=0 to len-1+extrapolation
array.set(dizi4,i,a4*i+b4)
// line=line.new((last_bar_index-ta.barssince(cg)-len),
// array.get(dizi3,0),
// last_bar_index-ta.barssince(cg),
// array.get(dizi3,len-1), color=color.rgb(0,255,0), width=2)
// line2=line.new((last_bar_index-ta.barssince(cr)-len),
// array.get(dizi4,0),
// last_bar_index-ta.barssince(cr),
// array.get(dizi4,len-1), color=color.rgb(255, 0, 0, 0), width=2)
// line.delete(line[1])
// line.delete(line2[1])
alert=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)) and ta.highest(ttk[1],len/2)<1)
or ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)) and ta.lowest(ttk[1],len/2)>-1)
alertcondition(alert)
hline(50)
rs=hline(30)
rss=hline(70)
fill(rs, rss, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
longCondition = cg and ta.highest(ttk[1],len/2)<1
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("exit long", "Long", limit = close*(100+tpb)/100 , stop =close*(100-sb)/100 , trail_price = close , trail_offset = close*tsb)
shortCondition = cr and ta.lowest(ttk[1],len/2)>-1
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("exit short", "Short", limit = close*(100-tps)/100, stop = close*(100+ss)/100, trail_price = close , trail_offset = close*tss)