Стратегия обратного движения индикатора RSI с двойной скользящей средней

Автор:Чао Чжан, Дата: 2023-11-10 18:01:09
Тэги:

img

Обзор

Эта стратегия сочетает в себе двойную скользящую среднюю, индекс относительной силы (RSI) и параболический SAR (PSAR) для определения точек переворота цены и принятия соответствующих решений о покупке и продаже.

Принципы

Стратегия в основном использует следующие технические показатели для определения точек переворота цен:

  1. Двойная скользящая средняя: вычисляется быстрая скользящая средняя (MA быстрая линия) и медленная скользящая средняя (MA медленная линия). Когда быстрая линия пересекает над медленной линией, это указывает на бычий рынок и идет на длинный. Когда быстрая линия пересекает ниже медленной линии, это указывает на медвежий рынок и идет на короткий.

  2. Индикатор RSI: RSI оценивает условия перекупа и перепродажи, рассчитывая среднюю прибыль и средний убыток за закрытие за определенный период времени.

  3. Индикатор PSAR: Параболический SAR указывает направление тренда.

  4. Индикатор ADX: ADX измеряет силу тренда, рассчитывая направленное движение.

Логика сигналов покупки и продажи выглядит следующим образом:

Сигнал покупки: быстрый MA пересекает более медленный MA, RSI ниже 30 (перепроданный), SAR-точки выше цены, ADX выше 20.

Сигнал продажи: быстрый MA пересекается ниже медленного MA, RSI выше 70 (перекупленный), SAR-точки ниже цены, ADX выше 20.

Когда появляется сигнал покупки или продажи, займите позицию с 10% собственного капитала соответственно.

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

  • Двойные МА определяют направление основного тренда, при этом RSI и SAR фильтруют ложные сигналы, которые могут точно идентифицировать точки перелома.

  • Объединение нескольких показателей предотвращает ошибочные сигналы от одного показателя.

  • Стоп-лосс позволяет избежать чрезмерных рисков.

  • Простая и понятная логика делает его легким в применении.

  • Это работает как для восходящего, так и для нисходящего тренда.

Риски и решения

  • У двойных МА может быть ложный прорыв.

  • Если RSI не настроен правильно, он может генерировать неправильные сигналы.

  • Приостановить торговлю, когда ADX ниже 20, чтобы избежать обратной торговли на безнаправленных рынках.

  • Установка строгого стоп-лосса может привести к ненужным потерям. Установка разумного стоп-лосса на основе волатильности рынка.

  • Высокая частота торговли.

Улучшение

  • Испытывайте различные периоды MA, чтобы найти оптимальную комбинацию.

  • Проверьте различные параметры RSI для лучшего определения перекупленности/перепроданности.

  • Добавьте другие индикаторы, такие как полосы Боллинджера, KDJ, чтобы обогатить логику.

  • Установите динамический стоп-лосс на основе различных продуктов и рынков.

  • Добавьте размеры позиций, чтобы лучше следить за тенденциями.

  • Проверить различные параметры ADX, чтобы найти лучшее значение для определения силы тренда.

  • Добавить функцию автоматической остановки.

Заключение

Эта стратегия определяет направление основного тренда с использованием двойных МА и использует RSI, SAR для дополнительной фильтрации сигналов. Она может эффективно определять точки обратного движения после оптимизации параметров и улавливать тенденции вокруг обратных движений. На практике важно управление рисками путем правильного стоп-лосса и постоянной оптимизации параметров. В целом стратегия сочетает в себе индикаторы с четкой логикой и легкой операцией, что делает ее надежной обратной торговой стратегией.


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

//@version=2
//Based on Senpai BO 3
strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
src = close

//psar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
psar = sar(start, increment, maximum)


//ADX Init
adxlen = input(30, title="ADX Smoothing")	
dilen = input(30, title="DI Length")	
dirmov(len) =>	
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]
	
adx(dilen, adxlen) => 	
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]
	
[sig, up, down] = adx(dilen, adxlen)	


// BB Init
source = close
length = input(50, minval=1)
mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50)
alertLevel=input(0.1)
impulseLevel=input(0.75)
showRange = input(false, type=bool)


//RSI CODE
up1 = rma(max(change(src), 0), 14)
down1 = rma(-min(change(src), 0), 14)
rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1))


//BB CODE
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05
bbi = bbr - nz(bbr[1]) 

//////////////////// Algo

//if (rsi>50 and n1>n2)
   //strategy.exit("Close", "Short")
  // strategy.entry("Long", strategy.long)
//if (rsi<50 and n2>n1)
   //strategy.exit("Close", "Long")
//   strategy.entry("Short", strategy.short)

//col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200  and rsi >= 60?red : silver
//short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close = 100%
//long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100%
short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close
long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close

//Entry

long = long1[1] == 0 and long1 == 1
short = short1[1] == 0 and short1 == 1
longclose = long[3] == 1
shortclose = short[3] == 1
strategy.entry("short", strategy.short,qty = 10, when=short)
strategy.entry("long", strategy.long,qty=10, when=long)
strategy.close("long",when=longclose)
strategy.close("short",when=shortclose)



/////////////////////
///PLOT

plot(long,"long",color=green,linewidth=1)
plot(short,"short",color=red,linewidth=1)
plot(longclose,"close",color=blue,linewidth=1)
plot(shortclose,"close",color=orange,linewidth=1)


//plot(short,"short",color=red,linewidth=1)
//

//strategy.exit(id="long",qty = 100000,when=longclose)
//strategy.exit(id="short",qty = 100000,when=shortclose)

//strategy.exit(id="Stop", profit = 20, loss = 100)

Больше