Chiến lược giao dịch breakout có thể mở rộng tạo ra tín hiệu giao dịch khi giá vượt qua các mức hỗ trợ và kháng cự chính được xác định bởi sự dao động giá. Đây là một chiến lược breakout rất linh hoạt và mở rộng. Chiến lược có thể được điều chỉnh theo khung thời gian khác nhau bằng cách điều chỉnh các tham số và có thể dễ dàng tích hợp các bộ lọc bổ sung và cơ chế quản lý rủi ro để tối ưu hóa.
Chiến lược đầu tiên sử dụngswings()
chức năng để tính toán swing cao nhất và thấp nhất dựa trên thời gian xem lại.swingLookback
Các tín hiệu dài được kích hoạt khi giá phá vỡ trên mức cao dao động, và các tín hiệu ngắn được kích hoạt khi giá phá vỡ dưới mức thấp dao động.
Cụ thể, tín hiệu dài được kích hoạt khi giá đóng lớn hơn hoặc bằng với giá swing high. tín hiệu ngắn được kích hoạt khi giá đóng nhỏ hơn hoặc bằng với giá swing low.
Chiến lược cũng đặt ra một mục tiêu dừng dựa trênstopTargetPercent
tham số để xác định mức dừng lỗ. Ví dụ, dừng lỗ dài có thể được đặt ở mức 5% dưới mức cao dao động, và dừng lỗ ngắn có thể được đặt ở mức 5% trên mức thấp dao động.
Lợi thế của chiến lược này là tính linh hoạt để điều chỉnh thời gian xem lại để kiểm soát tần suất giao dịch. Thời gian xem lại ngắn hơn làm cho nó nhạy cảm hơn với sự đột phá và tăng tần suất giao dịch. Thời gian xem lại dài hơn làm giảm độ nhạy cảm và tần suất giao dịch nhưng có thể bỏ lỡ cơ hội. Tìm thời gian xem lại tối ưu là rất quan trọng để tối ưu hóa chiến lược.
Hạn chế:
Chiến lược có thể được cải thiện theo nhiều cách:
Kiểm tra các giá trị khoảng thời gian xem lại khác nhau để tìm các thông số tối ưu.
Kiểm tra các khung thời gian khác nhau như 5m, 15m, 1h để xác định khung thời gian tốt nhất.
Tối ưu hóa tỷ lệ dừng lỗ để cân bằng tiềm năng lợi nhuận so với quản lý rủi ro.
Thêm các bộ lọc như âm lượng, biến động để giảm thiết lập kém.
Tích hợp nhiều cơ chế quản lý rủi ro như dừng lại, lấy lợi nhuận.
Tối ưu hóa tham số thông qua phân tích tiến bộ và học máy.
giới thiệu AI / học máy để tối ưu hóa tự động các thông số.
Chiến lược giao dịch breakout có thể mở rộng là một hệ thống breakout mạnh mẽ và tùy chỉnh. Nó rất dễ sử dụng và thích nghi bằng cách điều chỉnh xem lại và thêm các bộ lọc. Nó có thể dễ dàng tích hợp quản lý rủi ro để kiểm soát rủi ro. Với tối ưu hóa tham số và tích hợp máy học, chiến lược có thể phát triển theo thời gian để thích nghi với thị trường thay đổi. Nhìn chung, nó là một chiến lược breakout phổ quát được khuyến cáo.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © deperp //@version=5 // strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0) // Backtest Time Period useDateFilter = input.bool(true, title="Begin Backtest at Start Date", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2020"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true swingLookback = input.int(20, title="Swing Lookback", minval=3) stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1) // Calculate lockback swings swings(len) => var highIndex = bar_index var lowIndex = bar_index var swingHigh = float(na) var swingLow = float(na) upper = ta.highest(len) lower = ta.lowest(len) if high[len] > upper highIndex := bar_index[len] swingHigh := high[len] if low[len] < lower lowIndex := bar_index[len] swingLow := low[len] [swingHigh, swingLow, highIndex, lowIndex] // Strategy logic [swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback) longCondition = inTradeWindow and (ta.crossover(close, swingHigh)) shortCondition = inTradeWindow and (ta.crossunder(close, swingLow)) if longCondition strategy.entry("Long", strategy.long) if shortCondition strategy.entry("Short", strategy.short) longStopTarget = close * (1 + stopTargetPercent / 100) shortStopTarget = close * (1 - stopTargetPercent / 100) strategy.exit("Long Stop Target", "Long", limit=longStopTarget) strategy.exit("Short Stop Target", "Short", limit=shortStopTarget) // Plot break lines // line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right) // line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right) // Alert conditions for entry and exit longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh)) shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow)) longExitCondition = close >= longStopTarget shortExitCondition = close <= shortStopTarget alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position") alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position") alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position") alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")