MACD+EMA Multi-Timeframe Breakout Strategi

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

img

Ringkasan

Strategi ini menggabungkan penunjuk MACD dan pelbagai garis EMA untuk menangkap trend pasaran yang kuat dari dua bingkai masa - mingguan dan intraday. Ia menggunakan penunjuk MACD pada carta mingguan untuk menentukan arah trend keseluruhan, dan tiga garis EMA (5 hari, 15 hari, 30 hari) pada carta intraday untuk mengesahkan trend dan membuat perdagangan pada titik pecah.

Prinsip Strategi

  1. MACD mingguan menentukan trend keseluruhan: Hitung penunjuk MACD mingguan dan bandingkan perbezaan antara nilai histogram MACD minggu semasa dan minggu sebelumnya. Perbezaan positif menunjukkan trend menaik, sementara perbezaan negatif menunjukkan trend menurun. Mengemas kini arah trend setiap hari Isnin pada pasaran terbuka.

  2. Pelbagai garis EMA mengesahkan trend: Menggambar garis EMA 5 hari, 15 hari dan 30 hari pada carta intraday. Apabila EMA jangka pendek berjalan di atas dan menjauh dari EMA jangka panjang, trendnya naik; sebaliknya, trendnya menurun.

  3. Perdagangan di titik persimpangan EMA:

    • Masuk panjang: Apabila trend MACD mingguan naik dan penutupan intraday melintasi di atas EMA 15 hari, pergi panjang. Tetapkan stop-loss pada titik tetap di bawah harga masuk, atau keluar apabila EMA 5 hari melintasi di bawah EMA 15 hari.
    • Entry pendek: Apabila trend MACD mingguan menurun dan EMA 5 hari melintasi di bawah EMA 30 hari, pergi pendek. Tetapkan stop-loss pada titik tetap di atas harga kemasukan, atau keluar apabila EMA 5 hari melintasi di atas EMA 15 hari.
  4. Menambah kedudukan: Tiada syarat kemasukan tambahan ditetapkan buat masa ini.

Analisis Kelebihan

  1. Menggabungkan dua bingkai masa menjadikan penentuan trend lebih boleh dipercayai. MACD mingguan mengelakkan terjebak dalam pasaran terikat julat, sementara persilangan EMA intraday menangkap setiap gelombang dalam trend.

  2. Pilihan EMA 5/15/30 hari pada carta intraday berkesan menapis bunyi bising dan menangkap trend yang jelas.

  3. Tetapan stop-loss adalah munasabah, mengawal risiko pada dagangan individu.

  4. Reka bentuk kod modular, dengan komponen utama seperti pengiraan MACD dan EMA, sangat boleh digunakan semula dan dapat diperluaskan.

Analisis Risiko

  1. Pemilihan ambang perbezaan histogram MACD yang tidak betul boleh menyebabkan kriteria trend yang terlalu longgar atau ketat, menyebabkan penilaian yang salah.

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

  3. Titik stop-loss tetap yang tidak betul - menetapkannya terlalu ketat boleh membawa kepada sering berhenti, sementara terlalu luas boleh membawa kepada kerugian berlebihan setiap perdagangan.

  4. EMA mungkin ketinggalan pada titik perubahan trend, berpotensi kehilangan titik masuk / keluar terbaik.

Arahan pengoptimuman

  1. Pertimbangkan untuk menambah penunjuk lain seperti RSI di atas MACD mingguan untuk mengesahkan kekuatan trend dan meningkatkan ketepatan.

  2. Pertimbangkan untuk menambah penunjuk lain seperti CCI sebagai penapis tambahan untuk isyarat silang EMA intraday untuk mengurangkan kekerapan perdagangan dan risiko.

  3. Tetapkan titik stop-loss yang disesuaikan berdasarkan turun naik sejarah setiap saham untuk lebih sesuai dengan ciri-cirinya.

  4. Pertimbangkan untuk menambah peraturan strategi untuk skala masuk dan keluar dari kedudukan - secara beransur-ansur menambah trend kuat dan mengurangkan trend melemah untuk meningkatkan kecekapan modal.

Ringkasan

MACD + EMA Multi-Timeframe Breakout Strategy adalah strategi trend-mengikuti dengan asas saintifik untuk kedua-dua penentuan trend dan pengesahan. Ia boleh menangkap dengan berkesan trend pasaran utama dan menjana pulangan yang stabil. Sementara itu, strategi ini agak lengkap dalam kawalan risiko, dengan berkesan mengehadkan penarikan melalui peraturan stop-loss dan keluar yang munasabah. Walau bagaimanapun, terdapat juga beberapa kekurangan, seperti isyarat trend yang tertinggal dan kekurangan peraturan skala, yang boleh dioptimumkan dan dipertingkatkan lebih lanjut. Secara keseluruhan, ini adalah strategi perdagangan kuantitatif yang sangat berharga untuk dipelajari dan digunakan.


/*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 lanjut