Esta estratégia determina a direção longa / curta julgando a direção das médias móveis exponenciais (EMA).
Se a EMA curta estiver acima da EMA longa, é um mercado de alta, caso contrário é um mercado de baixa.
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.
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.
O uso de EMAs duplas para determinar a estrutura do mercado pode julgar com precisão o status touro/urso.
O padrão de engulfamento mostra um impulso de um lado aumentando de repente, o que pode capturar tendências importantes.
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.
As EMAs duplas também podem julgar incorretamente a estrutura do mercado, perdendo assim tendências ou indo erroneamente longas.
Os padrões de absorção podem ser enganados por mercados variados.
Outros métodos de stop loss como break even podem ser testados.
Mais indicadores como MACD, A/D podem ser usados para determinar longo/curto.
Adicionar um preço de stop loss fixo moderado com base na necessidade.
Otimizar os períodos de EMA com base nas características do comércio de símbolos.
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")