Trend Mengikuti Strategi Berdasarkan Purata Bergerak dan MACD

Penulis:ChaoZhang, Tarikh: 2023-11-15 15:58:19
Tag:

img

Ringkasan

Strategi ini menggabungkan purata bergerak dan penunjuk MACD untuk menentukan trend dan menjana isyarat perdagangan. Ia tergolong dalam strategi trend berikut yang tipikal. Ia menggunakan dua purata bergerak ZLSMA dari bingkai masa yang berbeza untuk menentukan arah trend, dan persilangan MACD untuk menjana isyarat beli dan jual tertentu. Ini membolehkan ia menangkap dengan berkesan trend jangka menengah hingga panjang sambil mengelakkan disesatkan oleh bunyi pasaran jangka pendek.

Logika Strategi

Strategi ini terdiri daripada komponen utama berikut:

  1. ZLSMA pantas dan ZLSMA perlahan: Membandingkan purata bergerak ZLSMA dari bingkai masa yang berbeza menentukan arah trend keseluruhan. Garis pantas terdiri daripada ZLSMA 32 tempoh, dan garis perlahan terdiri daripada ZLSMA 400 tempoh. Apabila garis pantas melintasi di atas garis perlahan, ia adalah isyarat menaik, dan sebaliknya.

  2. Indikator MACD: MACD dikira dengan mengurangkan garis perlahan (EMA 26 tempoh) dari garis pantas (EMA 12 tempoh). Garis isyarat adalah EMA 9 tempoh MACD. Apabila MACD melintasi di atas garis isyarat, ia adalah isyarat beli, dan apabila MACD melintasi di bawah garis isyarat, ia adalah isyarat jual.

  3. Isyarat perdagangan: Isyarat beli dan jual dihasilkan hanya apabila arah trend ZLSMA sejajar dengan isyarat persilangan MACD. Khususnya, pergi panjang apabila trend bull bertepatan dengan salib emas MACD, dan pergi pendek apabila trend bear bertepatan dengan salib kematian MACD.

  4. Hentikan kerugian dan ambil keuntungan: Strategi ini pada masa ini tidak termasuk logik hentikan kerugian dan ambil keuntungan, yang memerlukan pengoptimuman lanjut.

Gabungan menggunakan purata bergerak untuk menentukan trend utama dan MACD untuk masa kemasukan dapat menapis pecah palsu dengan berkesan dan mengelakkan ditipu oleh kebisingan pasaran jangka pendek.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Menangkap trend: Menggunakan purata bergerak jangka masa yang berbeza untuk menentukan arah trend membolehkan perdagangan dengan trend dan menangkap trend jangka menengah hingga panjang dengan berkesan.

  2. Menyaring bunyi bising: Menggunakan penunjuk MACD membantu menyaring bunyi bising pasaran jangka pendek dan mengelakkan disesatkan oleh pasaran yang kecil.

  3. Parameter yang boleh disesuaikan: Tempoh purata bergerak dan parameter MACD boleh disesuaikan dan boleh dioptimumkan untuk pasaran yang berbeza.

  4. Mudah dilaksanakan: Semua penunjuk yang digunakan adalah penunjuk teknikal biasa. Logik strategi adalah mudah dan jelas, mudah difahami dan dilaksanakan.

  5. Risiko yang boleh dikawal: Dengan stop loss dan mengambil keuntungan yang jelas, risiko dan ganjaran setiap perdagangan dapat dikawal.

Analisis Risiko

Risiko utama strategi ini ialah:

  1. Penentuan trend yang salah: Jika trend utama ditentukan dengan salah, semua perdagangan boleh mengakibatkan kerugian.

  2. Pengoptimuman parameter yang tidak betul: Parameter purata bergerak dan MACD mesti diuji dan dioptimumkan dengan teliti, jika tidak, hasilnya mungkin tidak memuaskan.

  3. Kekurangan stop loss: Pada masa ini tidak ada stop loss, menimbulkan risiko kerugian yang terlalu besar.

  4. Potensi keuntungan yang terhad: Sebagai strategi trend, potensi keuntungan setiap perdagangan terhad, yang memerlukan jumlah yang tinggi untuk meningkatkan keuntungan.

  5. Frekuensi dagangan yang tinggi: Penyesuaian parameter yang tidak betul boleh menyebabkan kekerapan dagangan yang berlebihan, meningkatkan kos urus niaga dan slippage.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Tambah mekanisme stop loss: Tetapkan titik stop loss yang betul untuk mengawal kerugian maksimum setiap perdagangan.

  2. Mengoptimumkan parameter: Backtest dan mengoptimumkan untuk mencari kombinasi purata bergerak dan parameter MACD yang optimum.

  3. Frekuensi perdagangan yang lebih rendah: Sesuaikan parameter untuk memastikan isyarat perdagangan hanya dihasilkan apabila trend dinyatakan.

  4. Sertakan faktor lain: Faktor seperti perubahan jumlah boleh ditambah untuk mengesahkan trend dan isyarat.

  5. Meningkatkan masa kemasukan: Tambah meningkatkan penggunaan MACD untuk meningkatkan ketepatan kemasukan.

  6. Membuat aplikasi sejagat: Mengoptimumkan parameter untuk menjadikan strategi boleh digunakan secara meluas di seluruh produk yang berbeza, memperluaskan penerapan.

Kesimpulan

Kesimpulannya, strategi ini berkesan menangkap trend jangka menengah hingga panjang melalui gabungan purata bergerak dan MACD yang mudah namun berkesan, menjadikannya asas strategi perdagangan kuantitatif yang kukuh. Tetapi parameter memerlukan pengoptimuman lanjut, risiko memerlukan kawalan yang lebih baik, dan faktor lain harus dimasukkan untuk mencapai hasil yang lebih konsisten. Ia mempunyai nilai praktikal dan banyak ruang untuk peningkatan.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-10 05:00:00
period: 1m
basePeriod: 1m
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/
// © veryfid

//@version=5
strategy("Stratégie ZLSMA Bruno", shorttitle="Stratégie ZLSMA Bruno", overlay=false)

source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

//res = useCurrentRes ? period : resCustom

fastLength = input(12), 
slowLength=input(26)
signalLength=input(9)

fastMA = ta.ema(source, fastLength)
slowMA = ta.ema(source, slowLength)

macd = fastMA - slowMA
signal = ta.sma(macd, signalLength)
hist = macd - signal

outMacD =  macd
outSignal = signal
outHist =  hist

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

//plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? color.lime : color.red : color.red
//signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
//plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
//plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
//plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and ta.cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=plot.style_circles, linewidth=4, color=macd_color)
hline(0, '0 Line', linestyle=hline.style_solid, linewidth=2, color=color.white)

// Paramètres de la ZLSMA
length = input(32, title="Longueur")
offset = input(0, title="Décalage")
src = input(close, title="Source")
lsma = ta.linreg(src, length, offset)
lsma2 = ta.linreg(lsma, length, offset)
eq = lsma - lsma2
zlsma = lsma + eq

length_slow = input(400, title="Longueur")
offset_slow = input(0, title="Décalage")
lsma_slow = ta.linreg(src, length_slow, offset_slow)
lsma2_slow = ta.linreg(lsma_slow, length_slow, offset_slow)
eq_slow = lsma_slow - lsma2_slow
zlsma_slow = lsma_slow + eq_slow

// Paramètres de la sensibilité
sensitivity = input(0.5, title="Sensibilité")

// Règles de trading
longCondition = zlsma < zlsma_slow and  zlsma_slow < zlsma_slow[1] and zlsma > zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime//ta.crossover(zlsma, close) and ta.crossover(zlsma, zlsma[1]) // Croisement vers le haut
shortCondition = zlsma > zlsma_slow and  zlsma_slow > zlsma_slow[1] and zlsma < zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime   //ta.crossunder(zlsma, close) and ta.crossunder(zlsma, zlsma[1]) // Croisement vers le bas

// Entrée en position
strategy.entry("Achat", strategy.long, when=longCondition)
strategy.entry("Vente", strategy.short, when=shortCondition)
botifySignalZLSMA = longCondition ? 1 : shortCondition ? -1 : 0
plot(botifySignalZLSMA, title='Botify_signal', display=display.none)
// Sortie de position
strategy.close("Achat", when=ta.crossunder(zlsma, close)) // Close the "Achat" position
strategy.close("Vente", when=ta.crossover(zlsma, close)) // Close the "Vente" position


// Tracé de la courbe ZLSMA
plot(zlsma, color=color.yellow, linewidth=3)
plot(zlsma_slow, color=color.red, linewidth=3)



Lebih lanjut