Strategi breakout skala waktu multi MACD+EMA


Tanggal Pembuatan: 2024-03-22 11:13:12 Akhirnya memodifikasi: 2024-03-22 11:13:12
menyalin: 0 Jumlah klik: 685
1
fokus pada
1617
Pengikut

Strategi breakout skala waktu multi MACD+EMA

Ringkasan

Strategi ini menggabungkan indikator MACD dan beberapa garis EMA untuk menangkap tren kuat di pasar dari dua skala waktu, garis lingkar dan garis menit. Pada garis lingkar, indikator MACD digunakan untuk menentukan arah tren besar, pada garis menit, tiga garis EMA tanggal 5, 15 dan 30 digunakan untuk mengkonfirmasi tren, dan melakukan perdagangan di titik-titik terobosan.

Prinsip Strategi

  1. MACD lingkar menentukan tren besar: menghitung indikator MACD lingkar, dibandingkan dengan MACD pilar minggu ini dan minggu lalu, perbedaan lebih besar dari 0 menunjukkan tren ke atas, lebih kecil dari 0 menunjukkan tren ke bawah. Pembaruan arah tren setiap minggu pada hari Senin.

  2. Multi EMA Line Confirm Trends: Gambarkan tiga EMA Line pada tanggal 5, 15, dan 30 pada grafik menit. Ketika EMA jangka pendek berjalan di atas dan ke atas EMA jangka panjang, tren naik; sebaliknya tren turun.

  3. Perdagangan di titik persimpangan EMA:

    • Melakukan over: Melakukan over ketika MACD bergelombang ke atas dan saat closing di atas EMA 15 hari. Stop loss ditetapkan pada poin tetap di bawah harga rata-rata posisi, atau ketika EMA 5 hari di bawah EMA 15 hari.
    • Keluar: Keluar ketika MACD berputar ke bawah dan melewati EMA 30 hari di bawah EMA 5 hari. Stop loss ditetapkan pada poin tetap di atas harga rata-rata posisi, atau posisi kosong saat melewati EMA 15 hari di atas EMA 5 hari.
  4. Tidak ada kondisi untuk menaikkan harga.

Analisis Keunggulan

  1. Kombinasi dua skala waktu, penilaian tren lebih dapat diandalkan. MACD garis lingkaran menilai tren besar, menghindari over-coverage di pasar yang bergoyang; EMA garis menit menyeberangi konfirmasi tren, menangkap setiap gelombang dalam tren.

  2. Garis menit EMA Parameter pilihan 5, 15, 30 hari, kombinasi tiga baris dapat dengan baik memfilter kebisingan dan menangkap tren yang jelas.

  3. Stop loss diatur secara rasional untuk mengontrol risiko transaksi tunggal. Stop loss dengan EMA yang digabungkan dengan stop loss dengan poin tetap dapat mengontrol kerugian dan mengikuti tren.

  4. Desain kode modular, modul utama seperti perhitungan MACD, perhitungan EMA, dan lain-lain, memiliki fleksibilitas dan skalabilitas yang kuat.

Analisis risiko

  1. Pemilihan yang tidak tepat dari nilai-nilai yang berbeda pada grafik MACD dapat menyebabkan standar penilaian tren yang terlalu longgar atau terlalu ketat, sehingga penilaian tidak akurat. Anda dapat memilih nilai-nilai terbaik dengan pengukuran ulang dan pengoptimalan parameter.

  2. Parameter EMA garis menit dipilih dengan tidak tepat, siklus yang terlalu pendek akan menyebabkan perdagangan yang terlalu sering, terlalu lama akan kehilangan peluang. Anda dapat memilih kombinasi parameter yang optimal melalui pengukuran ulang dan pengoptimalan parameter.

  3. Penetapan stop loss pada titik tetap tidak tepat, terlalu kecil akan menyebabkan stop loss yang terlalu sering, dan terlalu besar akan menyebabkan terlalu banyak kerugian dalam satu kali. Anda dapat mengatur stop loss secara individual sesuai dengan karakteristik variasi.

  4. Pada titik-titik trend yang berbalik, garis EMA akan terlambat dan mungkin akan melewatkan titik jual beli terbaik. Namun, dalam jangka panjang, strategi ini masih dapat mengendalikan risiko secara efektif dan tetap berkinerja baik.

Arah optimasi

  1. Anda dapat mempertimbangkan untuk menilai tren berdasarkan MACD, kemudian menambahkan indikator seperti RSI untuk mengkonfirmasi kekuatan tren, meningkatkan akurasi penilaian tren.

  2. Bisa berdasarkan pada EMA line crossover, menambahkan indikator seperti CCI sebagai syarat penyaringan sinyal perdagangan, mengurangi frekuensi perdagangan dan risiko.

  3. Stop loss yang dipersonalisasi dapat diatur berdasarkan karakteristik historis fluktuasi saham individu, sehingga strategi lebih sesuai dengan karakteristik varietas.

  4. Anda dapat mempertimbangkan strategi untuk meningkatkan dan menurunkan posisi, secara bertahap menaikkan posisi saat tren kuat, secara bertahap menurunkan posisi saat tren melemah, meningkatkan efisiensi penggunaan dana.

Meringkaskan

MACD + EMA multi skala waktu strategi pemecahan adalah strategi jenis trend tracking, dalam menilai tren dan mengkonfirmasi tren memiliki dasar yang relatif ilmiah, mampu secara efektif menangkap tren utama pasar, mendapatkan keuntungan yang stabil. Pada saat yang sama, strategi ini juga relatif sempurna dalam pengendalian risiko, dengan berhenti yang masuk akal pengaturan kondisi posisi damai, efektif mengendalikan strategi mundur. Namun, strategi ini juga memiliki beberapa kekurangan, seperti ketidakhadiran kenaikan atau penurunan posisi setelah penilaian tren, dapat lebih lanjut dioptimalkan dan disempurnakan atas dasar ini. Secara keseluruhan, strategi ini adalah strategi perdagangan yang sangat belajar dan menggunakan kuantitas.

Kode Sumber Strategi
/*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)