Semigod Candlestick MACD Divergence Trend Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2024-02-04 15:06:58
Tag:

img

Ringkasan

Strategi ini mengira penunjuk MACD dan histogram MACD untuk mengesan isyarat perbezaan antara histogram MACD dan pergerakan harga, dengan itu menjana isyarat perdagangan. Apabila harga tinggi baru tetapi tidak ada tinggi baru dalam histogram MACD dikesan, isyarat perbezaan menurun dihasilkan. Apabila harga rendah baru tetapi tidak ada rendah baru dalam histogram MACD dikesan, isyarat perbezaan menaik dihasilkan. Digabungkan dengan isyarat ATR untuk berhenti kerugian dan mengambil keuntungan, ia menjalankan perdagangan mengikut trend.

Logika Strategi

Prinsip teras strategi ini adalah untuk menggunakan penunjuk MACD dan histogram MACD untuk mencerminkan perubahan dalam trend harga, dan mengesan isyarat perbezaan antara histogram MACD dan harga sebagai keadaan pencetus untuk isyarat perdagangan.

Secara khusus, strategi ini mula-mula mengira garis MACD, garis isyarat dan histogram MACD. Kemudian dengan menentukan fungsi fraktal untuk mengesan puncak dan lembah histogram MACD untuk mengekstrak maksimum dan minimum tempatan. Digabungkan dengan harga tertinggi dan harga terendah, ia menentukan sama ada terdapat perbezaan antara histogram MACD dan harga.

Apabila harga mencapai paras tertinggi baru tetapi histogram MACD tidak mencapai paras tertinggi baru, isyarat divergensi penurunan regular_bearish_div dihasilkan. Apabila harga turun ke paras rendah baru tetapi histogram MACD tidak turun ke paras rendah baru, isyarat divergensi kenaikan regular_bullish_div dihasilkan.

Akhirnya, apabila isyarat divergen bearish dan bullish dihasilkan, strategi mengeluarkan pesanan pendek dan panjang masing-masing, dan keluar dari kedudukan dengan ATR stop loss dan mengambil keuntungan.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Dengan menggunakan ciri perbezaan antara histogram MACD dan harga, ia boleh menangkap perubahan dalam trend harga lebih awal.

  2. Tetapan stop loss dan mengambil keuntungan ATR adalah munasabah untuk mengawal kerugian maksimum setiap dagangan dengan berkesan.

  3. Menggunakan kaedah trend berikut boleh memaksimumkan keuntungan terkunci.

  4. Tetapan parameter yang munasabah menapis beberapa isyarat perdagangan yang bising.

  5. Logik strategi adalah jelas dan mudah difahami, mudah disahkan dalam perdagangan langsung.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Perbezaan MACD tidak semestinya membawa kepada pembalikan harga, terdapat beberapa risiko isyarat palsu.

  2. Tetapan stop loss dan mengambil keuntungan yang tidak munasabah boleh menyebabkan kerugian berlebihan atau keuntungan yang tidak mencukupi.

  3. Isyarat pembezaan dengan kitaran pendek mungkin disebabkan oleh bunyi bising dan harus disaring dengan betul.

  4. Produk perdagangan yang tidak serasi dan tetapan parameter juga akan mempengaruhi prestasi strategi.

Penyelesaian yang sepadan:

  1. Meningkatkan panjang dan saiz keperluan perbezaan untuk menapis isyarat palsu.

  2. Menggunakan ATR sebagai penanda aras stop loss dan mengambil keuntungan, menyesuaikan kelipatan ATR untuk mengawal risiko setiap perdagangan.

  3. Pilih parameter yang berbeza untuk produk perdagangan yang berbeza. Melakukan pengoptimuman parameter untuk mencari kombinasi parameter yang optimum.

Arahan pengoptimuman

Strategi ini juga boleh dioptimumkan ke arah berikut:

  1. Pengesahan perbezaan yang lebih kompleks, seperti pengesahan perbezaan jumlah.

  2. Mengoptimumkan parameter MACD untuk mencari kombinasi parameter yang terbaik.

  3. Mengoptimumkan kelipatan ATR stop loss dan mengambil keuntungan.

  4. Tambah algoritma pembelajaran mesin untuk membantu menilai kebolehpercayaan isyarat perbezaan.

  5. Tambah ramalan model untuk menentukan kebarangkalian pembalikan harga.

  6. Sesuaikan parameter strategi secara dinamik mengikut perubahan keadaan pasaran.

Ringkasan

Ringkasnya, Strategi Mengikuti Trend Divergence MACD ini menggunakan perbezaan antara histogram MACD dan harga untuk menangkap trend. Tetapan stop loss dan mengambil keuntungan ATR yang munasabah dapat mengawal risiko setiap perdagangan. Logik strategi jelas dan mudah difahami, bernilai disahkan dalam perdagangan langsung. Pengoptimuman susulan boleh dibuat dalam banyak aspek untuk mendapatkan hasil yang lebih baik.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bigwin_sun
// copyright: Tradingvue Limited    

//@version = 5
strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100)

//macd input
fastMA = input.int(13, title = "fast Length", minval = 1,     group = "CDMA")
slowMA = input.int(34, title = "slow Length", minval = 1,     group = "CDMA")
src          = input.source(title = "source", defval = close, group = "CDMA")
signalSmooth = input.int(9, title="ma Length", minval = 1,    group = "CDMA")
//Divergenc
divLength    = input.int(title = "Divergenc Length",   defval = 5, minval = 1,   maxval = 50,  inline = "ATRLength",  group = "Divergence")
divStren     = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength",  group = "Divergence")

//atr input
atrLength = input.int(13, title = "ATR Length", minval = 1,   inline = "ATRLength", group = "ATR")
m         = input.float(1.0,  "ATR multyple",   minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5)
collong   = input.color(color.teal, title = "upper color",  inline = "ATR显示", group = "ATR")
colshort  = input.color(color.red,  title = "under color",  inline = "ATR显示", group = "ATR")

// MACD---------------------------------------------------------------------------------------------------------------------------------
DivOffset = -2
macdLine   = ta.ema(src, fastMA) - ta.ema(src, slowMA)    
signalLine = ta.ema(macdLine, signalSmooth)
histogram  = macdLine - signalLine

histogramColor = if histogram > 0
    histogram > histogram[1] ? color.lime : color.green
else 
    histogram < histogram[1] ? color.maroon : color.red

// cdma histogram
plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor)
plot(0,         title = "zero line",      linewidth = 1,                               color = color.gray)

// Divergenc calculation-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//peak / valley fundation
f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

//peak / valley value
fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na
fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na

//previouse peak or valley
high_prev1  = ta.valuewhen(fractal_top1, histogram[2], 0)[2]
high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2]
low_prev1   = ta.valuewhen(fractal_bot1, histogram[2], 0)[2]
low_price1  = ta.valuewhen(fractal_bot1, low[2], 0)[2]

//Divergenc : cdma histogram against candle value
regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength
regular_bullish_div1 = low[2]  < low_price1 - divStren  and histogram[2] > low_prev1 / divStren  and ta.barssince(fractal_bot1[1]) > divLength

//-------------------------cdma Divergenc range------------------------------------------------
//histogramColor
col1 = regular_bearish_div1 ? color.red : na
col2 = regular_bullish_div1 ? #00FF00EB : na
//plot
plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset)
plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset)

// calculate ATR				--------------------------------------------------------------------------------------------------------------------------------------------------
atr = ta.ema(ta.tr(true), atrLength) * m
up = atr + high
dw = low - atr

//stratety : enrty and exit---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if regular_bearish_div1 and fractal_top1
//if regular_bullish_div1 and fractal_bot1
    //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray,  style = label.style_label_lower_left)
    strategy.entry("Short", strategy.short, qty = 1)
    strategy.exit("exitShort", "Short", stop = up, limit = dw - atr)
if regular_bullish_div1 and fractal_bot1
//if regular_bearish_div1 and fractal_top1   
    //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left)
	strategy.entry("Long", strategy.long, qty = 1)
    strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)


Lebih lanjut