Strategi Pelacakan Harga Terobosan Tertinggi dan Terendah


Tanggal Pembuatan: 2023-12-22 12:59:43 Akhirnya memodifikasi: 2023-12-22 12:59:43
menyalin: 1 Jumlah klik: 606
1
fokus pada
1623
Pengikut

Strategi Pelacakan Harga Terobosan Tertinggi dan Terendah

Ringkasan

Breakout High Low adalah strategi pelacakan tren yang melacak harga untuk mencapai titik tinggi atau rendah sebelum K. Ini menggabungkan moving average untuk menentukan arah tren, masuk pada titik terobosan, dan kemudian mengatur stop loss atau tracking stop loss untuk mengunci keuntungan.

Prinsip Strategi

Strategi ini didasarkan pada beberapa kriteria untuk membuka dan menutup posisi:

  1. Pertimbangkan garis K merah atau hijau untuk menentukan apakah garis K naik atau turun
  2. Menentukan apakah garis K saat ini melampaui titik tinggi atau titik rendah dari garis K sebelumnya
  3. Menggunakan rata-rata bergerak cepat dan rata-rata bergerak lambat untuk menilai arah tren
  4. Ketika garis K naik melewati titik tertinggi dari garis K turun sebelumnya, lakukan over; ketika garis K turun melewati titik terendah dari garis K naik sebelumnya, lakukan over
  5. Kondisi posisi terdepan adalah stop loss atau tracking stop loss trigger; juga dapat diatur untuk stop loss langsung jika terjadi K line terbalik

Strategi ini juga digabungkan dengan penghakiman reverse K-line kedua untuk memfilter penembusan palsu dan memastikan keandalan sinyal penembusan.

Analisis Keunggulan

  • Strategi yang jelas dan mudah dipelajari
  • Kombinasi rata-rata bergerak ganda untuk memastikan penilaian tren besar yang benar
  • Tracking Stop Loss Membantu Mengunci Lebih Banyak Keuntungan
  • Reverse K-Line Mechanism Membantu Menghindari Perburuan

Analisis risiko

  • Kegagalan untuk menerobos dapat menyebabkan kerugian operasional yang terlalu pendek.
  • Risiko terobosan palsu lebih tinggi dalam kondisi gempa
  • Rata-rata Bergerak Ganda Mungkin Terlambat, Membuat Kesalahan Pertimbangan

Tindakan pengendalian risiko:

  1. Memilih indeks atau indeks utama, menghindari risiko tinggi dari saham individu
  2. Optimalkan parameter moving average untuk meningkatkan akurasi penilaian
  3. Meningkatkan Stop Loss yang sesuai untuk memastikan pengendalian kerugian tunggal

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Uji kombinasi parameter moving average yang berbeda
  2. Tes menambahkan indikator lain untuk penilaian kombinasi
  3. Parameter untuk mengoptimalkan posisi buka dan titik stop loss
  4. Meningkatkan aturan penyaringan kuantitatif, memilih yang berkualitas
  5. Optimalisasi penyesuaian parameter yang digabungkan dengan algoritma pembelajaran mesin

Meringkaskan

Breakout High Low Strategi secara keseluruhan adalah strategi pelacakan tren yang lebih matang, dengan penilaian tambahan moving average, dapat menangkap tingkat tren tertentu, dan mekanisme stop loss dan tracking stop loss juga membantu mengunci keuntungan. Dengan terus-menerus menguji dan mengoptimalkan, parameter dan efek dari strategi ini dapat dibuat lebih baik.

Kode Sumber Strategi
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Broken High/Low Strategy", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity)

useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy')
trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy')

fastMALength = input(5 , 'Fast MA length', group = 'Trend strength')
fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength')

slowMALength = input(10, 'Slow MA length', group = 'Trend strength')
slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength')

ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength')

useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy')
secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength')

longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings')
shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings')

fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength)
slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength)

FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters')
FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters')
FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters')
ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters')
ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters')
ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters')
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>time>=start and time<=finish?true:false
afterStartDate = time >= start and time<=finish?true:false
closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters')

trailStopMA = ta.ema(close, trailStopMALength)

isGreenCandle = close > open
isRedCandle = close < open
isBrokenHigh = close > open[1]
isPriorCandleRed = close[1] < open[1]
isPriorPriorCandleRed = close[2] < open[2]
isPriorPriorCandleGreen = close[2] > open[2]
isPriorCandleGreen = close[1] > open[1]
isBrokenLow = close < open[1]

isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh
isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow

isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false
isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false

longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled
longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA)
longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition

shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled
shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA)
shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition

if (longOpenCondition)
    strategy.entry("Long Entry", strategy.long)

if (longCloseCondition)
    strategy.close('Long Entry', 'Long Exit')

if (shortOpenCondition)
    strategy.entry("Short Entry", strategy.long)

if (shortCloseCondition)
    strategy.close('Short Entry', 'Short Exit')

if (closeTradesEOD and hour >= 14 and minute >= 30)
    strategy.close_all("EOD")

plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red)
plot(fastMA)
plot(ignoreSlowMA ? na : slowMA, linewidth = 4)