Sumber daya yang dimuat... Pemuatan...

Strategi perdagangan kuantitatif berdasarkan pola pembalikan pada level support dan resistance

Penulis:ChaoZhang, Tanggal: 2024-06-07 16:45:09
Tag:

img

Gambaran umum

Strategi ini didasarkan pada pola pembalikan (hammer, engulfing, dan doji) dan level support dan resistance dalam analisis teknis, perdagangan pada grafik 1 jam.

Ide utama dari strategi ini adalah untuk memasuki posisi panjang ketika pola pembalikan bullish (seperti palu, bullish engulfing, atau doji) muncul di dekat level support, dan untuk memasuki posisi pendek ketika pola pembalikan bearish (seperti palu, bearish engulfing, atau doji) muncul di dekat level resistance.

Logika Strategi

  1. Menghitung terendah terendah dan tertinggi tertinggi dalam periode lookback yang ditentukan menggunakan fungsi ta.lowest() dan ta.highest() untuk menentukan level support dan resistance.
  2. Periksa apakah lilin saat ini membentuk palu, pola menelan, atau doji.
  3. Jika pola pembalikan bullish muncul di dekat level support, masukkan posisi long; jika pola pembalikan bearish muncul di dekat level resistance, masukkan posisi short.
  4. Atur harga take profit sebesar 3% di atas harga masuk dan harga stop loss sebesar 1% di bawah harga masuk.
  5. Tutup posisi ketika harga mencapai level take profit atau stop loss.

Keuntungan Strategi

  1. Menggabungkan pola pembalikan dan tingkat dukungan dan resistensi utama, meningkatkan keandalan sinyal perdagangan.
  2. Menentukan tingkat profit dan stop loss yang jelas, mengontrol risiko secara efektif.
  3. Cocok untuk pasar yang sedang tren dan bervariatif, menangkap peluang pembalikan potensial.
  4. Kode yang sederhana dan mudah dimengerti, memudahkan implementasi.

Risiko Strategi

  1. Di pasar yang berkisar, sinyal pembalikan yang sering dapat menyebabkan overtrading dan kerugian komisi.
  2. Identifikasi level support dan resistance tergantung pada pilihan periode lookback, dan periode lookback yang berbeda dapat menghasilkan hasil yang berbeda.
  3. Keandalan pola pembalikan tidak mutlak, dan sinyal palsu dapat mengakibatkan kerugian.

Solusi:

  1. Sesuaikan parameter dan kondisi konfirmasi pola pembalikan untuk mengurangi sinyal palsu.
  2. Menggabungkan indikator teknis lainnya atau indikator sentimen pasar untuk meningkatkan keandalan sinyal.
  3. Sesuaikan tingkat mengambil keuntungan dan stop loss sesuai dengan kondisi pasar yang berbeda.

Arah Optimasi Strategi

  1. Memperkenalkan indikator volume untuk mengkonfirmasi validitas pola pembalikan.
  2. Pertimbangkan level support dan resistance dari beberapa kerangka waktu untuk meningkatkan akurasi level support dan resistance.
  3. Menggabungkan indikator tren, seperti rata-rata bergerak, untuk berdagang ke arah tren dan menghindari perdagangan kontra-tren.
  4. Mengoptimalkan tingkat mengambil keuntungan dan stop loss dengan menyesuaikan secara dinamis berdasarkan volatilitas pasar untuk mencapai rasio risiko-manfaat yang lebih baik.

Ringkasan

Strategi ini menangkap peluang perdagangan potensial dengan mengidentifikasi pola pembalikan di dekat level support dan resistance. Ini sederhana untuk digunakan dan berlaku untuk lingkungan pasar yang berbeda. Namun, keberhasilan strategi tergantung pada identifikasi yang akurat dari pola pembalikan dan level support dan resistance. Dengan mengoptimalkan kondisi konfirmasi sinyal perdagangan, menggabungkan indikator teknis lainnya, dan secara dinamis menyesuaikan tingkat take profit dan stop loss, kinerja strategi dapat ditingkatkan lebih lanjut.


/*backtest
start: 2024-05-07 00:00:00
end: 2024-06-06 00:00:00
period: 2h
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/
// © Kingcoinmilioner

//@version=5
strategy("Reversal Patterns at Support and Resistance", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Parameters
support_resistance_lookback = input.int(50, title="Support/Resistance Lookback Period")
reversal_tolerance = input.float(0.01, title="Reversal Tolerance (percent)", step=0.01) / 100
take_profit_percent = input.float(3, title="Take Profit (%)") / 100
stop_loss_percent = input.float(1, title="Stop Loss (%)") / 100

// Functions to identify key support and resistance levels
findSupport() =>
    ta.lowest(low, support_resistance_lookback)

findResistance() =>
    ta.highest(high, support_resistance_lookback)

// Identify reversal patterns
isHammer() =>
    body = math.abs(close - open)
    lowerWick = open > close ? (low < close ? close - low : open - low) : (low < open ? open - low : close - low)
    upperWick = high - math.max(open, close)
    lowerWick > body * 2 and upperWick < body

isEngulfing() =>
    (close[1] < open[1] and close > open and close > open[1] and open < close[1]) 
    (close[1] > open[1] and close < open and close < open[1] and open > close[1])

isDoji() =>
    math.abs(open - close) <= (high - low) * 0.1

// Identify support and resistance levels
support = findSupport()
resistance = findResistance()

// Check for reversal patterns at support and resistance
hammerAtSupport = isHammer() and (low <= support * (1 + reversal_tolerance))
engulfingAtSupport = isEngulfing() and (low <= support * (1 + reversal_tolerance))
dojiAtSupport = isDoji() and (low <= support * (1 + reversal_tolerance))

hammerAtResistance = isHammer() and (high >= resistance * (1 - reversal_tolerance))
engulfingAtResistance = isEngulfing() and (high >= resistance * (1 - reversal_tolerance))
dojiAtResistance = isDoji() and (high >= resistance * (1 - reversal_tolerance))

// Trading logic
if (hammerAtSupport or engulfingAtSupport or dojiAtSupport)
    strategy.entry("Long", strategy.long)
    stop_level = low * (1 - stop_loss_percent)
    take_profit_level = close * (1 + take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Long", stop=stop_level, limit=take_profit_level)

if (hammerAtResistance or engulfingAtResistance or dojiAtResistance)
    strategy.entry("Short", strategy.short)
    stop_level = high * (1 + stop_loss_percent)
    take_profit_level = close * (1 - take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Short", stop=stop_level, limit=take_profit_level)

// Plot support and resistance levels for visualization
plot(support, color=color.green, linewidth=1, title="Support Level")
plot(resistance, color=color.red, linewidth=1, title="Resistance Level")

// Plot reversal patterns on the chart for visualization
plotshape(series=hammerAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer at Support")
plotshape(series=engulfingAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Engulfing at Support")
plotshape(series=dojiAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Doji at Support")

plotshape(series=hammerAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Hammer at Resistance")
plotshape(series=engulfingAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulfing at Resistance")
plotshape(series=dojiAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Doji at Resistance")


Lebih banyak