Strategi Perdagangan Breakout dengan Skalabilitas

Penulis:ChaoZhang, Tanggal: 2023-10-30 17:25:17
Tag:

img

Gambaran umum

Strategi perdagangan breakout yang dapat diskalakan menghasilkan sinyal perdagangan ketika harga melanggar level support dan resistance utama yang diidentifikasi oleh perubahan harga. Ini adalah strategi breakout yang sangat fleksibel dan dapat diperluas. Strategi ini dapat disesuaikan dengan kerangka waktu yang berbeda dengan menyesuaikan parameter dan dapat dengan mudah mengintegrasikan filter tambahan dan mekanisme manajemen risiko untuk optimasi.

Cara Kerjanya

Strategi pertama menggunakanswings()fungsi untuk menghitung swing high dan low berdasarkan periode lookback.swingLookbacksinyal panjang dipicu ketika harga melanggar di atas swing tinggi, dan sinyal pendek dipicu ketika harga melanggar di bawah swing rendah.

Secara khusus, sinyal panjang dipicu ketika harga penutupan lebih besar atau sama dengan harga swing high.

Strategi ini juga menetapkan target penghentian berdasarkanstopTargetPercentparameter untuk menentukan tingkat stop loss. Misalnya, stop loss panjang dapat ditetapkan pada 5% di bawah swing high, dan stop loss pendek dapat ditetapkan pada 5% di atas swing low.

Keuntungan dari strategi ini adalah fleksibilitas untuk menyesuaikan periode lookback untuk mengontrol frekuensi perdagangan. Periode lookback yang lebih pendek membuatnya lebih sensitif terhadap breakout dan meningkatkan frekuensi perdagangan. Periode lookback yang lebih lama mengurangi sensitivitas dan frekuensi perdagangan tetapi mungkin kehilangan peluang. Menemukan periode lookback yang optimal sangat penting untuk mengoptimalkan strategi.

Keuntungan

  • Logika breakout sederhana, mudah dipahami dan diterapkan
  • Periode lookback memungkinkan mengoptimalkan parameter dan mengontrol frekuensi perdagangan
  • Mudah mengintegrasikan stop loss, trailing stop dan manajemen risiko lainnya
  • Sangat dapat diperluas untuk menambahkan filter dan meningkatkan profitabilitas
  • Berlaku pada setiap kerangka waktu untuk perdagangan intraday atau swing

Risiko dan Pengurangan

  • Periode review yang terlalu pendek dapat menyebabkan overtrading
  • Periode review yang terlalu panjang dapat kehilangan peluang perdagangan
  • Stop loss yang terlalu luas mengurangi potensi keuntungan
  • Stop loss yang terlalu ketat dapat berhenti sering

Pengurangan:

  • Uji periode lookback yang berbeda untuk menemukan parameter optimal
  • Optimalkan tingkat stop loss untuk menyeimbangkan keuntungan vs kontrol risiko
  • Tambahkan trailing stop atau lampu gantung keluar untuk mengunci keuntungan
  • Tambahkan filter untuk meningkatkan kualitas sinyal perdagangan
  • Mengoptimalkan parameter melalui backtesting

Peluang Peningkatan

Strategi ini dapat ditingkatkan dengan beberapa cara:

  1. Uji nilai periode lookback yang berbeda untuk menemukan parameter optimal.

  2. Uji kerangka waktu yang berbeda seperti 5m, 15m, 1h untuk menentukan kerangka waktu terbaik.

  3. Optimalkan persentase stop loss untuk menyeimbangkan potensi keuntungan vs manajemen risiko.

  4. Tambahkan filter seperti volume, volatilitas untuk mengurangi pengaturan yang lebih rendah.

  5. Mengintegrasikan lebih banyak mekanisme manajemen risiko seperti trailing stop, mengambil keuntungan.

  6. Optimasi parameter melalui analisis berjalan maju dan pembelajaran mesin.

  7. Memperkenalkan AI / pembelajaran mesin untuk optimasi otomatis parameter.

Kesimpulan

Strategi perdagangan breakout yang dapat diskalakan adalah sistem breakout yang kuat dan dapat disesuaikan. Sangat mudah digunakan dan sangat mudah beradaptasi dengan menyesuaikan lookback dan menambahkan filter. Ini dapat dengan mudah mengintegrasikan manajemen risiko untuk pengendalian risiko. Dengan optimasi parameter dan integrasi pembelajaran mesin, strategi dapat berevolusi dari waktu ke waktu untuk beradaptasi dengan perubahan pasar. Secara keseluruhan, ini adalah strategi breakout universal yang direkomendasikan.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © deperp

//@version=5
// strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

// Backtest Time Period

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2020"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingLookback = input.int(20, title="Swing Lookback", minval=3)
stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1)

// Calculate lockback swings
swings(len) =>
    var highIndex = bar_index
    var lowIndex = bar_index
    var swingHigh = float(na)
    var swingLow = float(na)
    
    upper = ta.highest(len)
    lower = ta.lowest(len)
    
    if high[len] > upper
        highIndex := bar_index[len]
        swingHigh := high[len]

    if low[len] < lower
        lowIndex := bar_index[len]
        swingLow := low[len]

    [swingHigh, swingLow, highIndex, lowIndex]


// Strategy logic
[swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback)
longCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortCondition = inTradeWindow and (ta.crossunder(close, swingLow))

if longCondition
    strategy.entry("Long", strategy.long)
if shortCondition
    strategy.entry("Short", strategy.short)

longStopTarget = close * (1 + stopTargetPercent / 100)
shortStopTarget = close * (1 - stopTargetPercent / 100)

strategy.exit("Long Stop Target", "Long", limit=longStopTarget)
strategy.exit("Short Stop Target", "Short", limit=shortStopTarget)

// Plot break lines
// line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right)
// line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right)


// Alert conditions for entry and exit
longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow))

longExitCondition = close >= longStopTarget
shortExitCondition = close <= shortStopTarget

alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position")
alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position")
alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position")
alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")

Lebih banyak