Стратегия торговли по дивергенции RSI


Дата создания: 2023-10-25 16:47:14 Последнее изменение: 2023-10-25 16:47:14
Копировать: 0 Количество просмотров: 846
1
Подписаться
1617
Подписчики

Стратегия торговли по дивергенции RSI

Обзор

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

Принципы

Стратегия использует отклонения от RSI для выявления торговых возможностей. В частности, стратегия сначала рассчитывает значение RSI в течение определенного периода, а затем рисует трендовую линию RSI. В то же время, стратегия также рисует трендовую линию цены.

Если идентифицировано, что RSI снижается, а цена снижается, то дается сигнал к покупке. Если идентифицировано, что RSI снижается, а цена снижается, то дается сигнал к продаже.

Кроме того, в стратегии также установлены функции остановки, остановки и отслеживания остановки. Остановка позволяет контролировать риск потери, остановка может блокировать прибыль, а отслеживание остановки позволяет продолжать прибыль. Эти настройки позволяют эффективно управлять риском для каждой сделки.

Преимущества

Такой способ отвлечения от RSI имеет следующие преимущества:

  1. Раннее обнаружение ценовых поворотов может быть достигнуто, если отклонение от RSI будет зафиксировано.

  2. RSI широко используется, и большинство торговых программ встроены в RSI.

  3. Параметры RSI могут быть настроены гибко, в зависимости от наблюдательного цикла рынка.

  4. В сочетании с параметрами Stop Loss, Stop Stop и Stop Loss Track, можно эффективно контролировать риск каждой сделки.

  5. Стратегия торговли: используйте умеренную частоту сигналов, избегайте слишком интенсивной торговли.

  6. Стратегическая концепция понятна и легко реализуется компьютерной программой.

Риск

Однако эта стратегия также несет в себе некоторые риски:

  1. Отклонения от RSI не являются стопроцентно надежными и могут привести к появлению ложных сигналов. Необходимо сочетать фильтрующие сигналы с другими показателями.

  2. В трендовых ситуациях RSI отклоняется от сигнала, который может не сработать, и его следует избегать.

  3. Неправильная настройка параметров RSI также может повлиять на эффективность стратегии. Слишком короткая настройка цикла увеличивает частоту торговли и риск.

  4. Стоп-стоп может быть слишком маленьким, что может привести к преждевременному прекращению; слишком большим стоп-стоп не удастся эффективно контролировать риск. Необходимо установить баланс.

  5. Следить за остановкой может быть преждевременно при резких колебаниях цен. Необходимо установить разумную дистанцию слежения за остановкой в сочетании с рыночными колебаниями.

Соответствующие риски могут быть смягчены следующими мерами:

  1. Добавление других показателей, таких как MACD, линия Блинна и т.д. для фильтрации сигналов, уменьшение ложного сигнала.

  2. Применяйте эту стратегию только в случае, если рынок находится в состоянии колебаний, чтобы избежать явных тенденций.

  3. Оптимизация параметров RSI, выбор оптимальной длины цикла. При этом тестирование параметров различных рынков.

  4. Установление разумных стоп-позиций и остановок на основе исторических данных.

  5. Стойкость отслеживания убытков корректируется в зависимости от рыночных колебаний и предпочтений в отношении риска.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Добавление других показателей для фильтрации торговых сигналов повышает их надежность.

  2. Автоматическая оптимизация параметров RSI с использованием технологий машинного обучения.

  3. Динамические алгоритмы построены в соответствии с различными моделями рыночных событий. Например, расширяется стоп-позиция при шокирующих событиях и сокращается стоп-позиция при трендовых событиях.

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

  5. Внедрение концепции волатильности при отслеживании стоп-ложа, установление отслеживаемой стоп-дальности в зависимости от интенсивности колебаний цены.

  6. Попытка развернуть стратегию на другие виды рынков, такие как Forex и криптовалюты.

  7. Создание системы количественного трейдинга, автоматизированного трейдинга для реализации стратегии.

Подвести итог

Стратегия 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)