
Strategi ini menggunakan prinsip persimpangan dua garis sejajar, menggabungkan penghakiman trend dan titik persimpangan latar belakang yang menonjol dari penunjuk MACD, dibantu dengan titik bentuk, bertujuan untuk menangkap trend pertengahan pasaran. Logik utama adalah masuk ke dalam pasaran ketika peralihan berlaku ke arah garis sejajar, masuk ke dalam titik persimpangan yang menonjol melalui warna latar belakang MACD, dengan penghakiman perubahan warna carta lurus MACD.
Strategi menggunakan EMA pantas dan EMA perlahan untuk membina garis rata-rata dua, garis pantas dan perlahan untuk menentukan arah trend. Pada masa yang sama, mengira MACD dan isyarat, yang berbeza digambarkan sebagai peta lurus.
Berdasarkan kod, panjang garisan pantas adalah 12, dan panjang garisan perlahan adalah 26, yang menunjukkan trend jangka pendek dan jangka panjang. Panjang isyarat adalah 9, untuk pemprosesan tambahan.
Logik silang:
Pertimbangan titik persimpangan:
Perubahan warna pada carta persegi panjang untuk menilai kekuatan trend:
Menggunakan dua garis keseimbangan untuk menentukan arah trend pertengahan, mengelakkan gangguan oleh bunyi pasaran jangka pendek
Penunjuk MACD membantu menentukan trend dan kekuatan jangka pendek, meningkatkan peluang keuntungan
Perubahan warna dalam grafik garisan lurus menentukan saiz intensiti, untuk mengetahui masa kemasukan yang lebih baik
Tanda latar belakang titik persimpangan, mudah dilihat
Siklus rata-rata yang boleh disesuaikan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza
Parameter MACD boleh disesuaikan untuk mengoptimumkan kesan indikator
Pelbagai jenis pengesahan kemasukan disediakan: arah garis rata, penempatan penunjuk, penembusan bentuk
Keputusan binari tidak sensitif terhadap pergerakan jangka pendek dan mungkin terlepas peluang garis pendek
Parameter MACD tidak betul, penunjuk tidak berfungsi dengan baik, memberi isyarat yang salah
Terdapat kebutaan tertentu hanya dengan garis rata dan isyarat MACD masuk
Tidak mempertimbangkan mekanisme penarikan diri daripada kerugian, risiko peningkatan kerugian
Kekurangan pengurusan dana dan kawalan kedudukan yang ketat
Mungkin penyelesaian:
Menghadapi risiko dengan mengehadkan jangkauan turun naik jangka pendek
Mengoptimumkan parameter MACD untuk menguji keberkesanan di pasaran yang berbeza
Tambah bentuk, faktor seperti Momentum untuk mengesahkan isyarat
Menubuhkan mekanisme halangan kerugian untuk mengelakkan kerugian tunggal yang berlebihan
Menambah modul pengurusan wang untuk mengawal kedudukan tunggal mengikut saiz wang
Uji optimasi kombinasi parameter rata-rata untuk lebih banyak keadaan pasaran
Cuba jenis talian rata yang berbeza, seperti VWAP, talian tengah pita dan lain-lain
Meningkatkan pertimbangan untuk mengelakkan penembusan palsu
Indikator RSI dan lain-lain yang mengesahkan kegemilangan
Menubuhkan mekanisme penghadaman yang baik, seperti penghadaman bergerak, penghadaman gegaran dan sebagainya
Menyertai mekanisme pengurusan kedudukan, mengawal kedudukan tunggal mengikut saiz dana
Pengoptimuman parameter yang digabungkan dengan algoritma pembelajaran mesin boleh dipertimbangkan
Strategi Pelancaran Universe, Pelancaran Pelaburan Portfolio
Strategi ini mengintegrasikan penilaian trend dua garis rata dan indikator dinamik MACD, menambah ciri bentuk, dan membina strategi perdagangan jangka menengah yang agak stabil. Kelebihan utamanya adalah untuk memahami arah trend utama dan mengelakkan gangguan oleh bunyi pasaran jangka pendek. Tetapi ada juga ruang untuk pengoptimuman, seperti mekanisme halangan, pengurusan risiko, dan sebagainya.
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Histogram MacD MVP_V2.1", shorttitle="Histogram MacD MVP_2.1")
//Plot Inputs
res = input.timeframe("", "Indicator TimeFrame")
fast_length = input.int(title="Fast Length", defval=12)
slow_length = input.int(title="Slow Length", defval=26)
src = input.source(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Show Plots T/F
show_macd = input.bool(true, title="Show MACD Lines", group="Show Plots?", inline="SP10")
show_macd_LW = input.int(3, minval=0, maxval=5, title = "MACD Width", group="Show Plots?", inline="SP11")
show_signal_LW= input.int(2, minval=0, maxval=5, title = "Signal Width", group="Show Plots?", inline="SP11")
show_Hist = input.bool(true, title="Show Histogram", group="Show Plots?", inline="SP20")
show_hist_LW = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP20")
show_trend = input.bool(true, title = "Show MACD Lines w/ Trend Color", group="Show Plots?", inline="SP30")
show_HB = input.bool(false, title="Show Highlight Price Bars", group="Show Plots?", inline="SP40")
show_cross = input.bool(false, title = "Show BackGround on Cross", group="Show Plots?", inline="SP50")
show_dots = input.bool(true, title = "Show Circle on Cross", group="Show Plots?", inline="SP60")
show_dots_LW = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP60")
//show_trend = input(true, title = "Colors MACD Lines w/ Trend Color", group="Show Plots?", inline="SP5")
// MACD Lines colors
col_macd = input.color(#FF6D00, "MACD Line ", group="Color Settings", inline="CS1")
col_signal = input.color(#2962FF, "Signal Line ", group="Color Settings", inline="CS1")
col_trnd_Up = input.color(#4BAF4F, "Trend Up ", group="Color Settings", inline="CS2")
col_trnd_Dn = input.color(#B71D1C, "Trend Down ", group="Color Settings", inline="CS2")
// Histogram Colors
col_grow_above = input.color(#26A69A, "Above Grow", group="Histogram Colors", inline="Hist10")
col_fall_above = input.color(#FF5252, "Fall", group="Histogram Colors", inline="Hist10")
col_grow_below = input.color(#FF5252, "Below Grow", group="Histogram Colors", inline="Hist20")
col_fall_below = input.color(#f8f524, "Fall", group="Histogram Colors", inline="Hist20")
// Alerts T/F Inputs
alert_Long = input.bool(true, title = "MACD Cross Up", group = "Alerts", inline="Alert10")
alert_Short = input.bool(true, title = "MACD Cross Dn", group = "Alerts", inline="Alert10")
alert_Long_A = input.bool(false, title = "MACD Cross Up & > 0", group = "Alerts", inline="Alert20")
alert_Short_B = input.bool(false, title = "MACD Cross Dn & < 0", group = "Alerts", inline="Alert20")
// Calculating
fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length))
slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length))
macd = fast_ma - slow_ma
signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length))
hist = macd - signal
// MACD Trend and Cross Up/Down conditions
trend_up = macd > signal
trend_dn = macd < signal
cross_UP = signal[1] >= macd[1] and signal < macd
cross_DN = signal[1] <= macd[1] and signal > macd
cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0
cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0
// Condition that changes Color of MACD Line if Show Trend is turned on..
trend_col = show_trend and trend_up ? col_trnd_Up : trend_up ? col_macd : show_trend and trend_dn ? col_trnd_Dn: trend_dn ? col_macd : na
//Var Statements for Histogram Color Change
var bool histA_IsUp = false
var bool histA_IsDown = false
var bool histB_IsDown = false
var bool histB_IsUp = false
histA_IsUp := hist == hist[1] ? histA_IsUp[1] : hist > hist[1] and hist > 0
histA_IsDown := hist == hist[1] ? histA_IsDown[1] : hist < hist[1] and hist > 0
histB_IsDown := hist == hist[1] ? histB_IsDown[1] : hist < hist[1] and hist <= 0
histB_IsUp := hist == hist[1] ? histB_IsUp[1] : hist > hist[1] and hist <= 0
hist_col = histA_IsUp ? col_grow_above : histA_IsDown ? col_fall_above : histB_IsDown ? col_grow_below : histB_IsUp ? col_fall_below :color.silver
// Plot Statements
//Background Color
bgcolor(show_cross and cross_UP ? col_trnd_Up : na, editable=false)
bgcolor(show_cross and cross_DN ? col_trnd_Dn : na, editable=false)
//Highlight Price Bars
barcolor(show_HB and trend_up ? col_trnd_Up : na, title="Trend Up", offset = 0, editable=false)
barcolor(show_HB and trend_dn ? col_trnd_Dn : na, title="Trend Dn", offset = 0, editable=false)
//Regular Plots
plot(show_Hist and hist ? hist : na, title="Histogram", style=plot.style_columns, color=color.new(hist_col ,0),linewidth=show_hist_LW)
plot(show_macd and signal ? signal : na, title="Signal", color=color.new(col_signal, 0), style=plot.style_line ,linewidth=show_signal_LW)
plot(show_macd and macd ? macd : na, title="MACD", color=color.new(trend_col, 0), style=plot.style_line ,linewidth=show_macd_LW)
hline(0, title="0 Line", color=color.new(color.gray, 0), linestyle=hline.style_dashed, linewidth=1, editable=false)
plot(show_dots and cross_UP ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)
plot(show_dots and cross_DN ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)
//Alerts
if alert_Long and cross_UP
alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Up.", alert.freq_once_per_bar_close)
if alert_Short and cross_DN
alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Down.", alert.freq_once_per_bar_close)
//Alerts - Stricter Condition - Only Alerts When MACD Crosses UP & MACD > 0 -- Crosses Down & MACD < 0
if alert_Long_A and cross_UP_A
alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD > 0 And Crosses Up.", alert.freq_once_per_bar_close)
if alert_Short_B and cross_DN_B
alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD < 0 And Crosses Down.", alert.freq_once_per_bar_close)
if (histA_IsUp)
strategy.entry("buy", strategy.long, comment="buy")
if (histA_IsDown)
strategy.entry("sell", strategy.short, comment="sell")