Strategi Penembusan EMA Dual Engulfing

Penulis:ChaoZhang, Tanggal: 2023-12-07 15:50:13
Tag:

img

Gambaran umum

Strategi ini menentukan arah panjang/pendek dengan menilai arah rata-rata bergerak eksponensial (EMA). Ini pergi panjang ketika ada pola bullish engulfing dan volume perdagangan yang diperbesar. Ini menutup posisi ketika arah EMA terbalik atau pola engulfing bearish terjadi.

Logika Strategi

  1. Gunakan dua EMA dengan parameter yang berbeda untuk menentukan tren pasar. jika EMA pendek berada di atas EMA panjang, itu adalah pasar bull, jika tidak itu adalah pasar bear.

  2. Ketika pasar bullish, jika pola bullish engulfing muncul dan volume perdagangan 1,2 kali lebih besar dari bar sebelumnya, sinyal panjang dipicu.

  3. Ketika tren pasar terbalik, yaitu EMA pendek melintasi EMA panjang, itu menunjukkan momentum bulls yang melemah dan posisi yang ada harus ditutup.

Analisis Keuntungan

  1. Menggunakan EMA ganda untuk menentukan struktur pasar dapat dengan akurat menilai status bull/bear.

  2. Pola engulfing menunjukkan momentum satu sisi tiba-tiba meningkat, yang dapat menangkap tren utama.

  3. Dengan tidak menetapkan harga stop loss tetapi menggunakan pembalikan struktur pasar untuk menghentikan kerugian, slippage yang tidak perlu dapat dikurangi.

Analisis Risiko

  1. EMA ganda juga dapat salah menilai struktur pasar, sehingga kehilangan tren atau salah pergi panjang.

  2. Pola engulfing dapat disesatkan oleh pasar yang berbeda. Lebih banyak filter dapat ditambahkan untuk menghindari perdagangan palsu.

  3. Tidak memiliki harga stop loss dapat menyebabkan kerugian yang lebih besar.

Arah Optimalisasi

  1. Lebih banyak indikator seperti MACD, A / D dapat digunakan untuk menentukan panjang / pendek.

  2. Tambahkan harga stop loss tetap moderat berdasarkan kebutuhan.

  3. Mengoptimalkan periode EMA berdasarkan karakteristik perdagangan simbol.

Kesimpulan

Logika strategi ini jelas dan mudah dimengerti, menggunakan EMA untuk menentukan struktur dan pola penyerapan untuk menangkap breakout. Keuntungannya adalah logika penilaian sederhana dan sinyal perdagangan yang jelas.


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



Lebih banyak