Стратегия автоматической торговли, основанная на RSI

Автор:Чао Чжан, Дата: 2024-02-29 14:14:01
Тэги:

img

Обзор

Эта стратегия разрабатывает автоматизированную торговую систему как для длинных, так и для коротких позиций на основе индикатора RSI. Она вступает в сделки, когда RSI показывает уровни перекупленности или перепроданности, и выходит со стоп-потерями, вызванными конкретными условиями.

Логика стратегии

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

Кроме того, правила выхода устанавливаются в стратегии. После открытия длинных позиций, если RSI снова пересекает линию перекупленности, он запускает стоп-потери для закрытия длинных; аналогично, после открытия коротких позиций, если RSI снова пересекает линию перепроданности, он закрывает короткие.

Анализ преимуществ

Наибольшее преимущество этой стратегии заключается в использовании индикатора RSI для оценки сценариев перекупленности/перепроданности, который является относительно зрелым и надежным методом технического анализа в количественной торговле.

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

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

Самый большой риск заключается в том, что индикатор RSI может иногда давать неправильные торговые сигналы. Ни один технический индикатор не может быть на 100% точным при прогнозировании движений рынка, включая RSI. Когда RSI делает неправильные суждения о состоянии перекупленности / перепроданности, это приведет к неправильным записям для стратегии.

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

Руководство по оптимизации

Остается место для дальнейшей оптимизации:

  1. Включить другие индикаторы для подтверждения сигналов входа и избежать ошибочных записей только из RSI.

  2. Оптимизировать параметры RSI для поиска лучших значений длины для более точного обнаружения перекупленности/перепроданности.

  3. Прямая настройка места остановки потери для сбалансирования между предотвращением потерь и предотвращением преждевременных выходов.

Заключение

В целом, эта автоматизированная торговая стратегия, основанная на RSI, имеет преимущество в эффективном выявлении условий рынка с перекупленными и перепроданными. Вводя длинные и короткие позиции во время экстремальных уровней RSI, она направлена на получение прибыли от переворотов рынка. Механизм остановки потерь также помогает ограничить потери во время сильных однонаправленных тенденций. Однако риск неправильно оцененных сигналов RSI остается. Дальнейшая оптимизация подтверждающих индикаторов, параметров RSI и размещения остановки потерь может повысить рентабельность и контроль рисков стратегии.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - LONG SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows Buy and close Buy positions --------------- //

timebull = stratbull 
timebear = stratbear 

strategy.entry("Long", true, when = timebull and crossover(rsiVWAP, ovrsld), comment="")
strategy.close("Long", when = timebull and crossover(rsiVWAP, ovrbgt)[lateleave] or crossunder(rsiVWAP, ovrbgt), comment="")


Больше