Trend MACD Crossover Dual Moving Average Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2024-01-23 11:22:02
Tag:

img

Ringkasan

Strategi ini adalah strategi dagangan automatik berdasarkan silang purata bergerak ganda penunjuk teknikal MACD. Ia menggunakan silang garis isyarat MACD untuk menentukan arah trend untuk trend berikut.

Logika Strategi

Strategi ini mula-mula mengira tiga garis penunjuk MACD: garisan pantas, garisan perlahan dan histogram. Garis pantas adalah purata bergerak yang lebih cepat dalam tempoh yang lebih singkat sementara garis perlahan adalah purata bergerak yang lebih perlahan dalam tempoh yang lebih lama. Histogram adalah perbezaan antara garis pantas dan perlahan. Apabila garis pantas melintasi di atas garis perlahan, ia adalah isyarat salib emas yang menunjukkan isyarat beli. Apabila garis pantas melintasi di bawah garis perlahan, ia adalah isyarat salib kematian yang menunjukkan isyarat jual.

Strategi ini menggunakan logik ini untuk pergi panjang pada salib emas dan kedudukan dekat pada salib kematian; atau pergi pendek pada salib kematian dan kedudukan dekat pada salib emas untuk mengikuti trend secara automatik. Sementara itu, strategi ini juga menilai sama ada garis MACD mutlak positif atau negatif untuk mengelakkan isyarat palsu dan memastikan benar-benar menangkap titik pembalikan trend.

Kelebihan Strategi

  • Menggunakan silang purata bergerak berganda untuk menentukan arah trend dengan tepat dan menangkap pembalikan trend
  • Indikator teknikal MACD mengurangkan isyarat palsu dan meningkatkan kualiti isyarat
  • Fleksibiliti untuk pergi panjang atau pendek atau hanya panjang/pendek
  • Parameter yang boleh diselaraskan memenuhi persekitaran pasaran yang berbeza

Risiko Strategi

  • Crossover purata bergerak berganda mempunyai kesan kelewatan, mungkin kehilangan keuntungan separa pada permulaan pembalikan
  • Indikator MACD terdedah kepada isyarat palsu semasa penyatuan pasaran
  • Parameter perlu disesuaikan dengan betul untuk mengelakkan terlalu sensitif atau inert

Pengurangan Risiko:

  • Gabungkan dengan penunjuk lain untuk menapis isyarat
  • Penyesuaian parameter kepada kekerapan dagangan yang lebih rendah
  • Mengambil strategi hanya apabila trend adalah jelas

Kawasan Peningkatan

Strategi ini boleh ditingkatkan dari aspek berikut:

  1. Menggabungkan penunjuk lain seperti KDJ, Bollinger Bands dll untuk mengesahkan isyarat dan menapis isyarat palsu

  2. Meningkatkan mekanisme kemasukan, contohnya menambah penapis pecah untuk mengelakkan kemasukan awal atau lewat

  3. Mengoptimumkan tetapan parameter, menyesuaikan tempoh baris pantas dan perlahan berdasarkan jangka masa yang berbeza dan rejim pasaran

  4. Tambah stop loss untuk mengawal kerugian perdagangan tunggal

  5. Mengembangkan kepada produk lain seperti forex, mata wang kripto dan lain-lain

Ringkasan

Strategi berikut trend MACD menggunakan penunjuk MACD untuk menentukan arah trend digabungkan dengan penyambungan garis isyarat untuk menapis isyarat dengan berkesan dan menangkap pembalikan trend untuk trend automatik. Kelebihan terletak pada penghakiman trend yang tepat, penyesuaian parameter yang fleksibel untuk memenuhi persekitaran pasaran. Pengurusan risiko adalah penting untuk mengelakkan isyarat palsu. pengoptimuman lanjut dengan penunjuk teknikal tambahan dan penyesuaian parameter dapat meningkatkan prestasi strategi.


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")


Lebih lanjut