Strategi Penembusan Bendera Bull

Penulis:ChaoZhang, Tarikh: 2024-02-22 16:41:04
Tag:

img

Ringkasan

Strategi penembusan bendera lembu adalah strategi analisis teknikal yang mengenal pasti corak carta bendera lembu dan memasuki titik penembusan, bertujuan untuk menangkap permulaan trend.

Logika Strategi

Langkah utama strategi ini ialah:

  1. Tentukan tiang bendera: Memerlukan harga tinggi baru dan pecah saluran ATR.
  2. Menentukan ketinggian tiang: Mengukur jarak antara bahagian atas tiang dan SMA sebelumnya.
  3. Tentukan julat bendera: Bahagian bawah bendera adalah 33% daripada ketinggian tiang sebagai julat minimum.
  4. Mengenal pasti corak bendera: menilai jika 3 bar terakhir semua dalam julat bendera.
  5. Masuk: pergi panjang apabila corak bendera muncul.
  6. Keluar: Tutup kedudukan selepas ditetapkan 6 bar.

Apabila menilai tiang bendera dan bendera, strategi ini dengan bijak menggunakan penunjuk ATR untuk menentukan gangguan yang signifikan dan dengan ketat mengehadkan ketinggian bendera dalam 33% daripada ketinggian tiang untuk mengelakkan isyarat palsu yang berlebihan.

Analisis Kelebihan

Kelebihan utama strategi ini termasuk:

  1. Menggunakan corak bendera untuk menentukan permulaan trend adalah kaedah analisis teknikal klasik dengan kadar kejayaan yang tinggi.
  2. ATR dan had jarak yang ketat mengelakkan banyak isyarat palsu dan meningkatkan ketepatan kemasukan.
  3. Memperbaiki kunci keluar 6 bar dalam beberapa keuntungan dan mengelakkan risiko pembalikan.
  4. Peraturan yang jelas yang mudah dilaksanakan, difahami dan diikuti.
  5. Dapat mencari peluang dalam pelbagai keadaan pasaran, fleksibel.

Analisis Risiko

Risiko utama strategi ini ialah:

  1. Bendera tidak dapat menentukan trend sepenuhnya, kegagalan masih wujud.
  2. 6 bar keluar mungkin terlalu awal dan keluar terlalu awal.
  3. Pasaran yang bergolak boleh menghasilkan bendera palsu dengan mudah.
  4. Tidak dapat mengawal jumlah kerugian tunggal dengan berkesan.

Untuk mengatasi risiko di atas, kita boleh menetapkan stop loss, mengoptimumkan mekanisme keluar untuk mengunci keuntungan apabila mencapai nisbah keuntungan tertentu.

Arahan pengoptimuman

Beberapa arah untuk mengoptimumkan strategi:

  1. Gabungkan penunjuk seperti MACD, KD untuk mengelakkan isyarat palsu di pasaran yang bergolak.
  2. Parameterkan pengganda ATR, tempoh keluar berdasarkan rejim pasaran untuk meningkatkan daya adaptasi.
  3. Tetapkan stop loss atau pertimbangkan nisbah drawdown keuntungan untuk keluar dinamik.
  4. Cuba pendekatan pembelajaran mesin untuk mencari ciri yang lebih baik menentukan ketinggian bendera.
  5. Menilai kadar kemenangan sebenar dan nisbah keuntungan, menyesuaikan saiz kedudukan secara dinamik.

Kesimpulan

Kesimpulannya, strategi penembusan bendera lembu menggunakan corak teknikal untuk menentukan permulaan trend, kaedah yang agak klasik, dan peraturan kemasukan memang dirancang dengan ketat untuk menapis banyak isyarat palsu.


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © smith26
//This strategy enters on a bull flag and closes position 6 bars later.  Average true range is used instead of a moving average.
//The reason for ATR instead of MA is because with volatile securities, the flagpole must stand up a noticable "distance" above the trading range---which you can't determine with a MA alone.
//This is broken up into multiple parts: Defining a flagpole, defining the pole height, and defining the flag, which will be constrained to the top third (33%) of the pole height to be considered a flag.
//@version=4
strategy("Bull Flag v1.00", overlay=true)

ATR = atr(10) //Average True Range over last 10 bars.

upperATR = ohlc4[1] + ATR[1]  //Open + High + Low + Close divided by 4, + prior ATR.  Just used here for visually plotting the ATR upper channel.
lowerATR = ohlc4[1] - ATR[1] //Open + High + Low + Close divided by 4, - prior ATR.  Just used here for visually plotting the ATR lower channel.

//uncomment these two lines to see ATR channels
plot(upperATR, color=color.orange)
plot (lowerATR, color=color.orange)

//Current close higher than previous close, and current close minus current open is greater than 3 times the previous ATR.  "3x ATR" is chosen because any less was not a noticeable distance above the trading range.
flagpole1 = close>close[1] and (close-open) > (ATR[1] * 3)
plotshape(flagpole1, text="flagpole1", style=shape.arrowdown, size=size.huge) //Plots an arrow for flagpole1 for QA testing

//Two consecutive close higer than their previous close, and current close minus PREVIOUS open is greater than 3 times the previous ATR.
flagpole2 = close>close[1] and close[1]>close[2] and (close-open[1]) > (ATR[1] * 3)
plotshape(flagpole2, text="flagpole2", style=shape.arrowdown, size=size.huge, color=color.yellow) //Plots an arrow for flagpole2 for QA testing

//Three consecutive close higer than their previous close, and current close minus open from 2 bars ago is greater than 3 times the previous ATR.
flagpole3 = close>close[1] and close[1]>close[2] and close[2]>close[3] and (close-open[2]) > (ATR[1] * 3)
plotshape(flagpole3, text="flagpole3", style=shape.arrowdown, size=size.huge, color=color.white) //Plots an arrow for flagpole3 for QA testing

//A flagpole can be any of the three definitions of flagpole.
flagpole = flagpole1 or flagpole2 or flagpole3

//This will return the number of bars since "flagpole" was true.  Not being used, but could be useful.
//since_flagpole = barssince(flagpole)

after_pole_1 = flagpole[1] //This marks the bar directly after a flagpole.  
//plotshape(after_pole_1, text="after_pole_1", style=shape.cross, size=size.large, color=color.white) //Plots a cross for after_pole_1 for QA testing
after_pole_2 = flagpole[2] //This marks the bar two bars after a flagpole.  
after_pole_3 = flagpole[3] //This marks the bar three bars after a flagpole.  

//This returns the price at the "top" of the flagpole (using close price) at the most recent occurence, 0.
pole_top = valuewhen(flagpole, close, 0)
//plot(pole_top, trackprice=true)  //plots a horizontal line at the most recent pole_top

//Measures the distance between last pole top and the previous SMA.
pole_height = pole_top - sma(close, 10)[1] 
//plot(pole_height)

//This marks 33% below the pole_top, which will be the lowest point a flag can be.
flag_bottom = pole_top - (.33 * pole_height)
//plot(flag_bottom)

//The first, second, and third bars after the pole are considered part of a flag when open and close are between the pole_top and flag_bottom
flag1 = after_pole_1 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag1, text="flag1", style=shape.flag, size=size.large, color=color.teal)
flag2 = after_pole_2 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag2, text="flag2", style=shape.flag, size=size.large, color=color.teal)
flag3 = after_pole_3 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag3, text="flag3", style=shape.flag, size=size.large, color=color.teal)

//When all three bars after a flagpole are a flag, the criteria are met and we have a "bull_flag"
//Specifically, when current bar is flag3, previous bar is flag2, and 2 bars ago is flag1, we have a bull_flag.
bull_flag = flag3 and flag2[1] and flag1[2]
plotshape(bull_flag, text="bull_flag", style=shape.flag, size=size.large, color=color.white) //Plots a flag for bull_flag for QA testing


if (bull_flag)
    strategy.entry("Long", strategy.long)

if barssince(bull_flag) == 6 //close 6 bars after entry.
    strategy.close("Long")

Lebih lanjut