Multi-Factor Counter-Trend Trading Strategy adalah sistem dagangan algoritma yang canggih yang direka untuk mengenal pasti titik pembalikan yang berpotensi selepas kenaikan atau kejatuhan harga berturut-turut di pasaran. Strategi menganalisis pergerakan harga bersama-sama dengan pengesahan jumlah dan jalur saluran (Bollinger Bands atau Keltner Channels) untuk menangkap peluang pembalikan dalam keadaan overbought atau oversold. Kekuatan utamanya terletak pada pendekatan pelbagai faktor untuk meningkatkan kebolehpercayaan dan ketepatan isyarat.
Strategi menghasilkan isyarat perdagangan berdasarkan tiga elemen teras:
Isyarat perdagangan diaktifkan apabila syarat yang ditetapkan dipenuhi. Sistem merangka penanda segitiga dan melaksanakan kedudukan panjang / pendek yang sesuai selepas pengesahan bar. Strategi ini menggunakan 80% ekuiti akaun untuk saiz kedudukan dan faktor dalam komisen perdagangan 0.01%.
Strategi Perdagangan Counter-Trend Multi-Factor menyediakan pendekatan sistematik untuk perdagangan pembalikan melalui analisis menyeluruh tentang corak harga, perubahan jumlah, dan penembusan saluran. Walaupun strategi ini cemerlang dalam konfigurasi fleksibel dan pengesahan isyarat pelbagai dimensi, perhatian mesti diberikan kepada penyesuaian persekitaran pasaran dan kawalan risiko. Arahan pengoptimuman yang dicadangkan menawarkan peningkatan potensi untuk prestasi perdagangan langsung.
/*backtest start: 2024-12-03 00:00:00 end: 2024-12-10 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="The Bar Counter Trend Reversal Strategy [TradeDots]", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 80, commission_type = strategy.commission.percent, commission_value = 0.01) // Initialize variables var bool rise_triangle_ready = false var bool fall_triangle_ready = false var bool rise_triangle_plotted = false var bool fall_triangle_plotted = false //Strategy condition setup noOfRises = input.int(3, "No. of Rises", minval=1, group="STRATEGY") noOfFalls = input.int(3, "No. of Falls", minval=1, group="STRATEGY") volume_confirm = input.bool(false, "Volume Confirmation", group="STRATEGY") channel_confirm = input.bool(true, "", inline="CHANNEL", group="STRATEGY") channel_type = input.string("KC", "", inline="CHANNEL", options=["BB", "KC"],group="STRATEGY") channel_source = input(close, "", inline="CHANNEL", group="STRATEGY") channel_length = input.int(20, "", inline="CHANNEL", minval=1,group="STRATEGY") channel_mult = input.int(2, "", inline="CHANNEL", minval=1,group="STRATEGY") //Get channel line information [_, upper, lower] = if channel_type == "KC" ta.kc(channel_source, channel_length,channel_mult) else ta.bb(channel_source, channel_length,channel_mult) //Entry Condition Check if channel_confirm and volume_confirm rise_triangle_ready := ta.falling(close, noOfFalls) and ta.rising(volume, noOfFalls) and high > upper fall_triangle_ready := ta.rising(close, noOfRises) and ta.rising(volume, noOfRises) and low < lower else if channel_confirm rise_triangle_ready := ta.falling(close, noOfFalls) and low < lower fall_triangle_ready := ta.rising(close, noOfRises) and high > upper else if volume_confirm rise_triangle_ready := ta.falling(close, noOfFalls) and ta.rising(volume, noOfFalls) fall_triangle_ready := ta.rising(close, noOfRises) and ta.rising(volume, noOfRises) else rise_triangle_ready := ta.falling(close, noOfFalls) fall_triangle_ready := ta.rising(close, noOfRises) // Check if trend is reversed if close > close[1] rise_triangle_plotted := false // Reset triangle plotted flag if close < close[1] fall_triangle_plotted := false //Wait for bar close and enter trades if barstate.isconfirmed // Plot triangle when ready and counts exceed threshold if rise_triangle_ready and not rise_triangle_plotted label.new(bar_index, low, yloc = yloc.belowbar, style=label.style_triangleup, color=color.new(#9CFF87,10)) strategy.entry("Long", strategy.long) rise_triangle_plotted := true rise_triangle_ready := false // Prevent plotting again until reset if fall_triangle_ready and not fall_triangle_plotted label.new(bar_index, low, yloc = yloc.abovebar, style=label.style_triangledown, color=color.new(#F9396A,10)) strategy.entry("Short", strategy.short) fall_triangle_plotted := true fall_triangle_ready := false // plot channel bands plot(upper, color = color.new(#56CBF9, 70), linewidth = 3, title = "Upper Channel Line") plot(lower, color = color.new(#56CBF9, 70), linewidth = 3, title = "Lower Channel Line")