Strategi penghakiman arah aliran dinamik MACD berdasarkan purata bergerak


Tarikh penciptaan: 2024-02-19 10:48:11 Akhirnya diubah suai: 2024-02-19 10:48:11
Salin: 0 Bilangan klik: 598
1
fokus pada
1617
Pengikut

Strategi penghakiman arah aliran dinamik MACD berdasarkan purata bergerak

Gambaran keseluruhan

Strategi ini berdasarkan kombinasi garis rata dari penunjuk MACD, untuk menilai trend dinamik sepanjang tempoh masa, dan merupakan strategi penjejakan trend yang lebih klasik. Terutama melalui perbezaan garis rata yang cepat dan perlahan MACD dan hubungan garis isyaratnya, untuk menilai arah dan kekuatan trend semasa.

Prinsip Strategi

  1. Arah trend semasa berdasarkan perbezaan garis rata-rata MACD dan hubungan garis isyaratnya
  2. MACD perbezaan di atas melalui garis isyarat untuk melakukan isyarat banyak, di bawah melalui isyarat kosong
  3. Memperkenalkan perbezaan MACD dan MACD columnar isosceles untuk meningkatkan isyarat strategi
  4. Menambah modul penghakiman antara kitaran, mengambil indikator MACD kitaran masa yang lebih tinggi sebagai asas penyesuaian gelombang isyarat dan kedudukan
  5. Penyesuaian kedudukan dinamik, mengurangkan saiz kedudukan apabila isyarat melangkaui kitaran lemah, meningkatkan kedudukan apabila isyarat meningkat

Analisis kelebihan

  1. Indeks MACD sendiri lebih berkesan dalam menentukan arah trend
  2. Kombinasi perbezaan MACD dan dua kali pengesahan barisan tiang dapat meningkatkan ketepatan isyarat
  3. Penghakiman melangkaui kitaran meningkatkan kestabilan strategi dan mengelakkan isyarat frekuensi tinggi yang salah
  4. Pembaikan kedudukan yang dinamik menjadikan strategi lebih baik untuk merebut peluang dan meningkatkan keuntungan yang berlebihan

Analisis risiko dan penyelesaian

  1. Sinyal MACD mengalami kelewatan dan mungkin menyebabkan kesan yang kurang baik
  • Penyelesaiannya: Tambah laju rata-rata dan laju rata-rata untuk menangkap isyarat lebih awal
  1. Isyarat lintas kitaran tidak semestinya tepat dan boleh mengelirukan strategi
  • Penyelesaian: Memperkenalkan mekanisme penyesuaian kedudukan yang dinamik, menjadikan strategi kitaran utama dominan
  1. Strategi gabungan pelbagai faktor mungkin kurang stabil secara keseluruhan
  • Penyelesaian: Menyesuaikan parameter-parameter strategi dengan teliti bagi memastikan kesejahteraan keseluruhan

Arah pengoptimuman

  1. Uji keserasian kombinasi parameter kitaran yang berbeza
  2. Uji kesan gabungan pelbagai kitaran terhadap kesan strategi
  3. Sesuaikan parameter penunjuk MACD, seperti kitaran garis rata-rata perlahan, kitaran garis isyarat, dan lain-lain
  4. Uji Kesan Faktor Pengaturan Pelbagai Posisi
  5. Ujian tindak balas pada varieti lain

ringkaskan

MACD ini menggabungkan strategi trend dinamik melintasi kitaran, menggabungkan keunggulan penilaian indikator klasik dan rujukan pelbagai kerangka masa. Dengan pengoptimuman parameter dan ujian gabungan, anda boleh membina strategi trend yang lebih stabil dan menguntungkan.

Kod sumber strategi
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@temelbulut
//@version=5
strategy('MACD Strategy %80', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50)

fastLength = input.int(title='MACD Fast Length', defval=12, minval=1)
slowLength = input.int(title='MACD Slow Length', defval=26, minval=1)
signalLength = input.int(title='MACD Signal Length', defval=9, minval=1)
crossscore = input(title='Cross (buy/sell) Score', defval=10.)
indiside = input(title='indicator Direction Score', defval=8)
histside = input(title='Histogram Direction Score', defval=2)
shotsl = input(title='Show Stop Loss Line', defval=false)
Mult = input.float(title='Stop Loss Factor', defval=1.2, minval=0.1, maxval=100)
Period = input.int(title='Stop Loss Period', defval=10, minval=1, maxval=100)
lookaheadi = input(title='Lookahead', defval=true)

HTF = timeframe.period == '1' ? '5' : timeframe.period == '3' ? '15' : timeframe.period == '5' ? '15' : timeframe.period == '15' ? '60' : timeframe.period == '30' ? '60' : timeframe.period == '45' ? '60' : timeframe.period == '60' ? '240' : timeframe.period == '120' ? '240' : timeframe.period == '180' ? '240' : timeframe.period == '240' ? 'D' : timeframe.period == 'D' ? 'W' : 'W'

calc = timeframe.period == '1' ? 5 : timeframe.period == '3' ? 5 : timeframe.period == '5' ? 3 : timeframe.period == '15' ? 4 : timeframe.period == '30' ? 4 : timeframe.period == '45' ? 4 : timeframe.period == '60' ? 4 : timeframe.period == '120' ? 3 : timeframe.period == '180' ? 3 : timeframe.period == '240' ? 6 : timeframe.period == 'D' ? 5 : 1

count() =>
    indi = ta.ema(close, fastLength) - ta.ema(close, slowLength)
    signal = ta.ema(indi, signalLength)
    Anlyse = 0.0
    // direction of indi and histogram
    hist = indi - signal
    Anlyse := indi > indi[1] ? hist > hist[1] ? indiside + histside : hist == hist[1] ? indiside : indiside - histside : 0
    Anlyse += (indi < indi[1] ? hist < hist[1] ? -(indiside + histside) : hist == hist[1] ? -indiside : -(indiside - histside) : 0)
    Anlyse += (indi == indi[1] ? hist > hist[1] ? histside : hist < hist[1] ? -histside : 0 : 0)
    // cross now earlier ?
    countcross = indi >= signal and indi[1] < signal[1] ? crossscore : indi <= signal and indi[1] > signal[1] ? -crossscore : 0.
    countcross += nz(countcross[1]) * 0.6
    Anlyse += countcross
    nz(Anlyse)

Anlys = count()
AnlysHfrm = lookaheadi ? request.security(syminfo.tickerid, HTF, count(), lookahead=barmerge.lookahead_on) : request.security(syminfo.tickerid, HTF, count(), lookahead=barmerge.lookahead_off)
Result = (AnlysHfrm * calc + Anlys) / (calc + 1)

longCondition = ta.change(Result) != 0 and Result > 0
if longCondition
    strategy.entry('MACD Long', strategy.long,alert_message = 'MACD Long')

shortCondition = ta.change(Result) != 0 and Result < 0
if shortCondition
    strategy.entry('MACD Short', strategy.short,alert_message = 'MACD Short')

countstop(pos) =>
    Upt = hl2 - Mult * ta.atr(Period)
    Dnt = hl2 + Mult * ta.atr(Period)
    TUp = 0.
    TDown = 0.
    TUp := close[1] > TUp[1] ? math.max(Upt, TUp[1]) : Upt
    TDown := close[1] < TDown[1] ? math.min(Dnt, TDown[1]) : Dnt
    tslmtf = pos == 1 ? TUp : TDown
    tslmtf

pos = longCondition ? 1 : -1
stline = 0.
countstop__1 = countstop(pos)
security_1 = request.security(syminfo.tickerid, HTF, countstop__1)
stline := ta.change(time(HTF)) != 0 or longCondition or shortCondition ? security_1 : nz(stline[1])
plot(stline, color=shotsl ? color.rgb(148, 169, 18) : na, style=plot.style_line, linewidth=2, title='Stop Loss')