Semigod Candlestick MACD Divergence Trend Mengikuti Strategi

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

img

Gambaran umum

Strategi ini menghitung indikator MACD dan histogram MACD untuk mendeteksi sinyal divergensi antara histogram MACD dan pergerakan harga, sehingga menghasilkan sinyal perdagangan. Ketika harga tinggi baru tetapi tidak ada tinggi baru dalam histogram MACD terdeteksi, sinyal divergensi bearish dihasilkan. Ketika harga rendah baru tetapi tidak ada rendah baru dalam histogram MACD terdeteksi, sinyal divergensi bullish dihasilkan. Dikombinasikan dengan indikator ATR untuk stop loss dan take profit, ia melakukan perdagangan mengikuti tren.

Logika Strategi

Prinsip inti dari strategi ini adalah untuk memanfaatkan indikator MACD dan histogram MACD untuk mencerminkan perubahan tren harga, dan mendeteksi sinyal divergensi antara histogram MACD dan harga sebagai kondisi pemicu untuk sinyal perdagangan.

Secara khusus, strategi ini pertama menghitung garis MACD, garis sinyal dan histogram MACD. Kemudian dengan mendefinisikan fungsi fraktal untuk mendeteksi puncak dan lembah histogram MACD untuk mengekstrak maksimum dan minimum lokal. Dikombinasikan dengan harga tertinggi dan harga terendah, ia menentukan apakah ada perbedaan antara histogram MACD dan harga.

Ketika harga mencapai titik tertinggi baru tetapi histogram MACD tidak mencapai titik tertinggi baru, sinyal divergensi bearish regular_bearish_div dihasilkan. Ketika harga turun ke titik rendah baru tetapi histogram MACD tidak turun ke titik rendah baru, sinyal divergensi bullish regular_bullish_div dihasilkan.

Akhirnya, ketika sinyal divergensi bearish dan bullish dihasilkan, strategi mengeluarkan pesanan pendek dan panjang masing-masing, dan keluar dari posisi dengan ATR stop loss dan take profit.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Dengan memanfaatkan fitur divergensi antara histogram MACD dan harga, dapat menangkap perubahan tren harga lebih awal.

  2. Pengaturan stop loss dan take profit ATR wajar untuk mengontrol kerugian maksimum per perdagangan secara efektif.

  3. Menggunakan metode trend berikut dapat memaksimalkan keuntungan terkunci.

  4. Pengaturan parameter yang masuk akal menyaring beberapa sinyal perdagangan yang bising.

  5. Logika strategi yang jelas dan mudah dipahami, mudah untuk memvalidasi dalam perdagangan langsung.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Divergensi MACD tidak selalu mengarah pada pembalikan harga, ada beberapa risiko sinyal palsu.

  2. Pengaturan stop loss dan take profit yang tidak wajar dapat menyebabkan kerugian yang berlebihan atau keuntungan yang tidak cukup.

  3. Sinyal divergensi dengan siklus pendek dapat disebabkan oleh kebisingan dan harus disaring dengan benar.

  4. Produk perdagangan dan pengaturan parameter yang tidak kompatibel juga akan mempengaruhi kinerja strategi.

Solusi yang sesuai:

  1. Tingkatkan panjang dan ukuran persyaratan divergensi untuk menyaring sinyal palsu.

  2. Menggunakan ATR sebagai titik stop loss dan mengambil profit benchmark, menyesuaikan kelipatan ATR untuk mengendalikan risiko per perdagangan.

  3. Pilih parameter yang berbeda untuk produk perdagangan yang berbeda. Lakukan optimasi parameter untuk menemukan kombinasi parameter yang optimal.

Arahan Optimasi

Strategi ini juga dapat dioptimalkan dalam arah berikut:

  1. Konfirmasi divergensi yang lebih kompleks, seperti konfirmasi divergensi volume.

  2. Mengoptimalkan parameter MACD untuk menemukan kombinasi parameter terbaik.

  3. Optimalkan kelipatan ATR stop loss dan ambil keuntungan.

  4. Tambahkan algoritma pembelajaran mesin untuk membantu menilai keandalan sinyal divergensi.

  5. Tambahkan prediksi model untuk menentukan probabilitas pembalikan harga.

  6. Sesuaikan parameter strategi secara dinamis sesuai dengan perubahan kondisi pasar.

Ringkasan

Secara singkat, Strategi Mengikuti Tren Divergensi MACD Candi Demigod ini memanfaatkan divergensi antara histogram MACD dan harga untuk menangkap tren. Pengaturan stop loss dan take profit ATR yang wajar dapat mengendalikan risiko per perdagangan. Logika strategi jelas dan mudah dipahami, layak divalidasi dalam perdagangan langsung. Optimasi tindak lanjut dapat dilakukan 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 banyak