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


Дата создания: 2023-09-28 11:44:04 Последнее изменение: 2023-09-28 11:44:04
Копировать: 1 Количество просмотров: 780
1
Подписаться
1617
Подписчики

Обзор

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

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

Стратегия создает торговые сигналы на основе следующих индикаторов и условий:

  • 5-циклическая быстрая EMA: синяя линия
  • 10-циклическая медленная EMA: красная линия
  • 10-циклический RSI, применяемый к средней цене {\displaystyle {\mathcal {M}}} по цене закрытия + цене закрытия / 2
  • 14 циклов ADX

Сигналы входа в торговлю:

  • Перевернутый: когда быстрая EMA пересекает медленную EMA снизу, а линия RSI выходит из низкого и переходит через 50
  • Пустота: когда быстрая EMA проходит медленную EMA сверху вниз, а линия RSI пробивает 50 с высоты вниз
  • ADX > 25 - это время, необходимое для дополнительного отдыха.

Сигнал выхода:

  • Мобильный стоп, отслеживание стоп-дистанции на 150 пунктов, стоп-выигрыш на 400 пунктов
  • Новые сигналы привели к падению цен
  • Каждую пятницу вечером они полностью ликвидируют свои позиции.

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

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

Эта стратегия имеет следующие преимущества:

  1. Используя пересечение быстрой и медленной линий EMA в качестве основы для определения тренда, пересечение быстрой и медленной линий вверх указывает на поход в позивную тенденцию, а пересечение вниз - вниз, что позволяет идентифицировать изменения в тренде.

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

  3. Индекс ADX используется для определения существования реальной тенденции и эффективно отфильтровывает часть шума. Торговые сигналы рассматриваются только тогда, когда значение ADX больше 25, что гарантирует наличие четкой тенденции.

  4. Используйте мобильные стоп-стопы, чтобы максимизировать прибыль, контролируйте риск по гарантии стоп-стоп, отслеживайте стоп-стоп на 150 пунктов, стоп-стоп на 400 пунктов, чтобы постоянно отслеживать тренд.

  5. Каждую пятницу рынок закрывается, чтобы избежать рисков в выходные дни и сохранить регулярность операций.

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

Также существуют следующие риски:

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

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

  3. Индекс ADX определяет только то, есть ли тенденция. Время входа может быть неточным, можно рассмотреть возможность добавления других суждений или снижения условий фильтрации ADX.

  4. Настройки стоп-стоп могут быть слишком фиксированными и не могут адаптироваться к изменениям рынка, могут быть протестированы различные параметры или своевременно скорректированы для ручного вмешательства.

  5. Еженедельные обязательные позиции могут быть пропущены, и можно рассмотреть возможность корректировки на ежедневные закрытия или последующие изменения в условные позиции.

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

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

  1. Испытание различных комбинаций параметров средней линии для поиска оптимальной средней линии. Можно определить наклон средней линии.

  2. Попробуйте различные параметры RSI или комбинации с KDJ, чтобы еще больше оптимизировать решение о перекупке.

  3. Оптимизация параметров ADX, поиск более подходящих условий фильтрации ADX, повышение качества входа.

  4. Фиксированное количество точек для тестирования мобильных стоп-стоп и ATR в комбинации с динамическим отслеживанием стоп-стоп.

  5. Внедрение стратегии внутридневного прорыва в обратном направлении, вступление в игру после подтверждения тренда, можно рассматривать на 5-минутном или 15-минутном графике.

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

  7. Попытки машинного обучения автоматически оптимизируют параметры и обеспечивают адаптивность стратегии.

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

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

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

//@version=3
strategy("Hucklekiwi Pip - HLHB Trend-Catcher System", shorttitle="HLHB TCS", overlay=true,
  default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// -----------------------------------------------------------------------------
// HLHB Trend-Catcher System as described on BabyPips.com
//
// Strategy Author: Hucklekiwi Pip 
// Coded By: Backtest Rookies
// -----------------------------------------------------------------------------
//
// Refs:
//   - Original System: https://www.babypips.com/trading/forex-hlhb-system-explained
//   - Updated System: https://www.babypips.com/trading/forex-hlhb-system-20190311
//
//
// Description (From Hucklekiwi Pip)
// 
//   The HLHB System simply aims to catch short-term forex trends.
//   It is patterned after the Amazing Crossover System that Robopip once backtested.
//   In fact, it was one of his highest-scoring mechanical systems in 2014! 
//   The system can be applied to any pair, but since I’m into major pairs, 
//   I’m applying it to the 1-hour charts of EUR/USD and GBP/USD.
// -----------------------------------------------------------------------------
// STRATEGY REQUIREMENTS
// -----------------------------------------------------------------------------
//
// Setup
// -----
//  - EUR/USD 1-hour chart
//  - GBP/USD 1-hour chart
//  - 5 EMA: blue line
//  - 10 EMA: red line
//  - RSI (10) applied to the median price (HL/2)
//  - ADX (14)
//
// Entry
// -----
//  - BUY when the 5 EMA crosses above the 10 EMA from underneath and the RSI 
//    crosses above the 50.0 mark from the bottom.
//  - SELL when the 5 EMA crosses below the 10 EMA from the top and the RSI 
//    crosses below the 50.0 mark from the top.
//  - Make sure that the RSI did cross 50.0 from the top or bottom and not just 
//    ranging tightly around the level.
//  - ADX > 25 for Buy and Sells
//
// Exit
// ----
//  - Use a 50-pip trailing stop and a 200-pip profit target. This increases the 
//    chances of the system riding longer trends.
//  - Close the trade when a new signal materializes.
//  - Close all trades by the end of the week.
// 
// -----------------------------------------------------------------------------

// Strategy Varaibles
// -------------------
ema_fast_len = input(5, title='Fast EMA Length')
ema_slow_len = input(10 , title='Slow EMA Length')
rsi_len = input(10, title='Slow EMA Length')
session_end_hour = input(16, minval=0, maxval=23, title='Weekly Session End (Hour)')
session_end_minute = input(0, minval=0, maxval=59, title='Weekly Session End (Minute)')
// Targets taken from the update post which states 150 & 400 instead of 50 and 200.
profit_target = input(400, title='Profit Target (Pips/Points)')
trailing_stop_dist = input(150, title='Trailing Stop Distance (Pips/Points)')
adx_filt = input(true, title='User ADX Filter')
adx_min = input(25, minval=0, title='Minimum ADX Level')
adx_len = input(14, title="ADX Smoothing")
di_len = input(14, title="DI Length")

// Setup the Indicators
ema_fast = ema(close, ema_fast_len)
ema_slow = ema(close, ema_slow_len)
rsi_ind = rsi(close, rsi_len)

// ADX
adx_dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx_adx(dilen, adxlen) =>
	[plus, minus] = adx_dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[adx_sig, adx_plus, adx_minus] = adx_adx(di_len, adx_len)


// Strategy Logic
ema_long_cross = crossover(ema_fast, ema_slow)
ema_short_cross = crossunder(ema_fast, ema_slow)
rsi_long_cross = crossover(rsi_ind, 50)
rsi_short_cross = crossunder(rsi_ind, 50)
adx_check = adx_filt ? adx_sig >= adx_min : true

longCondition = ema_long_cross and rsi_long_cross and adx_check
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ema_short_cross and rsi_short_cross and adx_check
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("SL/TP", "Long", profit=profit_target,  loss=trailing_stop_dist, trail_points=trailing_stop_dist)  
strategy.exit("SL/TP", "Short", profit=profit_target, loss=trailing_stop_dist, trail_points=trailing_stop_dist)  

// Friday = 6
// If we miss the hour for some reason (due to strange timeframe), then close immediately
// Else if we are on the closing hour, then check to see if we are on or passed the close minute
close_time = dayofweek == 6 ? 
  hour[0] > session_end_hour ? true :
  hour[0] == session_end_hour ?
      minute[0] >= session_end_minute :
  false : false

strategy.close_all(when=close_time)

// Plotting
plot(ema_fast, color=blue, title="Fast EMA")
plot(ema_slow, color=red, title="Slow EMA")

plotshape(rsi_long_cross, style=shape.triangleup, size=size.tiny, location=location.belowbar, color=green, title='RSI Long Cross Marker')
plotshape(rsi_short_cross, style=shape.triangledown, size=size.tiny, location=location.abovebar, color=red, title='RSI Short Cross Marker')

// ADX Filter Highlight
bgcolor(adx_filt and adx_check ? orange : na, transp=90)