Стратегия следования за трендом на основе Ренко и индекса относительной силы


Дата создания: 2024-02-04 15:49:19 Последнее изменение: 2024-02-04 15:49:19
Копировать: 1 Количество просмотров: 686
1
Подписаться
1617
Подписчики

Стратегия следования за трендом на основе Ренко и индекса относительной силы

Обзор

Стратегия объединяет два показателя - график Ренко и индекс относительной динамики (RVI) - с целью захвата большинства основных тенденций рынка.

Стратегический принцип

Стратегия использует 9-кратный ATR для построения RENKO, когда цена закрытия превышает предыдущую высокую точку RENKO, чтобы построить новую точку, цвет зеленый; когда цена закрытия ниже предыдущей низкой точки RENKO, чтобы построить новую точку, цвет красный.

RVI - показатель, используемый для определения относительной силы многоголовной силы и воздушной силы. Значение RVI колеблется между 0 и 1, выше 0,5 означает, что многоголовая сила сильнее воздушной силы; ниже 0,5 означает, что воздушная сила сильнее воздушной силы.

Комбинируя направление Ренко и индикатор РВИ, входя в соответствующую позицию с многоглавой или пустой головой.

Стратегические преимущества

  1. Renko старается изолировать себя от обычных колебаний рынка, обращая внимание только на более значительные ценовые изменения, чтобы избежать подтасовки.
  2. Индекс RVI определяет, когда произойдет обратный тренд, и замыкает торговые сигналы.
  3. В сочетании с двумя показателями, фильтрация позволяет эффективно улавливать основные тенденции рынка и отфильтровывать часть шума.

Анализ рисков

  1. Размер Renko напрямую влияет на частоту сделок, что приводит к упущенным возможностям, а слишком маленький Renko увеличивает частоту сделок и комиссионные.
  2. Неправильная настройка параметров RVI-индекса также может привести к пропущенному сигналу или увеличению ложного сигнала.
  3. Двойные фильтры могут пропустить определенные сигналы и не зафиксировать все события.

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

  1. Динамическая оптимизация размера Renko, чтобы она могла адаптироваться к рыночным колебаниям.
  2. Оптимизация параметров показателя RVI для поиска оптимальной точки равновесия.
  3. Попробуйте различные сорта и комбинации циклических параметров для оценки стабильности.

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

Стратегия объединяет преимущества двух различных типов индикаторов с целью уловить основные тенденции рынка. Высокая стабильность может быть достигнута путем оптимизации параметров Ренко и RVI. Однако ни одна модель не может быть совершенной, и неизбежно пропускать определенные сигналы.

Исходный код стратегии
/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Lancelot RR Strategy", overlay=false)
p=9
CO=close-open
HL=high-low
value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6
value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6
num=sum(value1,p)
denom=sum(value2,p)
RVI=denom!=0?num/denom:0
RVIsig=(RVI+ 2*RVI[1] + 2*RVI[2] + RVI[3])/6

rvicloselongcondition = crossunder(RVI, RVIsig)
rvicloseshortcondition = crossover(RVI, RVIsig)

plot(RVI,color=green,style=line,linewidth=1)
plot(RVIsig,color=red,style=line,linewidth=1)
bgcolor(rvicloseshortcondition ? green : na, transp = 75)
bgcolor(rvicloselongcondition ? red : na, transp = 75)

///Renko///
TF = input(title='TimeFrame', defval="D")
ATRlength = input(title="ATR length",  defval=9, minval=2, maxval=100)
SMAlength = input(title="SMA length",  defval=5, minval=2, maxval=100)
SMACurTFlength = input(title="SMA CurTF length",  defval=20, minval=2, maxval=100)

HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, atr(ATRlength))
SMA = request.security(syminfo.tickerid, TF, sma(close, SMAlength))
SMACurTF = sma(close, SMACurTFlength)

RENKOUP = na
RENKODN = na
H = na
COLOR = na
BUY = na
SELL = na
UP = na
DN = na
CHANGE = na

RENKOUP := na(RENKOUP[1]) ? ((HIGH+LOW)/2)+(ATR/2) : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? ((HIGH+LOW)/2)-(ATR/2) : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP-RENKODN : RENKOUP[1]-RENKODN[1]
COLOR := na(COLOR[1]) ? white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

if(not CHANGE and close >= RENKOUP[1]+H*3)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR*3
    RENKODN := RENKOUP[1]+ATR*2
    COLOR := lime
    SELL := 0
    BUY := BUY+3

if(not CHANGE and close >= RENKOUP[1]+H*2)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR*2
    RENKODN := RENKOUP[1]+ATR
    COLOR := lime
    SELL := 0
    BUY := BUY+2

if(not CHANGE and close >= RENKOUP[1]+H)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR
    RENKODN := RENKOUP[1]
    COLOR := lime
    SELL := 0
    BUY := BUY+1

if(not CHANGE and close <= RENKODN[1]-H*3)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR*3
    RENKOUP := RENKODN[1]-ATR*2
    COLOR := red
    BUY := 0
    SELL := SELL+3

if(not CHANGE and close <= RENKODN[1]-H*2)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR*2
    RENKOUP := RENKODN[1]-ATR
    COLOR := red
    BUY := 0
    SELL := SELL+2

if(not CHANGE and close <= RENKODN[1]-H)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR
    RENKOUP := RENKODN[1]
    COLOR := red
    BUY := 0
    SELL := SELL+1
    
plotshape(UP, style=shape.arrowup, location=location.bottom, size=size.normal)

renkolongcondition = UP
renkoshortcondition = DN

///Long Entry///
longcondition = UP
if (longcondition)
    strategy.entry("Long", strategy.long)
    
///Long exit///
closeconditionlong = rvicloselongcondition
if (closeconditionlong)
    strategy.close("Long")