Strategi Masa Rata-rata Bergerak Diferensial Osilator

Penulis:ChaoZhang, Tarikh: 2023-12-26 14:40:12
Tag:

img

Ringkasan

Strategi ini mengira perbezaan antara EMA cepat dan EMA perlahan untuk membentuk osilator MACD, dan mengira EMA MACD itu sendiri untuk membentuk garis isyarat, dengan itu membina sistem penapisan berganda.

Prinsip Strategi

Indikator teras strategi ini adalah pengayun MACD, yang dikira dengan mengurangkan EMA perlahan (biasanya 26 hari EMA) dari EMA pantas (biasanya 12 hari EMA). EMA pantas lebih sensitif dan dapat menangkap turun naik harga jangka pendek. EMA perlahan bertindak balas terhadap perubahan harga lebih perlahan. Mengurangkan kedua-dua membentuk pengayun yang mewakili perbezaan antara kitaran harga jangka pendek dan jangka sederhana. EMA (biasanya 9 hari) pengayun MACD itu sendiri kemudian dikira untuk mendapatkan garis isyarat. Apabila isyarat MACD melintasi di atas garis isyarat MAC di bawah, ia menandakan bahawa momentum kenaikan trend jangka pendek lebih kuat daripada trend jangka sederhana, menjana isyarat beli.

Parameter input strategi ini ditetapkan untuk panjang garis pantas, panjang garis perlahan, sumber harga, dan tempoh pelunturan garis isyarat, masing-masing. Ini boleh diselaraskan mengikut pasaran yang berbeza untuk mencari kombinasi parameter yang optimum. Blok warna latar belakang menunjukkan jangka masa backtest. Strategi ini membuka kedudukan hanya dalam jangka masa ini.

Analisis Kelebihan

  1. Indikator MACD adalah klasik dan mudah difahami, dengan berkesan menangkap peluang pembalikan jangka pendek hingga sederhana.

  2. Pembinaan EMA berganda sistem MACD mempunyai kelancaran yang lebih baik daripada sistem MA tunggal.

  3. Parameter yang agak lebih boleh diselaraskan membolehkan pengoptimuman di pasaran yang berbeza.

  4. Menggabungkan dengan penunjuk jumlah membantu mengenal pasti isyarat berkualiti tinggi.

Analisis Risiko

  1. MACD boleh menghasilkan lebih banyak isyarat palsu dalam pasaran berayun.

  2. Ia tidak dapat menentukan trend dan boleh menghasilkan kerugian apabila melintasi trend.

  3. Jangka masa backtest yang terhad mungkin mengabaikan keadaan pasaran yang melampau.

  4. Penyesuaian parameter memerlukan lebih banyak data pasaran untuk mengelakkan terlalu sesuai dengan tempoh pasaran tertentu.

Risiko boleh dikawal dengan menggabungkan penunjuk trend dan mekanisme stop loss. skop backtest dan ruang sampel pasaran boleh diperluas untuk pengoptimuman parameter.

Arahan pengoptimuman

  1. Uji sumber harga yang berbeza seperti harga dekat, median, harga semula dan lain-lain.

  2. Cari set parameter optimum berdasarkan data sejarah yang lebih.

  3. Mengintegrasikan penunjuk lain untuk menilai kualiti isyarat, contohnya isyarat kelantangan.

  4. Menggabungkan analisis trend dan kitaran untuk mengelakkan konflik trend yang ketara.

Kesimpulan

Strategi ini menangkap peluang pembalikan jangka pendek hingga sederhana dengan membina sistem penapisan EMA berganda. Ia adalah sebahagian daripada strategi masa pasaran klasik dan praktikal. Risiko boleh dikawal melalui pengoptimuman parameter, penapisan isyarat dan cara menghentikan kerugian. Menggabungkan alat analisis trend untuk mengelakkan membeli puncak dan menjual bahagian bawah boleh membawa kepada keuntungan yang stabil.


/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")

// Getting inputs
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

grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)

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)

//Strategy Testing

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

//Entry and Close settings
if testPeriod() 
    strategy.entry("grow", true, 10, when = grow, limit = close)
    strategy.close("grow", when = fall)
    strategy.close("grow", when = stop)
    
//if testPeriod() 
//   strategy.entry("fall", false, 1000, when = fall, limit = close)
//    strategy.close("fall", when = grow)    



Lebih lanjut