Strategi Tinggi/Rendah yang Runtuh

Penulis:ChaoZhang, Tanggal: 2023-12-22 12:59:43
Tag:

img

Gambaran umum

Strategi Broken High/Low adalah strategi trend-following yang melacak price breakouts di luar high atau low candlestick sebelumnya.

Logika Strategi

Kondisi utama untuk masuk dan keluar yang ditentukan oleh strategi ini adalah:

  1. Mengidentifikasi apakah lilin adalah hijau atau merah untuk menentukan apakah itu lilin ke atas atau lilin ke bawah
  2. Periksa apakah lilin saat ini memecahkan tinggi atau rendah dari lilin sebelumnya
  3. Gunakan rata-rata bergerak cepat dan lambat untuk menentukan arah tren
  4. Pergi panjang ketika lilin naik pecah di atas tinggi lilin turun sebelumnya, pergi pendek ketika lilin turun pecah di bawah rendah lilin naik sebelumnya
  5. Kondisi keluar dipicu oleh stop loss atau trailing stop; juga dapat keluar segera jika lilin pembalikan muncul

Strategi ini juga menggunakan filter berdasarkan lilin pembalikan kedua untuk menghindari kebocoran palsu dan memastikan keandalan sinyal.

Analisis Keuntungan

  • Berorientasi strategi yang jelas, mudah dipahami operasi breakout
  • Memastikan penilaian tren yang benar dengan menggabungkan dua rata-rata bergerak
  • Stop Trailing membantu mengunci lebih banyak keuntungan
  • Filter lilin pembalikan membantu menghindari mengejar tinggi dan membunuh rendah

Analisis Risiko

  • Kegagalan breakout dapat menyebabkan kerugian dari operasi jangka pendek
  • Risiko pecah palsu yang lebih besar di pasar yang terikat rentang
  • Rata-rata bergerak ganda mungkin tertinggal, menyebabkan kesalahan penilaian

Langkah Pengendalian Risiko:

  1. Pilih indeks atau patokan utama untuk menghindari risiko tinggi dari saham individu
  2. Mengoptimalkan parameter rata-rata bergerak untuk meningkatkan akurasi penilaian
  3. Memperluas rentang stop loss secara wajar untuk mengendalikan kerugian perdagangan tunggal

Arahan Optimasi

Strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Uji kombinasi parameter rata-rata bergerak yang berbeda
  2. Uji yang menggabungkan indikator teknis lainnya untuk penilaian kombinasi
  3. Mengoptimalkan parameter tingkat entry dan stop loss
  4. Tambahkan aturan penyaringan kuantitatif untuk memilih kualitas tinggi yang mendasari
  5. Mengintegrasikan algoritma pembelajaran mesin untuk optimasi parameter adaptif

Ringkasan

Strategi Broken High/Low secara keseluruhan merupakan strategi trend-following yang matang. Dengan bantuan moving average untuk penilaian tambahan, strategi ini dapat menangkap tingkat tertentu dari tren.


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

Lebih banyak