Estratégia de ruptura da dupla EMA

Autora:ChaoZhang, Data: 2023-12-07 15:50:13
Tags:

img

Resumo

Esta estratégia determina a direção longa / curta julgando a direção das médias móveis exponenciais (EMA).

Estratégia lógica

  1. Se a EMA curta estiver acima da EMA longa, é um mercado de alta, caso contrário é um mercado de baixa.

  2. Quando o mercado está em alta, se um padrão de engulfamento de alta aparece e o volume de negociação é 1,2 vezes maior do que a barra anterior, um sinal longo é acionado.

  3. Quando a tendência do mercado é invertida, ou seja, a EMA curta cruza abaixo da EMA longa, isso mostra o enfraquecimento do ímpeto dos touros e a posição existente deve ser fechada.

Análise das vantagens

  1. O uso de EMAs duplas para determinar a estrutura do mercado pode julgar com precisão o status touro/urso.

  2. O padrão de engulfamento mostra um impulso de um lado aumentando de repente, o que pode capturar tendências importantes.

  3. Ele tem um mecanismo de stop loss. Não estabelecendo o preço de stop loss, mas usando a reversão da estrutura de mercado para parar a perda, o deslizamento desnecessário pode ser reduzido.

Análise de riscos

  1. As EMAs duplas também podem julgar incorretamente a estrutura do mercado, perdendo assim tendências ou indo erroneamente longas.

  2. Os padrões de absorção podem ser enganados por mercados variados.

  3. Outros métodos de stop loss como break even podem ser testados.

Direcção de otimização

  1. Mais indicadores como MACD, A/D podem ser usados para determinar longo/curto.

  2. Adicionar um preço de stop loss fixo moderado com base na necessidade.

  3. Otimizar os períodos de EMA com base nas características do comércio de símbolos.

Conclusão

A lógica da estratégia é clara e fácil de entender, usando EMAs para determinar a estrutura e padrões de engulfamento para capturar a ruptura. Suas vantagens são lógica de julgamento simples e sinais de negociação claros.


/*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")



Mais.