MACD+EMA Multi-Timeframe Breakout Strategi

Penulis:ChaoZhang, Tanggal: 2024-03-22 11:13:12
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator MACD dan beberapa garis EMA untuk menangkap tren pasar yang kuat dari dua kerangka waktu - mingguan dan intraday. Ini menggunakan indikator MACD pada grafik mingguan untuk menentukan arah tren keseluruhan, dan tiga garis EMA (5 hari, 15 hari, 30 hari) pada grafik intraday untuk mengkonfirmasi tren dan melakukan perdagangan pada titik pecah.

Prinsip Strategi

  1. MACD mingguan menentukan tren keseluruhan: Hitung indikator MACD mingguan dan bandingkan perbedaan antara nilai histogram MACD minggu saat ini dan minggu sebelumnya. Perbedaan positif menunjukkan tren naik, sementara perbedaan negatif menunjukkan tren turun. Perbarui arah tren setiap hari Senin saat pasar terbuka.

  2. Beberapa garis EMA mengkonfirmasi tren: Menggambar garis EMA 5 hari, 15 hari dan 30 hari pada grafik intraday. Ketika EMA jangka pendek berjalan di atas dan menjauh dari EMA jangka panjang, tren naik; sebaliknya, tren menurun.

  3. Perdagangan di titik persimpangan EMA:

    • Long entry: Ketika tren MACD mingguan naik dan penutupan intraday melintasi di atas EMA 15 hari, pergi panjang. Atur stop-loss pada titik tetap di bawah harga masuk, atau keluar ketika EMA 5 hari melintasi di bawah EMA 15 hari.
    • Entry pendek: Ketika tren MACD mingguan menurun dan EMA 5 hari melintasi di bawah EMA 30 hari, pergi pendek. Tetapkan stop-loss pada titik tetap di atas harga masuk, atau keluar ketika EMA 5 hari melintasi di atas EMA 15 hari.
  4. Menambahkan posisi: Tidak ada persyaratan masuk tambahan yang ditetapkan untuk saat ini.

Analisis Keuntungan

  1. Menggabungkan dua kerangka waktu membuat penentuan tren lebih dapat diandalkan. MACD mingguan menghindari terjebak di pasar yang terikat rentang, sementara crossover EMA intraday menangkap setiap gelombang dalam tren.

  2. Pilihan EMA 5/15/30 hari pada grafik intraday secara efektif menyaring kebisingan dan menangkap tren yang jelas.

  3. Pengaturan stop-loss wajar, mengendalikan risiko pada perdagangan individu. Menggabungkan stop-loss titik tetap dengan EMA stop-loss memungkinkan kontrol kerugian dan mengikuti tren.

  4. Desain kode modular, dengan komponen kunci seperti perhitungan MACD dan EMA, sangat dapat digunakan kembali dan dapat diperluas.

Analisis Risiko

  1. Pemilihan batas perbedaan histogram MACD yang tidak benar dapat menyebabkan kriteria tren yang terlalu longgar atau ketat, menyebabkan penilaian yang salah.

  2. Pemilihan parameter EMA intraday yang tidak tepat - terlalu pendek dapat menyebabkan overtrading, sementara terlalu lama dapat kehilangan peluang.

  3. Titik stop-loss yang tidak tepat - mengaturnya terlalu ketat dapat menyebabkan stop-out yang sering, sementara terlalu luas dapat menyebabkan kerugian yang berlebihan per perdagangan.

  4. EMA mungkin tertinggal pada titik balik tren, berpotensi melewatkan titik masuk/keluar terbaik.

Arahan Optimasi

  1. Pertimbangkan untuk menambahkan indikator lain seperti RSI di atas MACD mingguan untuk mengkonfirmasi kekuatan tren dan meningkatkan akurasi.

  2. Pertimbangkan untuk menambahkan indikator lain seperti CCI sebagai filter tambahan untuk sinyal crossover EMA intraday untuk mengurangi frekuensi perdagangan dan risiko.

  3. Atur titik stop-loss yang disesuaikan berdasarkan volatilitas historis setiap saham agar lebih sesuai dengan karakteristiknya.

  4. Pertimbangkan untuk menambahkan aturan strategi untuk skala masuk dan keluar dari posisi - secara bertahap menambahkan tren kuat dan mengurangi tren melemah untuk meningkatkan efisiensi modal.

Ringkasan

Strategi MACD+EMA Multi-Timeframe Breakout adalah strategi trend-following dengan dasar ilmiah untuk penentuan dan konfirmasi tren. Strategi ini dapat secara efektif menangkap tren pasar utama dan menghasilkan pengembalian yang stabil. Sementara itu, strategi ini cukup lengkap dalam pengendalian risiko, secara efektif membatasi penarikan melalui aturan stop-loss dan exit yang wajar. Namun, ada juga beberapa kekurangan, seperti sinyal tren yang tertinggal dan kurangnya aturan skala, yang dapat dioptimalkan dan ditingkatkan lebih lanjut. Secara keseluruhan, ini adalah strategi perdagangan kuantitatif yang sangat berharga untuk dipelajari dan dimanfaatkan.


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


// 1) 전주와 전전주의 히스토그램의 차이를 계산하여, 매주 월요일에 매매 방향을 표시하고, 
// 2) 5일, 15일, 30일 선을 호출하여 평행하게 그리고, 매매 방향에 따라 
// 3) 분봉기준의 이동평균선 매매전략  
// 4) 수익 실현은 미설정 해둠 


//@version=5
strategy('Last week MACD+ 15day, 30day break through, by Ho.J', overlay=true, initial_capital=30000, commission_value = 7.5, commission_type=strategy.commission.cash_per_order, slippage = 0)

// 백테스팅 기간 설정
start_time = input(timestamp("Jan 19 2024 00:00:01"), confirm = true)
end_time = input(timestamp("MAR 19 2024 23:59:59"), confirm = true)
is_in_time = true
stopLoss = input.int(100, title="손절 수준")


// 지난주 값 불러오기 입력 매개변수, 1은 5일, 3은 15일, 6은 30일 이동평균선을 구하는 변수임
emaLength1 = input(1, title="EMA Length")
emaLength2 = input(3, title="EMA Length")
emaLength3 = input(6, title="EMA Length")
timeframePeriod = "W" // 'D'는 일간 데이터를 의미


// 분봉기준 EMA 계산
shortEMA = ta.ema(close, 50)
mediumEMA = ta.ema(close, 60)
longEMA = ta.ema(close, 150)


// 분봉기준 EMA 그리기
plot(shortEMA, color=color.blue, title="5일 EMA")
plot(mediumEMA, color=color.orange, title="15일 EMA")
plot(longEMA, color=color.red, title="30일 EMA")



// 주간 MACD 계산, 전주와 전전주 히스토그램을 계산하여 상대적인 상승, 하락을 계산 
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
histogram = macdLine - signalLine
histLastWeek = request.security(syminfo.tickerid, timeframePeriod, histogram[1], lookahead=barmerge.lookahead_on)
histWeekBeforeLast = request.security(syminfo.tickerid, timeframePeriod, histogram[2], lookahead=barmerge.lookahead_on)
histDiff = histLastWeek - histWeekBeforeLast


// 현재 주의 월요일 첫 봉인지 확인
isMondayFirstBar = (dayofweek == dayofweek.monday) and (hour == 09) and (minute == 00) // 여기서 시간은 시장 개장 시간에 따라 조정해야 함


// 월요일 첫봉에, 주간 MACD 히스토그램이 상승하면 '매수', 하락하면 '매도' 표시
var label myLabel = na
if (isMondayFirstBar)
    if (histDiff > 0)
        myLabel := label.new(bar_index, high, "이번주는 매수만", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.large)
    else if (histDiff < 0)
        myLabel := label.new(bar_index, low, "이번주는 매도만", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.large)


// 지난주 EMA 값 요청
// 'lookahead'를 사용하여 지난 데이터를 기준으로 계산
lastWeekEMA1 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength1), lookahead=barmerge.lookahead_on)
lastWeekEMA2 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength2), lookahead=barmerge.lookahead_on)
lastWeekEMA3 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength3), lookahead=barmerge.lookahead_on)

// 지난주 EMA 그리기
plot(lastWeekEMA1, color=color.red, title="Last Week EMA1")
plot(lastWeekEMA2, color=color.rgb(157, 126, 126), title="Last Week EMA2")
plot(lastWeekEMA3, color=color.rgb(199, 192, 192), title="Last Week EMA3")


// 매수/매도 조건
buySignal = ta.crossover(close, lastWeekEMA2) and histDiff > 0
// addbuySignal = ta.crossover(close, lastWeekEMA3) and histDiff > 0

sellSignal = ta.crossunder(shortEMA, longEMA) and histDiff < 0
// addSellSignal = ta.crossunder(close, lastWeekEMA3) and histDiff < 0


// 매수 조건
if (buySignal)
    strategy.entry('Buy', strategy.long)
    alert('Buy Signal', alert.freq_once_per_bar_close)
	
// if (addbuySignal)
   // strategy.entry('Buy', strategy.long)
   // alert('add Buy Signal', alert.freq_once_per_bar_close)

if (strategy.position_size > 0 and ((strategy.position_avg_price - close) >= stopLoss) or ta.crossunder(close, mediumEMA))
    strategy.close('Buy')
    alert('Close Buy Signal', alert.freq_once_per_bar_close)

// 매도 조건
if (sellSignal)
    strategy.entry('Sell', strategy.short)
    alert('Sell Signal', alert.freq_once_per_bar_close)
	
//if (addSellSignal)
   // strategy.entry('Sell', strategy.short)
   // alert('add Sell Signal', alert.freq_once_per_bar_close)

if (strategy.position_size < 0 and ((close - strategy.position_avg_price) >= stopLoss) or ta.crossover(shortEMA, mediumEMA))
    strategy.close('Sell')
    alert('Close Sell Signal', alert.freq_once_per_bar_close)

Lebih banyak