Strategi Penembusan Jangkauan MACD Stochastics

Penulis:ChaoZhang, Tanggal: 2023-12-11 11:48:27
Tag:

img

Gambaran umum

Strategi Breakout Rentang Stochastics MACD menggabungkan indikator MACD dan Stochastics menjadi strategi perdagangan kuantitatif.

Ketika mengambil posisi, strategi ini mempertimbangkan sinyal dari MACD dan Stochastics untuk meningkatkan kualitas entri.

Logika Strategi

Strategi MACD Stochastics Range Breakout didasarkan pada prinsip-prinsip berikut:

  1. Indikator MACD dapat secara efektif mengidentifikasi arah dan momentum tren harga
  2. Indikator stokastik dapat melihat kondisi overbought atau oversold dari saham
  3. Ketika harga saham telah berkisar untuk jangka waktu tertentu, gerakan arah yang signifikan setelah memecahkan kisaran sebelumnya kemungkinan terjadi
  4. Menggabungkan sinyal dari MACD dan Stochastics pada rentang breakout memungkinkan entri tepat waktu dan meningkatkan kualitas

Secara khusus, strategi ini menggunakan garis MACDDIFF melintasi garis DEA untuk menentukan sinyal tren bullish atau bearish.

Sementara itu, persilangan antara garis K dan garis D Stochastics di sekitar area overbought/oversold (default 30 dan 70) juga menghasilkan sinyal perdagangan.

Ketika MACD dan Stochastics memberikan sinyal yang selaras, strategi akan mengambil posisi.

Setelah masuk, titik stop loss dan take profit diatur untuk secara rasional mengendalikan kerugian perdagangan tunggal dan mengunci keuntungan.

Kekuatan

Strategi Breakout Range MACD Stochastics memiliki kekuatan berikut:

  1. Menggabungkan indikator meningkatkan kualitas sinyal

    Menggunakan kedua MACD dan Stochastics menyaring beberapa sinyal palsu dan memungkinkan kualitas entri yang lebih baik.

  2. Menangkap gerakan breakout dan perdagangan tren

    Strategi ini mengkhususkan diri dalam menangkap gerakan breakout yang signifikan setelah berkisar. Gerakan ini cenderung besar.

  3. Mekanisme stop loss/take profit yang dioptimalkan secara efektif mengendalikan risiko

    Logika stop loss/take profit yang dibangun secara masuk akal membatasi kerugian perdagangan tunggal dan kunci keuntungan yang tepat waktu.

Risiko

Meskipun dirancang dengan hati-hati, Strategi Penembusan Jangkauan Stochastics MACD memiliki beberapa risiko yang melekat:

  1. Kehilangan waktu masuk yang sempurna

    Penembusan palsu adalah hal yang umum sebelum penembusan yang valid terjadi. Waktu masuk yang tidak optimal dapat mengakibatkan harga masuk terbaik yang hilang.

  2. Kegagalan melarikan diri

    Sementara persiapan yang memadai dilakukan sebelum masuk, kegagalan breakouts masih mungkin, yang menyebabkan kerugian.

  3. Optimasi parameter yang tidak benar

    Pengaturan parameter yang tidak tepat sangat merusak kinerja strategi.

Untuk mengatasi risiko di atas, optimasi berikut dapat diadopsi:

  1. Menambahkan indikator lain ke sinyal filter

  2. Intervensi manual untuk memastikan penyebaran yang valid

  3. Tes optimasi parameter multi-set yang ketat

Arahan Optimasi

Masih ada ruang untuk optimasi lebih lanjut dari Strategi Breakout Range MACD Stochastics:

  1. Mengoptimalkan parameter MACD untuk menemukan kombinasi terbaik

  2. Mengoptimalkan parameter Stochastics untuk menemukan kombinasi terbaik

  3. Menggabungkan indikator lain seperti KDJ, BOLL untuk meningkatkan kualitas entri

  4. Uji periode holding yang berbeda, optimalkan stop loss/take profit

  5. Perbedaan parameter lintas aset uji

  6. Memperkenalkan algoritma pembelajaran mesin untuk optimasi parameter otomatis

Kesimpulan

MACD Stochastics Range Breakout Strategy memanfaatkan rentang breakout dengan masuk berdasarkan sinyal yang selaras dari MACD dan Stochastics. Mekanisme stop loss / take profit lebih mengendalikan risiko.


/*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)

Lebih banyak