Strategi Backtesting Breakout Tinggi-Rendah


Tanggal Pembuatan: 2023-11-27 15:37:13 Akhirnya memodifikasi: 2023-11-27 15:37:13
menyalin: 0 Jumlah klik: 693
1
fokus pada
1621
Pengikut

Strategi Backtesting Breakout Tinggi-Rendah

Ringkasan

Strategi penarikan rendah dan tinggi adalah strategi pelacakan tren yang menggunakan harga saham untuk menentukan apakah harga telah melampaui titik tinggi dan rendah dalam sejarah saham tersebut. Dengan menghitung harga tertinggi dan terendah dalam periode tertentu, ini menghasilkan sinyal beli ketika harga periode saat ini melebihi harga tertinggi dalam periode tertentu terakhir. Ketika harga turun dari harga terendah dalam periode tertentu terakhir, ini menghasilkan penjualan.

Prinsip Strategi

Logika inti dari strategi ini adalah menghitung harga tertinggi dan terendah dalam periode tertentu (dengan 50 garis K default). Untuk menghitung harga tertinggi dan terendah, Anda dapat memilih untuk menggunakan harga closeout atau harga tertinggi dan terendah (dengan harga tertinggi dan terendah default). Kemudian, pertimbangkan apakah harga closeout atau harga tertinggi pada garis K saat ini melebihi harga tertinggi dalam periode tertentu, dan jika demikian, dan jarak antara harga tertinggi dan yang terendah dalam periode tertentu (dengan 30 garis K default).

Setelah menghasilkan sinyal beli, strategi akan membeli pada harga tersebut dan mengatur harga stop loss dan stop loss. Ketika harga menyentuh harga stop loss, strategi akan berhenti kehilangan dan keluar; Ketika harga menyentuh harga stop loss, strategi akan berhenti dan keluar. Logika sinyal jual juga serupa.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan:

  1. Logika strategi sederhana, mudah dipahami dan diterapkan.
  2. Ini adalah fitur yang dapat menangkap tren harga saham, berjalan sesuai dengan tren harga.
  3. Anda dapat menyesuaikan kombinasi parameter kebijakan yang paling sesuai dengan parameter Finding
  4. Sistem penghentian kerusakan dan penghentian yang terintegrasi untuk mengontrol risiko.
  5. Presentasi visual sangat memudahkan penyesuaian parameter dan analisis hasil.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Hal ini dapat menyebabkan transaksi berulang dan over-trading.
  2. Jika harga bergejolak, maka akan sering membuka posisi.
  3. Jika parameter indikator tidak tepat waktu, Anda mungkin kehilangan peluang tren besar.
  4. Tidak mempertimbangkan frekuensi dan tingkat fluktuasi harga saham.
  5. Tidak digabungkan dengan indikator lain untuk memverifikasi sinyal.

Untuk mengendalikan risiko ini, ada beberapa cara untuk mengoptimalkannya:

  1. Kurangi Stop Loss, dan Tingkatkan Waktu Pemegang Posisi
  2. Meningkatkan kondisi untuk membuka posisi dan menghindari seringnya pembukaan posisi.
  3. Optimalkan parameter untuk menemukan kombinasi optimal.
  4. Dalam kombinasi dengan indikator lain, filter sinyal.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Optimalisasi parameter. Parameter optimal dapat ditemukan dengan pengujian kombinasi parameter yang lebih sistematis.

  2. Dalam kombinasi dengan indikator lain, sinyal penyaringan dapat dibuat. Misalnya, sinyal pembelian dapat dibuat dalam kombinasi dengan indikator Moving Average, hanya jika harga melampaui harga tertinggi dan melewati Moving Average jangka panjang di atas Moving Average jangka pendek.

  3. Pertimbangkan frekuensi fluktuasi harga saham. Sebagai contoh, dapat digabungkan dengan indikator ATR, ketika fluktuasi harga saham meningkat, lebar yang tepat untuk melonggarkan pecah.

  4. Membedakan pasar tren dan pasar goyah. Dalam fase yang jelas tren, parameter yang tepat untuk mengendurkan agar dapat mengikuti tren; Dalam pasar goyah, parameter yang tepat untuk memperketat.

  5. Meningkatkan mekanisme manajemen posisi. Misalnya, berhenti membuka posisi ketika kerugian mencapai proporsi tertentu.

Meringkaskan

Secara keseluruhan, strategi penarikan rendah dan tinggi adalah strategi pelacakan tren yang sederhana dan praktis. Ini menentukan sinyal perdagangan dengan menilai apakah harga telah melampaui harga tertinggi dan terendah dalam periode tertentu. Strategi ini memiliki keunggulan seperti kesederhanaan, pelacakan tren, dan pengoptimalan parameter, tetapi ada juga risiko yang dapat menghasilkan perdagangan berlebihan dan tidak dapat menangani pasar yang bergolak.

Kode Sumber Strategi
/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)

// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100


candlesBack = input(title="Number of candles back",  defval=50)
useHighAndLows =  input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum =  input(title="Number of candles back to ignore for last high/low",  defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)

getIndexOfLowestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] <= current
            index := i
            current := series[i]
    index

getIndexOfHighestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] >= current
            index := i
            current := series[i]
    index

indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)

max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]

barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange

isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)

alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")

if high > max 
    max := high
    barsSinceLastHigh := 0

if low < min
    min := low
    barsSinceLastLow := 0 

plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)

// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)

goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)

strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)

strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
        
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)