Sumber dimuat naik... memuat...

Strategi Dagangan Kuantitatif Berdasarkan Corak Pembalikan di Tahap Sokongan dan Rintangan

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

img

Ringkasan

Strategi ini berdasarkan corak pembalikan (hammer, engulfing, dan doji) dan tahap sokongan dan rintangan dalam analisis teknikal, berdagang pada carta 1 jam.

Idea utama strategi ini adalah untuk memasuki kedudukan panjang apabila corak pembalikan bullish (seperti tukul, menelan bullish, atau doji) muncul berhampiran tahap sokongan, dan untuk memasuki kedudukan pendek apabila corak pembalikan bearish (seperti tukul, menelan bearish, atau doji) muncul berhampiran tahap rintangan.

Logika Strategi

  1. Mengira paras terendah dan tertinggi dalam tempoh yang ditentukan menggunakan fungsi ta.lowest() dan ta.highest() untuk menentukan tahap sokongan dan rintangan.
  2. Periksa sama ada lilin semasa membentuk tukul, corak menelan, atau doji.
  3. Jika corak pembalikan bullish muncul berhampiran tahap sokongan, masukkan kedudukan panjang; jika corak pembalikan bearish muncul berhampiran tahap rintangan, masukkan kedudukan pendek.
  4. Tetapkan harga mengambil keuntungan sebanyak 3% di atas harga permulaan dan harga hentian kerugian sebanyak 1% di bawah harga permulaan.
  5. Tutup kedudukan apabila harga mencapai tahap mengambil keuntungan atau hentikan kerugian.

Kelebihan Strategi

  1. Menggabungkan corak pembalikan dan tahap sokongan dan rintangan utama, meningkatkan kebolehpercayaan isyarat perdagangan.
  2. Menetapkan tahap keuntungan dan stop loss yang jelas, mengawal risiko dengan berkesan.
  3. Sesuai untuk kedua-dua pasaran trend dan berkisar, menangkap peluang pembalikan yang berpotensi.
  4. Kod yang mudah dan mudah difahami, memudahkan pelaksanaan.

Risiko Strategi

  1. Dalam pasaran yang berbeza, isyarat pembalikan yang kerap boleh menyebabkan perdagangan berlebihan dan kerugian komisen.
  2. Penentuan tahap sokongan dan rintangan bergantung kepada pilihan tempoh melihat kembali, dan tempoh melihat kembali yang berbeza boleh membawa kepada hasil yang berbeza.
  3. Kebolehpercayaan corak pembalikan tidak mutlak, dan isyarat palsu boleh mengakibatkan kerugian.

Penyelesaian:

  1. Sesuaikan parameter dan keadaan pengesahan corak pembalikan untuk mengurangkan isyarat palsu.
  2. Menggabungkan penunjuk teknikal atau sentimen pasaran lain untuk meningkatkan kebolehpercayaan isyarat.
  3. Sesuaikan tahap mengambil keuntungan dan menghentikan kerugian dengan sewajarnya untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

Arahan Pengoptimuman Strategi

  1. Memperkenalkan penunjuk jumlah untuk mengesahkan kesahihan corak pembalikan. corak pembalikan dengan jumlah perdagangan yang tinggi mungkin lebih dipercayai.
  2. Pertimbangkan tahap sokongan dan rintangan dari pelbagai bingkai masa untuk meningkatkan ketepatan tahap sokongan dan rintangan.
  3. Menggabungkan penunjuk trend, seperti purata bergerak, untuk berdagang ke arah trend dan mengelakkan perdagangan yang bertentangan dengan trend.
  4. Mengoptimumkan tahap mengambil keuntungan dan menghentikan kerugian dengan menyesuaikan secara dinamik berdasarkan turun naik pasaran untuk mencapai nisbah risiko-balasan yang lebih baik.

Ringkasan

Strategi ini menangkap peluang perdagangan yang berpotensi dengan mengenal pasti corak pembalikan berhampiran tahap sokongan dan rintangan. Ia mudah digunakan dan boleh digunakan untuk persekitaran pasaran yang berbeza. Walau bagaimanapun, kejayaan strategi bergantung pada pengenalan corak pembalikan dan tahap sokongan dan rintangan yang tepat. Dengan mengoptimumkan keadaan pengesahan isyarat perdagangan, menggabungkan penunjuk teknikal lain, dan menyesuaikan secara dinamik mengambil keuntungan dan tahap hentian kerugian, prestasi strategi dapat ditingkatkan lagi.


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