Esta estrategia determina la dirección larga/corta al juzgar la dirección de las medias móviles exponenciales (EMA). Se hace larga cuando hay un patrón alcista y un volumen de operaciones ampliado. Cierra la posición cuando la dirección de las EMA se invierte o se produce un patrón bajista.
Utilice dos EMA con parámetros diferentes para determinar la tendencia del mercado. Si la EMA corta está por encima de la EMA larga, es un mercado alcista, de lo contrario es un mercado bajista.
Cuando el mercado es alcista, si aparece un patrón alcista y el volumen de negociación es 1,2 veces mayor que el bar anterior, se activa una señal larga.
Cuando la tendencia del mercado se invierte, es decir, la EMA corta cruza por debajo de la EMA larga, muestra un impulso debilitante de los alcistas y la posición existente debe cerrarse.
El uso de EMAs duales para determinar la estructura del mercado puede juzgar con precisión el estado alcista / oso.
El patrón de engulfing muestra que el impulso de un lado aumenta repentinamente, lo que puede capturar tendencias importantes.
Al no fijar el precio de stop loss, sino al utilizar la inversión de la estructura del mercado para detener la pérdida, se puede reducir el deslizamiento innecesario.
Las EMA dobles también pueden juzgar incorrectamente la estructura del mercado, perdiendo tendencias o tomando posiciones largas erróneamente.
Los patrones de absorción pueden ser engañados por los mercados variados. Se pueden añadir más filtros para evitar operaciones falsas.
No tener un precio de stop loss puede llevar a mayores pérdidas.
Más indicadores como MACD, A/D se pueden utilizar para determinar largo/corto.
Se añade un precio de stop loss fijo moderado basado en la necesidad.
Optimizar los períodos de EMA en función de las características del comercio de símbolos.
La lógica de la estrategia es clara y fácil de entender, utilizando EMAs para determinar la estructura y los patrones de engulfamiento para capturar la ruptura. Sus ventajas son la lógica de juicio simple y las señales comerciales claras.
/*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")