Đây là một chiến lược luân phiên thông minh dựa trên các khoảng thời gian tìm cách tạo ra lợi nhuận thông qua giao dịch luân phiên dài ngắn trong các khoảng thời gian xác định. Chiến lược sử dụng một cơ chế quản lý vị trí linh hoạt có thể tự động điều chỉnh hướng giao dịch theo điều kiện thị trường trong khi kết hợp các chức năng kiểm soát rủi ro. Nó hỗ trợ giao dịch hai chiều và chế độ giao dịch swing tùy chọn, thể hiện khả năng thích nghi mạnh mẽ.
Chiến lược chủ yếu kiểm soát giao dịch thông qua các khoảng thời gian và tình trạng vị trí. Đầu tiên, chức năng inActivePeriod (()) xác định liệu giao dịch có nằm trong khoảng thời gian giao dịch hiệu quả của 500 thanh cuối cùng hay không. Trong khoảng thời gian hiệu quả, chiến lược quyết định các hành động giao dịch dựa trên các biến như tình trạng vị trí (positionHeld), thời gian giữ (barsHeld), và thời gian tạm dừng (barsPaused). Khi chế độ giao dịch xoay được bật, chiến lược xoay nhanh chóng giữa các hướng dài và ngắn; khi vô hiệu hóa, các vị trí được đóng sau 3 khoảng thời gian và chờ cơ hội giao dịch mới.
Chiến lược này đạt được lợi nhuận thị trường thông qua kiểm soát khoảng thời gian và xoay ngắn dài, thể hiện tính linh hoạt và khả năng thích nghi mạnh mẽ. Mặc dù có một số rủi ro nhất định, sự ổn định và lợi nhuận của chiến lược có thể được cải thiện đáng kể thông qua các biện pháp tối ưu hóa và kiểm soát rủi ro hợp lý. Ưu điểm cốt lõi nằm trong logic giao dịch đơn giản nhưng hiệu quả, làm cho nó phù hợp như một chiến lược nền tảng cho việc tối ưu hóa và mở rộng hơn nữa.
/*backtest start: 2024-10-12 00:00:00 end: 2024-11-11 00:00:00 period: 4h basePeriod: 4h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Tickerly Test Strategy", overlay=true) // Inputs longEnabled = input.bool(true, "Enable Long Trades") shortEnabled = input.bool(true, "Enable Short Trades") swingEnabled = input.bool(false, "Enable Swing Trading") // Variables var positionHeld = 0 var barsHeld = 0 var barsPaused = 0 var lastAction = "none" // Function to determine if we're in the last 500 bars inActivePeriod() => barIndex = bar_index lastBarIndex = last_bar_index barIndex >= (lastBarIndex - 499) // Main strategy logic if inActivePeriod() if swingEnabled if positionHeld == 0 and barstate.isconfirmed if lastAction != "long" strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 lastAction := "long" else strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 lastAction := "short" if positionHeld != 0 barsHeld += 1 if barsHeld >= 2 if positionHeld == 1 strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 lastAction := "short" else strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 lastAction := "long" else if positionHeld == 0 and barsPaused >= 1 and barstate.isconfirmed if longEnabled and shortEnabled if lastAction != "long" strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 barsPaused := 0 lastAction := "long" else strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 barsPaused := 0 lastAction := "short" else if longEnabled strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 barsPaused := 0 lastAction := "long" else if shortEnabled strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 barsPaused := 0 lastAction := "short" if positionHeld != 0 barsHeld += 1 if barsHeld >= 3 strategy.close_all() positionHeld := 0 barsHeld := 0 barsPaused := 0 // Reset pause counter when exiting a position else barsPaused += 1 // Plotting active period for visual confirmation plot(inActivePeriod() ? 1 : 0, "Active Period", color=color.new(color.blue, 80), style=plot.style_areabr)