Strategi pemecahan skala berbilang masa MACD+EMA


Tarikh penciptaan: 2024-03-22 11:13:12 Akhirnya diubah suai: 2024-03-22 11:13:12
Salin: 0 Bilangan klik: 685
1
fokus pada
1617
Pengikut

Strategi pemecahan skala berbilang masa MACD+EMA

Gambaran keseluruhan

Strategi ini menggabungkan indikator MACD dan beberapa garis EMA untuk menangkap trend kuat di pasaran dari dua skala masa garis pusingan dan garis minit. Pada garis pusingan, indikator MACD digunakan untuk menentukan arah trend besar, pada garis minit, tiga garis EMA pada hari 5, 15 dan 30 digunakan untuk mengesahkan trend, dan berdagang di titik pecah.

Prinsip Strategi

  1. MACD garis pusingan untuk menentukan trend besar: mengira indikator MACD garis pusingan, berbanding dengan perbezaan grafik MACD minggu ini dan minggu lalu, perbezaan yang lebih besar daripada 0 menunjukkan trend ke atas, dan kurang daripada 0 menunjukkan trend ke bawah. Mengemas kini arah trend setiap minggu apabila perdagangan dibuka.

  2. Garis EMA berbilang mengesahkan trend: melukis tiga garis EMA pada hari ke-5, ke-15, dan ke-30 pada carta garis minit. Apabila EMA jangka pendek berjalan di atas dan ke atas EMA jangka panjang, trend naik; sebaliknya, trend turun.

  3. Perdagangan di titik persilangan EMA:

    • Buat lebih: Buat lebih apabila MACD pada garis pusingan bergerak ke atas, dan apabila harga penutupan pada garis minit melintasi EMA 15 hari. Stop loss ditetapkan pada nilai tetap di bawah harga purata pegangan, atau ketika EMA 5 hari melintasi EMA 15 hari.
    • Keluar: Keluar apabila MACD berputar ke bawah dan EMA hari ke-5 di bawah EMA hari ke-30 . Stop loss ditetapkan pada nilai tetap pada nilai purata pegangan, atau kosong apabila EMA hari ke-5 di atas EMA hari ke-15 .
  4. Tambahan: Tidak ada syarat untuk menambah.

Analisis kelebihan

  1. Gabungan dua skala masa, penghakiman trend lebih dipercayai. MACD garis pusingan menilai trend besar, mengelakkan melakukan banyak penyesuaian di pasaran yang bergolak; EMA garis minit menyeberangi pengesahan trend, menangkap setiap gelombang dalam trend.

  2. Garis minit EMA Parameter pilihan 5, 15, 30 hari, gabungan tiga baris dapat menyaring kebisingan dengan baik dan menangkap trend yang jelas.

  3. Penetapan stop loss yang munasabah, mengawal risiko perdagangan tunggal. Penetapan titik tetap dan penutupan EMA yang digabungkan, dapat mengawal kerugian dan mengikuti trend.

  4. Reka bentuk modular kod, modul utama seperti pengiraan MACD, pengiraan EMA dan lain-lain, mempunyai kepelbagaian dan kepelbagaian yang kuat.

Analisis risiko

  1. Pemilihan yang tidak betul untuk had perbezaan pada carta MACD boleh menyebabkan kriteria penilaian trend terlalu longgar atau ketat, sehingga penilaian tidak tepat. Anda boleh memilih had terbaik melalui pengukuran semula dan pengoptimuman parameter.

  2. Parameter EMA garis minit dipilih dengan tidak betul, tempoh yang terlalu pendek akan menyebabkan perdagangan yang kerap, terlalu lama akan kehilangan peluang yang baik. Anda boleh memilih kombinasi parameter yang terbaik melalui pengukuran semula dan pengoptimuman parameter.

  3. Penetapan yang tidak tepat untuk kedudukan hentian titik tetap, terlalu kecil akan menyebabkan hentian yang kerap, terlalu besar akan menyebabkan terlalu banyak kerugian sekali. Hentian individu boleh ditetapkan berdasarkan ciri-ciri turun naik varieti.

  4. Pada titik perubahan trend, garis EMA akan terlewat dan mungkin terlepas titik jual beli terbaik. Tetapi dalam jangka masa panjang, strategi ini masih berfungsi dengan baik kerana dapat mengawal risiko dengan berkesan.

Arah pengoptimuman

  1. Anda boleh mempertimbangkan untuk menilai trend berdasarkan MACD, kemudian melapisi indikator seperti RSI untuk mengesahkan kekuatan trend, meningkatkan ketepatan penilaian trend.

  2. Anda boleh menggunakan EMA sebagai asas untuk menyeberang garis, menambah CCI dan lain-lain sebagai penapis untuk isyarat perdagangan, mengurangkan frekuensi perdagangan dan risiko.

  3. Anda boleh menetapkan titik-titik berhenti peribadi berdasarkan ciri-ciri turun naik sejarah saham individu, menjadikan strategi lebih sesuai dengan ciri-ciri varieti.

  4. Anda boleh mempertimbangkan strategi untuk meningkatkan dan menurunkan kedudukan, secara beransur-ansur menaikkan kedudukan apabila trend kuat, secara beransur-ansur menurunkan kedudukan apabila trend lemah, meningkatkan kecekapan penggunaan dana.

ringkaskan

Strategi penembusan pelbagai skala masa MACD + EMA adalah strategi jenis trend yang mempunyai asas saintifik dalam menilai trend dan pengesahan trend, yang dapat menangkap trend utama pasaran dengan berkesan, dan memperoleh keuntungan yang stabil. Pada masa yang sama, strategi ini juga cukup baik dalam mengawal risiko, dengan menetapkan keadaan kedudukan dan kedudukan yang aman dengan cara yang munasabah, dan mengawal strategi penarikan balik dengan berkesan. Tetapi strategi ini juga mempunyai beberapa kelemahan, seperti kekurangan kenaikan dan penurunan kedudukan selepas penghakiman trend.

Kod 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)