Tiga Bar dan Empat Bar Breakout Reversal Strategi

Penulis:ChaoZhang, Tanggal: 2023-12-18 10:39:53
Tag:

img

Gambaran umum

Strategi Three Bar dan Four Bar Breakout Reversion mengidentifikasi tiga atau empat bar garis K dengan momentum yang kuat, dan mengambil perdagangan kontra-trend setelah beberapa bar K kisaran kecil membentuk level support/resistance dan muncul sinyal pembalikan.

Logika Strategi

Logika identifikasi inti dari strategi ini meliputi:

  1. Mengenali bar jarak jauh (Gap Bars): Break 1,5 x ATR, dengan persentase tubuh di atas 65%.

  2. Mengenali bar rentang rendah (Collecting Bars): Satu atau dua bar rentang kecil berikutnya mengikuti Gap Bars, dengan tingkat tinggi/rendah yang dekat dengan Gap Bars. Mereka mewakili momentum yang melambat dan konsolidasi, membentuk level support/resistance.

  3. Mengenali bar sinyal pembalikan: Jika sebuah bar menembus tinggi / rendah bar sebelumnya setelah konsolidasi, itu dapat dianggap sebagai sinyal pembalikan.

  4. Stop loss dan take profit: Setel stop loss di bawah/di atas titik rendah/tinggi Gap Bar. Take profit ditentukan dengan mengalikan rasio risiko-manfaat dengan jarak stop loss.

Analisis Keuntungan

Keuntungan utama dari strategi ini:

  1. Mengidentifikasi tren dan pembalikan menggunakan tindakan harga mentah, tidak perlu indikator.

  2. Aturan yang ketat tentang Gap Bars dan Gathering Bars memastikan akurasi dalam menangkap tren dan konsolidasi nyata.

  3. Menghakimi batang pembalikan dengan tubuh mengurangi sinyal palsu.

  4. Setiap perdagangan hanya membutuhkan 3-4 bar frekuensi tinggi dengan jangka waktu yang singkat.

  5. Aturan yang jelas tentang stop loss dan take profit membuat manajemen risiko lebih mudah.

Analisis Risiko

Risiko utama:

  1. Bergantung pada pengaturan parameter. parameter longgar meningkatkan sinyal palsu dan kehilangan perdagangan.

  2. Cacat terhadap pelarian palsu dan tidak bisa menyaring semua sinyal palsu.

  3. Risiko terperangkap dalam konsolidasi setelah gagal upaya breakout.

  4. Jangkauan stop loss yang luas berarti kerugian besar pada saat terjebak.

Untuk mengurangi risiko:

  1. Mengoptimalkan parameter untuk identifikasi Gap Bar dan Collecting Bar.

  2. Tambahkan filter seperti bilah konfirmasi sebelum memasukkan posisi.

  3. Mengoptimalkan algoritma stop loss agar lebih adaptif.

Arahan Optimasi

Arah optimasi utama:

  1. Tambahkan filter komposit untuk menghindari kebocoran palsu, misalnya membutuhkan peningkatan volume.

  2. Gabungkan dengan rata-rata bergerak, hanya mengambil sinyal ketika tingkat MA utama rusak.

  3. Memerlukan persetujuan di beberapa kerangka waktu sebelum memasuki perdagangan.

  4. Sesuaikan secara dinamis target laba berdasarkan volatilitas pasar dan preferensi risiko.

  5. Menggabungkan dengan sistem identifikasi rezim pasar, hanya memungkinkan strategi dalam lingkungan tren.

Optimalisasi ini dapat meningkatkan stabilitas dan profitabilitas.

Kesimpulan

Strategi Three Bar dan Four Bar Breakout Reversion bertujuan untuk menangkap pergerakan tren berkualitas tinggi dan perdagangan pembalikan. Ini memiliki keuntungan dari periode penahan pendek dan frekuensi tinggi. Ada juga risiko yang melekat yang perlu dikurangi melalui optimalisasi berkelanjutan. Dengan secara efektif mengidentifikasi sinyal tren dan pembalikan yang mandiri dari aksi harga mentah, strategi ini menjamin penelitian dan penerapan lebih lanjut.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Three (3)-Bar and Four (4)-Bar Plays Strategy", shorttitle="Three (3)-Bar and Four (4)-Bar Plays Strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 1, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 1, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

garBarSetting1 = input(defval = 1.5, minval = 0.0, maxval = 100.0, title = "Gap Bar Size", type = input.float)
garBarSetting2 = input(defval = 0.65, minval = 0.0, maxval = 100.0, title = "Gap Bar Body Size", type = input.float)
TopSetting = input(defval = 0.10, minval = 0.0, maxval = 100.0, title = "Bull Top Bar Size", type = input.float)

profitMultiplier = input(defval = 2.0, minval = 1.0, maxval = 100.0, title = "Profit Multiplier", type = input.float)

// ========== 3-Bar and 4-Bar Play Setup ==========
barSize = abs(high - low)
bodySize = abs(open - close)

gapBar = (barSize > (atr(1000) * garBarSetting1)) and (bodySize >= (barSize * garBarSetting2))  // find a wide ranging bar that is more than 2.5x the size of the average bar size and body is at least 65% of bar size

bullTop = close > close[1] + barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bull bar)
bullTop2 = close > close[2] + barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bear bar)
bearTop = close < close[1] - barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bull bar)
bearTop2 = close < close[2] - barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bear bar)

collectingBarBull = barSize < barSize[1] / 2 and low > close[1] - barSize[1] / 2 and bullTop  // find a collecting bull bar
collectingBarBear = barSize < barSize[1] / 2 and high < close[1] + barSize[1] / 2 and bearTop  // find a collecting bear bar
collectingBarBull2 = barSize < barSize[2] / 2 and low > close[2] - barSize[2] / 2 and bullTop2  // find a second collecting bull bar
collectingBarBear2 = barSize < barSize[2] / 2 and high < close[2] + barSize[2] / 2 and bearTop2  // find a second collecting bear bar

triggerThreeBarBull = close > close[1] and close > close[2] and high > high[1] and high > high[2]  // find a bull trigger bar in a 3 bar play
triggerThreeBarBear = close < close[1] and close < close[2] and high < high[1] and high < high[2]  // find a bear trigger bar in a 3 bar play
triggerFourBarBull = close > close[1] and close > close[2] and close > close[3] and high > high[1] and high > high[2] and high > high[3]  // find a bull trigger bar in a 4 bar play
triggerFourBarBear = close < close[1] and close < close[2] and close < close[3] and high < high[1] and high < high[2] and high < high[3]  // find a bear trigger bar in a 4 bar play

threeBarSetupBull = gapBar[2] and collectingBarBull[1] and triggerThreeBarBull  // find 3-bar Bull Setup
threeBarSetupBear = gapBar[2] and collectingBarBear[1] and triggerThreeBarBear  // find 3-bar Bear Setup
fourBarSetupBull = gapBar[3] and collectingBarBull[2] and 
   collectingBarBull2[1] and triggerFourBarBull  // find 4-bar Bull Setup
fourBarSetupBear = gapBar[3] and collectingBarBear[2] and 
   collectingBarBear2[1] and triggerFourBarBear  // find 4-bar Bear Setup

labels = input(title="Show Buy/Sell Labels?", type=input.bool, defval=true)

plotshape(threeBarSetupBull and labels, title="3-Bar Bull", text="3-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(threeBarSetupBear and labels, text="3-Bar Bear", title="3-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
plotshape(fourBarSetupBull and labels, title="4-Bar Bull", text="4-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(fourBarSetupBear and labels, text="4-Bar Bear", title="4-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

alertcondition(threeBarSetupBull or threeBarSetupBear or fourBarSetupBull or fourBarSetupBear, title="3-bar or 4-bar Play", message="Potential 3-bar or 4-bar Play")
float sl = na
float tp = na
sl := nz(sl[1], 0.0)
tp := nz(tp[1], 0.0)
plot(sl==0.0?na:sl,title='SL', color = color.red)
plot(tp==0.0?na:tp,title='TP', color = color.green)
if (true)
    if threeBarSetupBull and strategy.position_size <=0
        strategy.entry("3 Bar Long", strategy.long, when=threeBarSetupBull)
        sl :=low[1]
    if threeBarSetupBear and strategy.position_size >=0
        strategy.entry("3 Bar Short", strategy.short, when=threeBarSetupBull)
        sl :=high[1]
    if fourBarSetupBull and strategy.position_size <=0
        strategy.entry("4 Bar Long", strategy.long, when=fourBarSetupBull)
        sl :=min(low[1], low[2])
    if fourBarSetupBear and strategy.position_size >=0
        strategy.entry("4 Bar Short", strategy.short, when=fourBarSetupBear)
        sl :=max(high[1], high[2])

if sl !=0.0
    if strategy.position_size > 0
        tp := strategy.position_avg_price + ((strategy.position_avg_price - sl) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)

    if strategy.position_size < 0
        tp := strategy.position_avg_price - ((sl - strategy.position_avg_price) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)

Lebih banyak