Эта стратегия разрабатывает автоматизированную торговую систему как для длинных, так и для коротких позиций на основе индикатора RSI. Она вступает в сделки, когда RSI показывает уровни перекупленности или перепроданности, и выходит со стоп-потерями, вызванными конкретными условиями.
Стратегия использует индикатор RSI для выявления условий рынка с перекупленностью / перепроданностью. В частности, когда RSI падает ниже линии перепроданности, он входит в длинные позиции; когда RSI превышает линию перекупленности, он входит в короткие позиции.
Кроме того, правила выхода устанавливаются в стратегии. После открытия длинных позиций, если RSI снова пересекает линию перекупленности, он запускает стоп-потери для закрытия длинных; аналогично, после открытия коротких позиций, если RSI снова пересекает линию перепроданности, он закрывает короткие.
Наибольшее преимущество этой стратегии заключается в использовании индикатора RSI для оценки сценариев перекупленности/перепроданности, который является относительно зрелым и надежным методом технического анализа в количественной торговле.
Кроме того, механизм стоп-лосса эффективно контролирует риск снижения во время сильных однонаправленных тенденций, что резко контрастирует с традиционными стратегиями, следующими за трендом, где бегуны могут легко попасть в беду.
Самый большой риск заключается в том, что индикатор RSI может иногда давать неправильные торговые сигналы. Ни один технический индикатор не может быть на 100% точным при прогнозировании движений рынка, включая RSI. Когда RSI делает неправильные суждения о состоянии перекупленности / перепроданности, это приведет к неправильным записям для стратегии.
Для смягчения такого риска в стратегию внедряются стоп-потери. Но вероятность того, что стоп-потери будут задействованы, все еще может быть высокой во время сильных тенденций, и для закрытия неправильных позиций потребуется ручное вмешательство.
Остается место для дальнейшей оптимизации:
Включить другие индикаторы для подтверждения сигналов входа и избежать ошибочных записей только из RSI.
Оптимизировать параметры RSI для поиска лучших значений длины для более точного обнаружения перекупленности/перепроданности.
Прямая настройка места остановки потери для сбалансирования между предотвращением потерь и предотвращением преждевременных выходов.
В целом, эта автоматизированная торговая стратегия, основанная на 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="")