Đây là một chiến lược giao dịch đột phá động lực dựa trên kênh Donchian, kết hợp đột phá giá và xác nhận khối lượng như các điều kiện chính. Chiến lược này nắm bắt xu hướng thị trường tăng bằng cách quan sát đột phá giá vượt ra ngoài một phạm vi được xác định trước trong khi yêu cầu hỗ trợ khối lượng. Nó kết hợp một tham số lag để tăng tính ổn định của kênh và cung cấp điều kiện thoát linh hoạt.
Logic cốt lõi bao gồm các thành phần chính sau: 1. Sử dụng kênh Donchian bị tụt lại như là chỉ số kỹ thuật chính, được xây dựng bằng cách sử dụng giá cao nhất và thấp nhất trong 27 giai đoạn. Điều kiện nhập cảnh yêu cầu cả hai: - Giá đóng phá vỡ trên dải kênh Donchian phía trên - Khối lượng hiện tại vượt quá 1,4 lần khối lượng trung bình 27 giai đoạn 3. Điều kiện rời khỏi linh hoạt: - Có thể thoát ra khi giá giảm xuống dưới dải trên, giữa, hoặc dưới - Dải giữa được sử dụng như là tín hiệu xuất phát mặc định 4. Thực hiện một tham số trễ 10 thời gian để tăng cường sự ổn định của kênh và giảm đột phá sai.
Đây là một chiến lược theo xu hướng được thiết kế tốt với logic rõ ràng. Bằng cách kết hợp sự đột phá giá và xác nhận khối lượng, chiến lược duy trì độ tin cậy trong khi vẫn duy trì tính linh hoạt. Thiết kế theo tham số cung cấp khả năng thích nghi tốt, mặc dù các nhà đầu tư cần tối ưu hóa các tham số dựa trên các điều kiện thị trường cụ thể. Nhìn chung, điều này đại diện cho một khuôn khổ chiến lược xứng đáng để tối ưu hóa hơn nữa và thực hiện thực tế.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("Breakout Strategy", overlay=true, calc_on_every_tick=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, pyramiding=1, fill_orders_on_standard_ohlc=true) // Input Parameters start_date = input(timestamp("2018-01-01 00:00"), "Start Date") end_date = input(timestamp("2060-01-01 00:00"), "End Date") in_time_range = true length = input.int(27, title="Donchian Channel Length", minval=1, tooltip="Number of bars used to calculate the Donchian channel.") lag = input.int(10, title="Donchian Channel Offset", minval=1, tooltip = "Offset to delay the Donchian channel, enhancing stability.") volume_mult = input.float(1.4, title="Volume Multiplier", minval=0.1, step=0.1, tooltip="Multiplier for the average volume to filter breakout conditions.") closing_condition = input.string("Mid", title="Trade Closing Band", options= ["Upper","Lower","Mid"], tooltip = "Donchian Channel Band to use for exiting trades: Upper, Lower, or Middle.") // // Donchian Channel (Lagged for Stability) upper_band = ta.highest(high[lag], length) lower_band = ta.lowest(low[lag], length) middle_band = (upper_band + lower_band) / 2 plot(upper_band, color=color.blue, title="Upper Band (Lagged)") plot(middle_band, color=color.orange, title="Middle Band") plot(lower_band, color=color.blue, title="Lower Band (Lagged)") // Volume Filter avg_volume = ta.sma(volume, length) volume_condition = volume > avg_volume * volume_mult // Long Breakout Condition long_condition = close > upper_band and volume_condition bool reverse_exit_condition = false // Exit Condition (Close below the middle line) if closing_condition == "Lower" reverse_exit_condition := close < lower_band else if closing_condition == "Upper" reverse_exit_condition := close < upper_band else reverse_exit_condition := close < middle_band // Long Strategy: Entry and Exit if in_time_range and long_condition strategy.entry("Breakout Long", strategy.long) // Exit on Reverse Signal if in_time_range and reverse_exit_condition strategy.close("Breakout Long", comment="Reverse Exit")