Sumber dimuat naik... memuat...

Strategi Pengesanan Trend Berbilang Jangka Masa Berdasarkan Impulse MACD dan Crossover Purata Bergerak Berganda

Penulis:ChaoZhang, Tarikh: 2024-05-17 15:33:02
Tag:MACDSMMASMAZLEMAEMAMA

img

Ringkasan

Strategi ini menggunakan pelbagai penunjuk purata bergerak, termasuk SMMA, SMA, ZLEMA, dan EMA, dan membina penunjuk MACD yang lebih baik (MACD Impuls) berdasarkan mereka. Ia menghasilkan isyarat perdagangan melalui persilangan Impulse MACD dan garis isyaratnya. Idea utama strategi ini adalah untuk menangkap trend pasaran menggunakan purata bergerak bingkai masa yang berbeza sambil mengesahkan kekuatan dan arah trend dengan Impulse MACD.

Prinsip Strategi

  1. Mengira SMMA dan ZLEMA harga tinggi, rendah, dan dekat dengan panjang 34 untuk mendapatkan Impulse MACD (MD).
  2. Mengira SMA 9 tempoh Impulse MACD sebagai garis isyarat (SB).
  3. Mengira perbezaan antara Impulse MACD dan garis isyarat (SH) untuk mencerminkan kekuatan trend.
  4. Menghasilkan isyarat beli apabila Impulse MACD melintasi di atas garis isyarat, dan menutup kedudukan apabila melintasi di bawah.
  5. Menggambar histogram Impulse MACD dengan warna yang berbeza berdasarkan hubungan antara harga, Impulse MACD, dan harga tinggi / rendah SMMA untuk mencerminkan kekuatan trend secara visual.

Kelebihan Strategi

  1. Penggunaan pelbagai jenis purata bergerak memberikan gambaran yang lebih komprehensif mengenai trend pasaran.
  2. Penunjuk MACD yang diperbaiki (Impulse MACD) mengambil kira kedudukan relatif harga dan purata bergerak, mencerminkan kekuatan trend dengan lebih baik.
  3. Pengenalan garis isyarat membantu menapis beberapa isyarat palsu dan meningkatkan kualiti isyarat.
  4. Menggambar Impulse MACD dengan warna yang berbeza berdasarkan kekuatan trend memudahkan penilaian intuitif pergerakan pasaran.

Risiko Strategi

  1. Pemilihan parameter yang tidak betul boleh menyebabkan isyarat yang kerap atau tertinggal, yang memerlukan pengoptimuman berdasarkan pasaran dan jangka masa yang berbeza.
  2. Strategi ini boleh menghasilkan lebih banyak isyarat palsu dan menyebabkan kerugian di pasaran yang bergolak.
  3. Strategi ini tidak mempunyai mekanisme stop-loss dan mungkin menghadapi penurunan yang ketara di pasaran yang tidak menentu.

Arahan Pengoptimuman Strategi

  1. Memperkenalkan penunjuk pengenalan trend seperti ADX untuk hanya berdagang apabila trendnya jelas, mengurangkan kerugian di pasaran yang bergolak.
  2. Memastikan isyarat dagangan yang dihasilkan dengan penunjuk lain seperti RSI dan ATR untuk meningkatkan kualiti isyarat.
  3. Menetapkan paras stop-loss dan mengambil keuntungan yang munasabah untuk mengawal risiko perdagangan tunggal.
  4. Mengoptimumkan parameter menggunakan kaedah seperti algoritma genetik untuk mencari kombinasi parameter yang optimum.

Ringkasan

Strategi ini membina penunjuk MACD yang lebih baik berdasarkan pelbagai jenis purata bergerak dan menghasilkan isyarat dagangan melalui persilangan dengan garis isyarat sambil secara intuitif memaparkan kekuatan trend. Idea keseluruhan jelas, dan kelebihan jelas. Walau bagaimanapun, strategi ini juga mempunyai batasan tertentu, seperti kemampuan beradaptasi yang buruk dengan pasaran yang bergolak dan kekurangan langkah kawalan risiko. Penambahbaikan lanjut boleh dipertimbangkan dari aspek seperti pengenalan trend, pengesahan isyarat, kawalan risiko, dan pengoptimuman parameter untuk meningkatkan ketahanan dan keuntungan strategi.


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

//@version=5
strategy("Impulse MACD Strategy [LazyBear]", shorttitle="IMACD_Strategy", overlay=false)

// Function to calculate SMMA
calc_smma(src, len) =>
    var float smma = na
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

// Function to calculate SMA
	ta.sma(src, len)
    sum = 0.0
    for i = 0 to len - 1
        sum := sum + src[i]
    sum / len

// Function to calculate ZLEMA
calc_zlema(src, length) =>
    var float ema1 = na
    var float ema2 = na
    var float d = na
    ema1 := ta.ema(src, length)
    ema2 := ta.ema(ema1, length)
    d := ema1 - ema2
    ema1 + d

// Function to calculate EMA
calc_ema(src, len) =>
    ema = 0.0
    ema := ta.ema(src, len)
    ema

// Inputs
lengthMA = input(34, title="Length of Moving Average")
lengthSignal = input(9, title="Length of Signal Line")

// Calculations
src = hlc3
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA) 

md = mi > hi ? (mi - hi) : mi < lo ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? src > hi ? color.lime : color.green : src < lo ? color.red : color.orange

// Plotting
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(md, color=mdc, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(sh, color=color.blue, linewidth=2, title="ImpulseHisto", style=plot.style_histogram)
plot(sb, color=color.maroon, linewidth=2, title="ImpulseMACDCDSignal")

// Execute trades based on signals
if (ta.crossover(md, sb))
    strategy.entry("Buy", strategy.long)
if (ta.crossunder(md, sb))
    strategy.close("Buy")


Berkaitan

Lebih lanjut