
Strategi ini menggunakan prinsip dua garis sejajar, menggabungkan penghakiman tren dari indikator MACD dan titik-titik yang menonjol di latar belakang, ditambah dengan titik bentuk, dengan tujuan untuk menangkap tren pertengahan pasar. Logika utama adalah masuk saat terjadi pergeseran ke arah garis sejajar, melalui titik-titik yang menonjol di latar belakang MACD, dengan penghakiman perubahan warna grafik MACD.
Strategi menggunakan EMA cepat dan EMA lambat untuk membangun dua garis rata-rata, dan garis cepat dan lambat untuk menentukan arah tren. Pada saat yang sama, menghitung MACD dan sinyal, dengan perbedaan yang digambarkan sebagai garis lurus.
Menurut kode, panjang garis cepat adalah 12, panjang garis lambat adalah 26, untuk menunjukkan tren jangka pendek dan jangka panjang. Panjang sinyal adalah 9, untuk pemrosesan tambahan.
Logika silang:
Pengadilan:
Perubahan warna pada grafik vertikal untuk menilai intensitas tren:
Menggunakan dua garis ekuivalen untuk menentukan arah tren jangka menengah, menghindari gangguan dari kebisingan pasar jangka pendek
Indikator MACD membantu menentukan tren dan intensitas jangka pendek, meningkatkan probabilitas keuntungan
Perubahan warna pada grafik vertikal menentukan besarnya intensitas, untuk mengetahui waktu masuk yang lebih baik
Warna latar belakang titik persimpangan, terlihat dengan jelas
Siklus rata-rata yang dapat disesuaikan untuk menyesuaikan dengan kondisi pasar yang berbeda
Parameter MACD dapat disesuaikan untuk mengoptimalkan efek indikator
Berbagai cara untuk mengkonfirmasi masuk: arah garis rata, penunjuk silang, bentuk terobosan
Pengadilan Binary Equity: Tren jangka menengah tidak sensitif terhadap fluktuasi jangka pendek dan mungkin melewatkan peluang garis pendek
Parameter MACD tidak disetel dengan benar, indikator tidak bekerja dengan baik, sinyal yang salah
Ada kebutaan tertentu hanya dengan masuknya garis rata-rata dan sinyal MACD
Tidak mempertimbangkan mekanisme penarikan diri dari kerugian, ada risiko peningkatan kerugian
Kurangnya manajemen dana dan kontrol posisi yang ketat
Solusi yang mungkin
Tergabung dengan indikator lain untuk membatasi jangka pendek fluktuasi, mengendalikan risiko
Mengoptimalkan parameter MACD untuk menguji efek dari pasar yang berbeda
Tambahkan bentuk, Momentum dan faktor lainnya untuk mengkonfirmasi sinyal
Membangun mekanisme penghentian kerugian untuk menghindari kerugian tunggal yang terlalu besar
Menambahkan Modul Manajemen Uang untuk Mengontrol Posisi Tunggal Berdasarkan Ukuran Uang
Uji optimasi kombinasi parameter rata-rata untuk lebih banyak situasi pasar
Cobalah berbagai jenis rata-rata, seperti VWAP, Brin-band-medium, dan lain-lain.
Pertimbangan untuk meningkatkan volume lalu lintas dan menghindari terobosan palsu
Indikator seperti RSI dan lain-lain mengkonfirmasi overbought dan oversold.
Membangun mekanisme penutupan yang baik, seperti penutupan bergerak, penutupan getaran, dan sebagainya
Menambahkan mekanisme manajemen posisi, yang mengontrol posisi tunggal berdasarkan ukuran dana
Optimasi parameter yang digabungkan dengan algoritma pembelajaran mesin dapat dipertimbangkan
Strategi ekspansi Universe, arah investasi portofolio yang lebih dalam
Strategi ini mengintegrasikan penilaian tren dua garis rata dan indikator dinamika MACD, menambahkan fitur bentuk, dan membangun strategi perdagangan jangka menengah yang relatif stabil. Keunggulan inti adalah memahami arah tren utama dan menghindari gangguan oleh kebisingan pasar jangka pendek. Namun, ada juga beberapa ruang untuk pengoptimalan, seperti mekanisme stop loss, manajemen risiko, dan sebagainya. Secara keseluruhan, strategi ini memiliki nilai referensi yang bagus sebagai bukti konsep, tetapi posisi terdepan masih perlu diuji dan disesuaikan secara menyeluruh.
/*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")