Chiến lược giao dịch chống xu hướng đa yếu tố là một hệ thống giao dịch thuật toán phức tạp được thiết kế để xác định các điểm đảo ngược tiềm năng sau khi giá tăng hoặc giảm liên tục trên thị trường. Chiến lược phân tích các biến động giá kết hợp với xác nhận khối lượng và các dải kênh (Bollinger Bands hoặc Keltner Channels) để nắm bắt các cơ hội đảo ngược trong điều kiện mua quá mức hoặc bán quá mức. Sức mạnh cốt lõi nằm trong cách tiếp cận đa yếu tố của nó để tăng độ tin cậy và độ chính xác tín hiệu.
Chiến lược tạo ra các tín hiệu giao dịch dựa trên ba yếu tố cốt lõi:
Các tín hiệu giao dịch được kích hoạt khi các điều kiện được thiết lập được đáp ứng. Hệ thống vẽ các dấu chấm tam giác và thực hiện các vị trí dài / ngắn tương ứng sau khi xác nhận thanh. Chiến lược sử dụng 80% vốn chủ sở hữu tài khoản để định kích thước vị trí và các yếu tố trong hoa hồng giao dịch 0,01%.
Chiến lược giao dịch chống xu hướng đa yếu tố cung cấp một cách tiếp cận có hệ thống để giao dịch đảo ngược thông qua phân tích toàn diện về các mô hình giá, thay đổi khối lượng và đột phá kênh. Trong khi chiến lược vượt trội trong cấu hình linh hoạt và xác nhận tín hiệu đa chiều, cần chú ý đến việc thích nghi với môi trường thị trường và kiểm soát rủi ro. Các hướng tối ưu hóa được đề xuất cung cấp những cải tiến tiềm năng cho hiệu suất giao dịch trực tiếp.
/*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")