
Strategi ini menghasilkan isyarat perdagangan dengan mengira indikator MACD dan garis pilar MACD, mengesan isyarat penyingkiran antara garis pilar MACD dan pergerakan harga. Apabila harga tinggi baru dikesan tetapi garis pilar MACD tidak mencipta tinggi baru, menghasilkan isyarat penyingkiran turun; apabila harga rendah baru dikesan tetapi garis pilar MACD tidak mencipta rendah baru, menghasilkan isyarat penyingkiran turun.
Prinsip utama strategi ini adalah menggunakan indikator MACD dan ciri-ciri MACD yang mencerminkan perubahan trend harga untuk mengesan isyarat yang tidak sesuai antara MACD dan harga sebagai pemicu isyarat perdagangan.
Secara khusus, strategi pertama mengira garis MACD, garis isyarat dan garis MACD. Kemudian, dengan menentukan fungsi fraktal, mendeteksi puncak dan lembah garis MACD, mengekstrak nilai tertinggi dan terendah tempatan. Kemudian menggabungkan harga tertinggi dan terendah, untuk menentukan sama ada terdapat perbezaan antara garis MACD dan harga.
Apabila harga mencipta tinggi baru, tetapi garisan MACD tidak mencipta tinggi baru, menghasilkan regulark_bearish_div turun dari isyarat; apabila harga mencipta rendah baru, tetapi garisan MACD tidak mencipta rendah baru, menghasilkan regulark_bullish_div melihat turun dari isyarat.
Akhirnya, strategi mengeluarkan arahan untuk melakukan short dan long apabila terdapat isyarat untuk turun dan turun, dan keluar dari kedudukan dengan ATR stop loss dan stop loss.
Strategi ini mempunyai beberapa kelebihan:
Dengan menggunakan ciri-ciri jarak antara garis tiang MACD dan harga, perubahan trend harga dapat ditangkap lebih awal.
ATR Stop Loss Stop setting adalah munasabah dan berkesan untuk mengawal kerugian maksimum dalam satu transaksi.
Menggunakan kaedah trend-following untuk mengunci keuntungan maksimum.
Tetapan parameter adalah munasabah dan boleh menapis sebahagian daripada isyarat urus niaga bising.
Strategi logik yang jelas dan mudah difahami, mudah untuk disahkan di lapangan.
Strategi ini mempunyai beberapa risiko:
Jika MACD berpatah balik, ia tidak semestinya akan membawa kepada perubahan harga, dan terdapat risiko untuk isyarat palsu.
Tetapan stop loss yang tidak munasabah boleh menyebabkan kerugian yang terlalu besar atau keuntungan yang terlalu kecil.
Jarak pendek dari isyarat, mungkin disebabkan oleh bunyi bising, harus disaring dengan betul.
Tidak sepadan antara jenis dagangan dan parameter juga boleh menjejaskan kesan strategi.
Penyelesaian:
Meningkatkan panjang dan lebar yang sesuai untuk menapis isyarat palsu.
Menggunakan ATR sebagai penunjuk stop loss dan menyesuaikan ATR untuk mengawal risiko perdagangan tunggal.
Memilih parameter yang berbeza untuk pelbagai jenis perdagangan. Mengoptimumkan parameter untuk mencari kombinasi parameter terbaik.
Strategi ini juga boleh dioptimumkan dengan cara berikut:
Pengesahan yang lebih kompleks, seperti pengesahan yang tidak sesuai dengan jumlah.
Mengoptimumkan parameter MACD, mencari kombinasi parameter terbaik.
Mengoptimumkan ATR Stop Loss Stop Stop multiplier.
Menambah algoritma pembelajaran mesin untuk membantu menilai kebolehpercayaan isyarat yang menyimpang.
Menambah ramalan model untuk menilai kebarangkalian harga berbalik.
Mengubah parameter strategi secara dinamik mengikut perubahan keadaan pasaran.
Secara keseluruhannya, indikator MACD yang dipetik oleh Piaggio ini bertolak ansur dengan strategi pengesanan trend, menggunakan ciri-ciri pengalihan antara garis tiang MACD dan harga, untuk menangkap trend. ATR Stop Loss Setup adalah munasabah, dan risiko perdagangan tunggal dapat dikendalikan.
/*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)