Тенденция вследствие стратегии EMA и RSI

Автор:Чао Чжан, Дата: 2023-09-26 15:39:48
Тэги:

Обзор

Эта стратегия в полной мере использует скользящие средние и индекс относительной силы для выявления и отслеживания тенденций. Ей нужны только два индикатора для определения тенденции и нахождения правильного времени входа / выхода. Стратегия направлена на отслеживание средне- и долгосрочных ценовых тенденций при избежании краткосрочного рыночного шума.

Логика стратегии

Стратегия использует три EMA с различными периодами, причем EMA-A имеет самый короткий период, EMA-B средний и EMA-C самый длинный. Когда более короткая EMA-A пересекает выше более длинной EMA-B, она сигнализирует о восходящей тенденции, таким образом, длинный. И наоборот, когда EMA-A пересекает ниже EMA-B, она сигнализирует о нисходящей тенденции, таким образом, короткий. Чтобы отфильтровать ложные сигналы, она также использует самую длинную EMA-C - только с учетом входа после того, как цена нарушает EMA-C.

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

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

  • Использует силы EMA в определении тенденций
  • RSI помогает в сроках входа и выхода
  • Простая стратегия с двумя показателями
  • Настраиваемые параметры для настройки стиля стратегии
  • Прибыль на ранних, средних и поздних этапах тренда

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

  • Снижение основных трендов может вызвать ложные сигналы
  • Уязвимость к ударам на различных рынках
  • Неправильные параметры RSI могут привести к преждевременному выходу
  • Периоды EMA требуют тщательного выбора, слишком короткие могут быть чувствительны к шуму, слишком длинные могут пропустить тенденции

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

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

  • Оптимизировать параметры RSI для лучшего получения прибыли и контроля рисков
  • Испытать различные комбинации периодов EMA
  • Добавление объема или других подтверждающих показателей
  • Использование ATR для измерения размеров стоп-потери
  • Рассмотреть возможность сокращения размеров позиций в середине тренда
  • Оптимизируйте время входа с прорывами, объемом и т. Д.
  • Исследуйте механизмы повторного въезда

Резюме

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


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@author Alorse

//@version=5
// strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01)

// Bollinger Bands
len = input.int(14, minval=1, title='Length', group='RSI')
src = input.source(close, 'Source', group='RSI')
rsi = ta.rsi(src, len)

// Moving Averages
len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages')
out_a = ta.ema(close, len_a)
plot(out_a, title='EMA A', color=color.purple)

len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages')
out_b = ta.ema(close, len_b)
plot(out_b, title='EMA B', color=color.orange)

len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages')
out_c = ta.ema(close, len_c)
plot(out_c, title='EMA B', color=color.green)

// Strategy Conditions
stratGroup = 'Strategy'
showLong = input.bool(true, title='Long entries', group=stratGroup)
showShort = input.bool(false, title='Short entries', group=stratGroup)
closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup)
xBars = input.int(24, title='# bars')

entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open
exitLong = rsi > 70

entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open
exitShort = rsi < 30


bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1]
entry_price = ta.valuewhen(bought, open, 0)
var int nPastBars = 0
if strategy.position_size > 0
    nPastBars := nPastBars + 1
    nPastBars
if strategy.position_size == 0
    nPastBars := 0
    nPastBars
if closeAfterXBars
    exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong
    exitLong
    exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort
    exitShort

// Long Entry
strategy.entry('Long', strategy.long, when=entryLong and showLong)
strategy.close('Long', when=exitLong)

// Short Entry
strategy.entry('Short', strategy.short, when=entryShort and showShort)
strategy.close('Short', when=exitShort)



Больше