Стратегия выхода из двойного EMA

Автор:Чао Чжан, Дата: 2023-12-07 15:50:13
Тэги:

img

Обзор

Эта стратегия определяет длинный / короткий направление, судя по направлению экспоненциальных скользящих средних (EMA). Она идет длинный, когда есть бычий охватывающий шаблон и увеличенный объем торговли. Она закрывает позицию, когда направление EMA переворачивается или наблюдается медвежий охватывающий шаблон.

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

  1. Для определения рыночной тенденции используйте две EMA с различными параметрами.

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

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

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

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

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

  3. Не устанавливая цену стоп-лосса, а используя изменение структуры рынка для остановки потерь, можно уменьшить ненужное скольжение.

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

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

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

  3. Не имея стоп-лосс цены может привести к большим потерям.

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

  1. Для определения длинного/короткого можно использовать больше индикаторов, таких как MACD, A/D.

  2. Добавить умеренную фиксированную цену стоп-лосса на основе потребности.

  3. Оптимизировать периоды EMA на основе характеристик торговли символами.

Заключение

Логика стратегии ясна и легко понятна, используя EMA для определения структуры и охватывающих моделей для захвата прорыва. Ее преимущества - простая логика суждения и четкие торговые сигналы. Но существуют риски попадания в ловушку. Дальнейшая оптимизация может принести лучшую отдачу.


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

// @version=5
// # ========================================================================= #
// #                   |   STRATEGY  |
// # ========================================================================= #
strategy(
  title                           = "fpemehd Strategy001",
  shorttitle                      = "f_001",
  overlay                         =  true,
  default_qty_type                =  strategy.percent_of_equity, 
  default_qty_value               =  100, 
  initial_capital                 =  10000000, 
  currency                        =  currency.USD, 
  slippage                        =  0, 
  commission_type                 =  strategy.commission.cash_per_order, 
  commission_value                =  0.01, 
  process_orders_on_close         =  true)
// # ========================================================================= #
// #                   |   STRATEGY  |
// # ========================================================================= #


// Inputs
I_start_date = input (defval = timestamp("20 Jan 1990 00:00 +0900"))
I_finish_date = input(defval = timestamp("20 Dec 2030 00:00 +0900"))

I_short_ema = input.int(defval = 15 , title = "Short EMA", minval = 1 , maxval = 300 , step = 1)
I_long_ema = input.int(defval = 30 , title = "Long EMA", minval = 1 , maxval = 300 , step = 1)

I_body = input.float(defval = 1 , title = "Size of Body", minval = 1 , maxval = 5 , step = 0.1)

time_cond = true

// Calculate Engulfing Candles
C_uptrend = false
C_downtrend = false
C_ema_short = ta.ema(source = close, length = I_short_ema) 
C_ema_long = ta.ema(source = close, length = I_long_ema) 
C_uptrend := close > C_ema_short and C_ema_short > C_ema_long
C_downtrend := close < C_ema_short and C_ema_short < C_ema_long

C_pre_body = math.abs(open[1]-close[1])
C_pre_body_ratio = (math.abs(open[1]-close[1])) / (math.abs(high[1]-low[1])) * 100

C_now_body = math.abs(open-close)
C_now_body_ratio = (math.abs(open-close)) / (math.abs(high-low)) * 100

C_bullish_engulfing = (open[1] > close[1] and open <= close) and (low < low[1] and high > high[1])
C_bearish_engulfing = (open[1] < close[1] and open >= close) and (low < low[1] and high > high[1])
C_avoid_doge = (C_pre_body_ratio > I_body and C_now_body_ratio > I_body) ? true : false
C_volume_filter = volume > volume[1] * 1.2

// Signals
long_signal = C_uptrend and C_bullish_engulfing and C_avoid_doge and C_volume_filter
close_signal = C_downtrend or C_bearish_engulfing 


if long_signal and time_cond
    strategy.entry(id = "Long", direction = strategy.long)

if close_signal and time_cond
    strategy.close(id = "Long")



Больше