
Стратегия VRSI и MARSI используют движущиеся средние для сглаживания RSI, реализуя двойную стратегию. Эта стратегия использует одновременно RSI цены и RSI объема сделок в сочетании с их движущимися средними для создания торговых сигналов.
Сначала стратегия рассчитывает 9-циклический RSI цены (RSI) и 9-циклический RSI объема торгов (VRSI). Затем рассчитывается 5-циклическая простая скользящая средняя этих двух RSI (MARSI и MAVRSI).
Торговые сигналы генерируются на основе индикатора MARSI. Когда MARSI повышается, то делается больше, когда MARSI снижается, то делается меньше. Кроме того, индикатор MAVRSI используется для оценки рыночной силы и возможных изменений тенденций.
Например, в случае с многоголовым движением, если цены продолжают расти, но объем торгов снижается, это указывает на то, что многоголовые силы могут ослабевать, и следует готовиться к ликвидации. Наоборот, в случае с пустым головой, если цены продолжают снижаться, но объем торгов увеличивается, что указывает на усиление пустой головы, можно продолжать держать билеты.
Эта стратегия в сочетании с движущимися средними двумя показателями RSI позволяет эффективно улавливать тенденции, а также использовать изменения в объеме сделок для оценки рыночной силы, чтобы избежать подтасовки. По сравнению с одним показателем RSI, эта стратегия позволяет более точно понять рыночный ритм.
Использование движущихся средних также позволяет отфильтровать часть шума, что делает сигнал более надежным. Кроме того, настройка различных параметров, таких как циклы RSI и циклы движущихся средних, также позволяет оптимизировать стратегию.
Основным риском данной стратегии является вероятность отклонения между двумя показателями. Когда происходит отклонение между ценой и объемом сделок, торговые сигналы также становятся менее надежными. В этом случае требуется искусственное суждение о взаимосвязи между показателями.
Еще один риск заключается в том, что при свертывании легко поддается на подгонку. Когда цена свертывается в горизонтальном направлении, индикатор RSI легко колеблется вверх и вниз, вызывая ненужные торговые сигналы. В этом случае необходимо скорректировать параметры или судить об абсолютном положении индикатора.
Эта стратегия может быть оптимизирована в следующих аспектах:
Настройка параметров RSI и скользящей средней для поиска оптимального сочетания параметров
Добавление дополнительных условных суждений при создании торговых сигналов, например, более высокая надежность обратного сигнала, вызванного индикатором RSI в зоне перекупа и перепродажи
Добавление стратегии остановки, установка движущейся остановки или остановки индикатора
В сочетании с другими показателями, такими как форма K-линии, показатель волатильности и т. д. для избежания зацепления
Стратегия VRSI и MARSI успешно объединяют RSI-индикаторы цены и объема сделок, и сравнение и суждение между двумя показателями позволяет повысить точность и рентабельность сигналов. Оптимизированная параметровая настройка и стоп-стратегия также обеспечивают возможность ее стабильной работы. В целом, стратегия использует комбинацию между показателями и получает лучшую производительность, чем один RSI.
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("VRSI-MARSI Strategy", shorttitle="(V/MA)RSI Str.", overlay=false, default_qty_type=strategy.percent_of_equity, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0, default_qty_value=5, initial_capital=100)
// RSI(close, ="RSI") and RSI(Volume, ="VRSI")
src = close, len = input(9, minval=1, title="Length RSI")
src2 = volume, len2 = input(9, minval=1, title="Length VRSI)")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
up2 = rma(max(change(src2), 0), len2)
down2 = rma(-min(change(src2), 0), len2)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))
// MA(=Moving Average) of RSI(close, ="MARSI") and RSI(Volume, ="MAVRSI")
len3 = input(5, minval=1, title="Length MARSI")
marsi = sma(rsi, len3)
len4 = input(5, minval=1, title="Length MAVRSI")
marsi2 = sma(rsi2, len4)
// Plot:
// Default plot of RSI and VRSI: not visible but can be made visible
// Default plot MARSI and MAVRSI: visible
p1 = plot(rsi, linewidth=2, transp=100, color=color.yellow, title="RSI")
p2 = plot(rsi2, linewidth=2, transp=100, color=color.orange, title="VRSI")
m1 = plot(marsi, color=(marsi>=0 ? (marsi[1] < marsi ? color.yellow : color.blue) : (marsi[1] < marsi ? color.yellow : color.blue) ), linewidth = 2, transp = 0, title="MARSI")
m2 = plot(marsi2, color=color.orange, linewidth = 2, transp = 0, title="MAVRSI")
// Color fill:
// Default color fill "RSI - VRSI": not visible but can be made visible
// Default color fill "MARSI - MAVRSI": visible
fill(p1,p2, color = rsi>rsi2 ? color.green : color.red, transp=100, title="BG RSI-VRSI")
fill(m1,m2, color = marsi>marsi2 ? color.green : color.red, transp=75, title="BG MARSI-MAVRSI")
// Lines:
h2=hline(20, color=color.green, linestyle=hline.style_dotted, title="Extreme Oversold Rsi")
h3=hline(30, color=color.black, linestyle=hline.style_dotted, title="Oversold Rsi")
h5=hline(50, color=color.yellow, linestyle=hline.style_dashed, title="Middle line")
h7=hline(70, color=color.black, linestyle=hline.style_dotted, title="Overbought Rsi")
h8=hline(80, color=color.red, linestyle=hline.style_dotted, title="Extreme Overbought Rsi")
// Color fill between Lines "20-30" and "70-80" represents the crossing of "MARSI" and "MAVRSI":
fill(h2, h3, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="20-30 BG color X MARSI/MAVRSI")
fill(h7, h8, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="70-80 BG color X MARSI/MAVRSI")
///Long Entry///
longCondition = marsi > marsi[1]
if (longCondition)
strategy.entry("Long", strategy.long)
///Long exit///
Xlong =input(true)
closeConditionLong = marsi < marsi[1] and Xlong
if (closeConditionLong)
strategy.close("Long")
///Short Entry///
shortCondition = marsi < marsi[1]
if (shortCondition)
strategy.entry("Short", strategy.short)
///Short exit///
Xshort =input(true)
closeConditionShort = marsi > marsi[1] and Xshort
if (closeConditionShort)
strategy.close("Short")