Стратегия следования за трендом для пересечений RSI и MA


Дата создания: 2024-02-20 15:31:15 Последнее изменение: 2024-02-20 15:31:15
Копировать: 1 Количество просмотров: 850
1
Подписаться
1617
Подписчики

Стратегия следования за трендом для пересечений RSI и MA

Обзор

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

Стратегический принцип

Стратегия использует две средние линии МА 12 и 26 циклов. Когда 12-циклическая быстрая линия пересекает 26-циклическую медленную линию, считается, что рынок входит в восходящую тенденцию; когда быстрая линия пересекает медленную линию, считается, что рынок входит в нисходящую тенденцию.

В то же время, стратегия вводит показатель RSI для определения зоны перекупа и перепродажи. Только тогда, когда RSI выше своей собственной 26-циклической средней линии, она открывает позицию на пересечении золота на средней линии; только тогда, когда RSI ниже своей собственной 26-циклической средней линии, она открывает позицию на пересечении смерти на средней линии. Это позволяет избежать принудительного открытия позиции в случае перекупа или перепродажи, что позволяет контролировать риск.

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

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

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

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

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

Направление оптимизации

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

  1. Тестируйте комбинацию средних линий МА различных периодов, чтобы найти средние параметры, которые лучше соответствуют текущим характеристикам.

  2. Тестирование различных циклических параметров RSI, различных условий фильтрации, оптимизация времени входа в игру.

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

  4. Оптимизация стратегии стоп-ложа, контроль риска при одновременном отслеживании тенденции. Стоп-ложа, такие как стоп-ложа, стоп-ложа и динамические стоп-ложа, могут быть протестированы.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(false,"UseStopLoss")
//rsiLong = true
rsi1 = rsi(close, 14)

window() => true

stopLoss = input(20, title = "Stop loss percentage(0.1%)")
//stopLoss = input(200, title = "Stop loss percentage(0.1%)")

maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 12, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 26, title = "Slow MA Period", minval = 1)

maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

//12 and 26=9%; 3 and8=2%; 26 and 55=2%; when selling on a cross under
//maFastRSI = ema(rsi1, 12)
//maSlowRSI = ema(rsi1, 26)

fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50)


longEMA = crossover(maFast, maSlow)
exitLong = crossunder(maFast, maSlow) // 5% in 2018
//exitLong = crossunder(close, maFast) // 15% in 2018
//exitLong = crossunder(rsi1, maFastRSI) // 13%

shortEMA = crossover(maSlow, maFast)
exitShort = crossover(maFast, maSlow)

//if (rsi1 < ema(rsi1,7))
//rsiLong = false

//if (longEMA and (rsi1 >= highest(rsi1,10)))
//if (longEMA)
if (longEMA and (rsi1 > ema(rsi1,26)))  //RSI ema values optimal from 19 to 35
    strategy.entry("LongId", strategy.long, when=window())

//strategy.close_all(when = rsi1 > 60) // 80=26%, 90=n/a, 70=15%, 60=16% long only
//strategy.close_all(when = (shortEMA and (rsi1 <= ema(rsi1,26)))) //10% gain in 2018 long only
//strategy.close_all(when = (rsi1 <= ema(rsi1,120))) //26=17% 14=2% 42=15%
//strategy.close_all(when = (shortEMA)) // 5% gain in 2018 long only
//strategy.close_all(when = exitLong) 

//if (shortEMA and not(rsiLong))
//if (shortEMA)
if (shortEMA and (rsi1 <= ema(rsi1,26)))
    strategy.entry("ShortId", strategy.short, when=window())

if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)