Strategi penembusan bendera lembu adalah strategi analisis teknikal yang mengenal pasti corak carta bendera lembu dan memasuki titik penembusan, bertujuan untuk menangkap permulaan trend.
Langkah utama strategi ini ialah:
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.
Kelebihan utama strategi ini termasuk:
Risiko utama strategi ini ialah:
Untuk mengatasi risiko di atas, kita boleh menetapkan stop loss, mengoptimumkan mekanisme keluar untuk mengunci keuntungan apabila mencapai nisbah keuntungan tertentu.
Beberapa arah untuk mengoptimumkan strategi:
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")