Strategi Pembalikan Penembusan Tiga Bar dan Empat Bar mengenal pasti tiga atau empat bar K-line dengan momentum yang kuat, dan mengambil perdagangan kontra-trend selepas beberapa bar K-range kecil membentuk tahap sokongan / rintangan dan isyarat pembalikan muncul.
Logik pengenalan teras strategi ini termasuk:
Mengenali bar jarak jauh (Gap Bars): Pecahkan 1.5 x ATR, dengan peratusan badan di atas 65%. Mereka dianggap mempunyai momentum yang kuat.
Mengenali bar julat rendah (Bars Pengumpulan): Satu atau dua bar julat kecil berturut-turut mengikuti Gap Bars, dengan tahap tinggi / rendah yang hampir dengan Gap Bars. Mereka mewakili momentum yang melambatkan dan penyatuan, membentuk tahap sokongan / rintangan.
Mengenali bar isyarat pembalikan: Jika bar memecahkan tinggi / rendah bar sebelumnya selepas penyatuan, ia boleh dianggap sebagai isyarat pembalikan.
Stop loss dan ambil keuntungan: Tetapkan stop loss di bawah / di atas titik rendah / tinggi Gap Bar. Ambil keuntungan ditentukan dengan mengalikan nisbah risiko-balasan dengan jarak stop loss.
Kelebihan utama strategi ini:
Mengenal pasti trend dan pembalikan menggunakan tindakan harga mentah, tidak memerlukan penunjuk.
Peraturan yang ketat mengenai Bar Gap dan Bar Pengumpulan memastikan ketepatan dalam menangkap trend dan penyatuan sebenar.
Menghakimi bar pembalikan oleh badan mengurangkan isyarat palsu.
Setiap perdagangan hanya mengambil 3-4 bar. frekuensi tinggi dengan tempoh tahan yang pendek.
Peraturan yang jelas mengenai stop loss dan mengambil keuntungan memudahkan pengurusan risiko.
Risiko utama:
Bergantung pada tetapan parameter. parameter longgar meningkatkan isyarat palsu dan kehilangan perdagangan.
Ringan untuk pelarian palsu dan tidak dapat menapis semua isyarat palsu.
Risiko terperangkap dalam penggabungan selepas percubaan keluar yang gagal.
Julat stop loss yang luas bermakna kerugian besar pada satu ketika apabila terperangkap.
Untuk mengurangkan risiko:
Mengoptimumkan parameter untuk pengiktirafan Bar Gap dan Pengumpulan Bar.
Tambah penapis seperti bar pengesahan sebelum memasukkan kedudukan.
Mengoptimumkan algoritma stop loss untuk menjadikan mereka lebih adaptif.
Arah pengoptimuman utama:
Tambah penapis komposit untuk mengelakkan pecah palsu, contohnya memerlukan peningkatan dalam jumlah.
Gabungkan dengan purata bergerak, hanya mengambil isyarat apabila tahap MA utama dilanggar.
Memerlukan persetujuan dalam pelbagai jangka masa sebelum memasuki perdagangan.
Sesuaikan sasaran keuntungan secara dinamik berdasarkan turun naik pasaran dan pilihan risiko.
Menggabungkan dengan sistem pengenalan rejim pasaran, hanya membolehkan strategi dalam persekitaran trend.
Pengoptimuman ini dapat meningkatkan kestabilan dan keuntungan.
Strategi Three Bar dan Four Bar Breakout Reversion bertujuan untuk menangkap pergerakan trend dan perdagangan pembalikan yang berkualiti tinggi. Ia mempunyai kelebihan tempoh tahan pendek dan kekerapan yang tinggi. Terdapat juga risiko yang perlu dikurangkan melalui pengoptimuman berterusan. Dengan mengenal pasti dengan berkesan isyarat trend dan pembalikan yang terkandung dari tindakan harga mentah, strategi ini menjamin penyelidikan dan penerapan 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)