
Strategi MACD Stochastics Oscillation Breakout adalah strategi perdagangan kuantitatif yang menggabungkan indikator MACD dan indikator Stochastics. Strategi ini cuba mengenal pasti arah trend harga saham dan memasuki kedudukan apabila harga keluar dari zona goyah.
Apabila memasuki kedudukan, strategi ini mengambil kira isyarat kedua-dua penunjuk MACD dan Stochastics untuk meningkatkan kualiti Entries. Di samping itu, strategi ini menetapkan titik berhenti dan titik berhenti, yang dapat mengawal risiko dengan berkesan.
Strategi penembusan gelombang MACD Stochastics adalah berdasarkan prinsip berikut:
Khususnya, strategi ini menggunakan garis DIFF dan garis DEA yang bersilang dalam indikator MACD sebagai isyarat untuk menentukan arah trend harga. Apabila DIFF melangkaui DEA ke atas, ia menghasilkan isyarat multihead dan sebaliknya menghasilkan isyarat kosong.
Pada masa yang sama, garis K Stochastics yang melintas ke atas atau ke bawah dengan garis D berhampiran kawasan overbought dan oversold (default 30 dan 70) juga menghasilkan isyarat perdagangan.
Strategi ini akan memilih untuk masuk apabila MACD dan Stochastics memberi isyarat yang sama. Pada masa ini, harga saham kemungkinan besar akan menghasilkan penembusan yang lebih besar.
Selepas masuk, strategi akan menetapkan titik berhenti dan titik berhenti yang munasabah. Hentian yang munasabah dapat mengawal kerugian tunggal dengan berkesan, dan berhenti dapat mengunci keuntungan.
Strategi penembusan gelombang MACD Stochastics mempunyai kelebihan berikut:
Strategi ini menggunakan kedua-dua penunjuk MACD dan Stochastics untuk menyaring beberapa isyarat palsu dan meningkatkan kualiti Entries.
Strategi ini direka khas untuk menangkap pergerakan pecah selepas pergerakan harga saham yang berpanjangan.
Strategi ini mempunyai seting stop loss yang boleh mengawal kerugian tunggal dengan bijak dan mengunci keuntungan tepat pada masanya.
Walaupun strategi penembusan gelombang MACD Stochastics dirancang dengan berhati-hati, terdapat risiko tertentu:
Sebelum harga saham mencapai titik penembusan, mungkin terdapat beberapa keadaan penembusan palsu. Jika masa masuk dipilih dengan tidak betul, ia boleh menyebabkan masuk ini menjadi titik masuk yang terlewat.
Walaupun persediaan telah dibuat sebelum penembusan, masih ada kemungkinan bahawa penembusan gagal. Dalam kes ini, kerugian akan berlaku.
Tetapan parameter strategi mempunyai kesan yang besar terhadap hasilnya. Jika parameter tidak ditetapkan dengan betul, anda akan mendapat diskaun yang besar.
Untuk mengatasi risiko ini, anda boleh mengoptimumkan dengan:
Gabungan penapis lain
Campur tangan manusia memastikan kedudukan terobosan
Ujian pengoptimuman parameter pelbagai kumpulan
Strategi penembusan gelombang MACD Stochastics masih mempunyai ruang untuk pengoptimuman lebih lanjut:
Mengoptimumkan parameter MACD untuk mencari kombinasi parameter terbaik
Mengoptimumkan parameter Stochastics untuk mencari kombinasi parameter terbaik
Menambah kombinasi penunjuk lain, seperti KDJ, BOLL dan lain-lain, untuk meningkatkan kualiti Entries
Uji tempoh pegangan yang berbeza untuk mengoptimumkan strategi hentian dan hentian
Uji kepelbagaian parameter dalam pelbagai tanda dagangan
Menambah algoritma pembelajaran mesin, parameter pengoptimuman automatik
Strategi penembusan gelombang gelombang MACD Stochastics menggunakan kedua-dua indikator MACD dan Stochastics secara komprehensif, masuk ke dalam kualiti yang tinggi semasa terobosan gelombang gelombang, dan seterusnya. Pada masa yang sama, strategi penangguhan kerugian yang berkesan mengawal risiko. Strategi ini menangkap trend jangka pendek harga saham, dan mempunyai kelebihan perdagangan tertentu.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval = 180)
slow_length = input(title = "Slow Length", defval = 390)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 500, defval = 135)
sma_source = input.string(title = "Oscillator MA Type", defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
// hline(0, "Zero Line", color = color.new(#787B86, 50))
// plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
// plot(macd, title = "MACD", color = #2962FF)
// plot(signal, title = "Signal", color = #FF6D00)
periodK = input.int(14, title="%K Length", minval=1)
smoothK = input.int(1, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
// plot(k, title="%K", color=#2962FF)
// plot(d, title="%D", color=#FF6D00)
// h0 = hline(80, "Upper Band", color=#787B86)
// hline(50, "Middle Band", color=color.new(#787B86, 50))
// h1 = hline(20, "Lower Band", color=#787B86)
// fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")
// Make inputs that set the take profit % (optional)
longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01
shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01
// Calculate trading conditions
enterLong = macd>signal and ta.crossover(k,30)
enterShort = macd<signal and ta.crossunder(k,70)
// Figure out take profit price
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
// Plot take profit values for confirmation
plot(strategy.position_size > 0 ? longExitPrice : na,
color=color.green, style=plot.style_circles,
linewidth=3, title="Long Take Profit")
plot(strategy.position_size < 0 ? shortExitPrice : na,
color=color.red, style=plot.style_circles,
linewidth=3, title="Short Take Profit")
// Submit entry orders
if enterLong
strategy.entry("long", strategy.long)
if enterShort
strategy.entry("short", strategy.short)
// STEP 3:
// Submit exit orders based on take profit price
if strategy.position_size > 0
strategy.exit("long TP", limit=longExitPrice)
if strategy.position_size < 0
strategy.exit("short TP", limit=shortExitPrice)