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

Автор:Чао Чжан, Дата: 2023-11-16 16:28:22
Тэги:

img

Обзор

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

Принципы

Эта стратегия сначала рассчитывает индикаторы RSI на нескольких временных отрезках (1-минутный, 5-минутный, 15-минутный и т. Д.).

После этого все скользящие средние показатели RSI из разных временных рамок объединяются в два сигнала - быстрая линия и медленная линия.

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

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

  1. Объединение нескольких временных рамок может сгладить кривые цен и эффективно избежать ложных прорывов.

  2. RSI указывает на уровни перекупленности/перепроданности, избегая погони за новыми максимумами/низкими значениями.

  3. Двойные скользящие средние имеют лучший эффект удержания, чем одна система скользящих средних.

  4. Использование VMA вместо SMA уменьшает влияние краткосрочных колебаний.

Риски

  1. Стратегии с несколькими временными рамками требуют широкой настройки параметров, неправильные настройки могут привести к отсутствию хороших записей или поздним записям.

  2. Движущиеся средние имеют плохое соответствие кривой, плохо работают в поворотные моменты тренда.

  3. Дивергенция RSI происходит часто, следует следить за сигналами отмены.

Решения: оптимизировать параметры временных рамок; комбинировать с другими индикаторами, такими как MACD, для определения тенденций; следить за дивергенционными сигналами RSI.

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

  1. Оптимизируйте количество временных рамок и параметров, чтобы лучше отслеживать тенденции.

  2. Подумайте о том, чтобы добавить стоп-лосс для контроля рисков.

  3. Объединяйте другие показатели для лучшего принятия решений о тенденциях и расхождениях.

  4. Испытать различные параметры периода хранения для наилучшего эффекта хранения.

Заключение

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


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="RSI multitimeframe SMA crossover", shorttitle="RSI multitimeframe strategy", default_qty_type= strategy.percent_of_equity, margin_long=50, default_qty_value=150)

res1 = input(title="Res 01", type=input.resolution, defval="1")
res2 = input(title="Res 0", type=input.resolution, defval="5")
res3 = input(title="Res 1", type=input.resolution, defval="15")
res4 = input(title="Res 2", type=input.resolution, defval="15")
res5 = input(title="Res 3", type=input.resolution, defval="15")
res6 = input(title="Res 4", type=input.resolution, defval="30")
res7 = input(title="Res 5", type=input.resolution, defval="45")
res8 = input(title="Res 6", type=input.resolution, defval="60")



lengthRSI = input(15, minval=1)
lengthMA = input(15, minval=1)
lengthFMA = input(100, minval=1)
lengthFMA2 = input(150, minval=1)
Long_yes = input(defval=1, title="Long trades 0 or 1", minval=0, maxval=1)
Short_yes = input(defval=0, title="Short trades 0 or 1", minval=0, maxval=1)
src = close

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"



// stop loss 
longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 
   0.01
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)

shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 
   0.01
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


rsi1 = rsi(src, lengthRSI)
MA1 = vwma(rsi1, lengthMA)






outD1 = security(syminfo.tickerid, res1, MA1)
outD2 = security(syminfo.tickerid, res2, MA1)
outD3 = security(syminfo.tickerid, res3, MA1)
outD4 = security(syminfo.tickerid, res4, MA1)
outD5 = security(syminfo.tickerid, res5, MA1)
outD6 = security(syminfo.tickerid, res6, MA1)
outD7 = security(syminfo.tickerid, res7, MA1)
outD8 = security(syminfo.tickerid, res8, MA1)




//plot_d0 = outD0
//plot_d1 = outD1
//plot_d2 = outD2
//plot_d3 = outD3
//plot_d4 = outD4
//plot_d5 = outD5
//plot_d6 = outD6

out_multi = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA)
out_multi2 = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA2)
//out_multi1 = outD2+outD3+outD4
//out_multi2 = outD4+outD5+outD6

//col0 = outD0 < 20 ? color.lime : outD0 > 80 ? color.red : color.blue
//col1 = outD1 < 20 ? color.lime : outD1 > 80 ? color.red : color.blue
//col2 = outD2 < 20 ? color.lime : outD2 > 80 ? color.red : color.blue
//col3 = outD3 < 20 ? color.lime : outD3 > 80 ? color.red : color.blue
//col4 = outD4 < 20 ? color.lime : outD4 > 80 ? color.red : color.blue
//col5 = outD5 < 20 ? color.lime : outD5 > 80 ? color.red : color.blue
//col6 = outD6 < 20 ? color.lime : outD6 > 80 ? color.red : color.blue


// plot(plot_d0,linewidth=2, color=col0)
// plot(plot_d1, linewidth=2, color=col1)
// plot(plot_d2,linewidth=2, color=col2)
// plot(plot_d3,linewidth=2, color=col3)
// plot(plot_d4,linewidth=2, color=col4)
// plot(plot_d5,linewidth=2, color=col5)
// plot(plot_d6,linewidth=2, color=col6)

long=(out_multi/8)
short=(out_multi2/8)

plot(long, linewidth=1, color=color.green)
plot(short, linewidth=1, color=color.red)

long1=crossover(long,short)
short1=crossunder(long,short)

h0 = hline(65, "Upper Band", color=color.red, linestyle=hline.style_solid, linewidth=2 )
h1 = hline(35, "Lower Band", color=color.green, linestyle=hline.style_solid, linewidth=2)


strategy.entry("buy", strategy.long, when=long1 and window() and Long_yes > 0) 
if strategy.position_size > 0
    strategy.exit(id="XL STP", stop=longStopPrice)
strategy.close("buy",when=short1 )

strategy.entry("sell", strategy.short, when=short1 and window() and Short_yes > 0) 
if strategy.position_size < 0
    strategy.exit(id="XS STP", stop=shortStopPrice)
strategy.close("buy",when=long1 )



Больше