Ý tưởng cốt lõi của chiến lược này là đưa ra quyết định giao dịch dựa trên sự đột phá giá của các kênh Donchian. Nó thuộc về xu hướng sau loại chiến lược định lượng. Nó có thể tự động xác định các kênh giá. Khi giá vượt qua đường ray trên của kênh, các vị trí dài sẽ được mở. Khi giá giảm trở lại gần đường ray dưới của kênh hoặc điểm dừng lỗ, các vị trí sẽ được đóng. Chiến lược này nhằm mục đích nắm bắt xu hướng giá trung hạn đến dài hạn và phù hợp với giao dịch thuật toán của các công cụ phái sinh tài chính như tương lai chỉ số.
Chiến lược này dựa trên chỉ số kênh Donchian. Các kênh Donchian là các kênh được rút ra bởi giá cao nhất và thấp nhất trong một khoảng thời gian nhất định. Phương pháp tính toán của nó là:
Upper Rail = Giá cao nhất trong n kỳ cuối cùng Lower Rail = Giá thấp nhất trong n giai đoạn cuối cùng
Khi giá vượt qua đường ray trên, nó được coi là một xu hướng dài đã bắt đầu. Khi giá vượt qua đường ray dưới, nó được coi là một xu hướng ngắn đã bắt đầu. Chiến lược này chỉ xem xét các trường hợp khi đường ray trên bị phá vỡ.
Logic giao dịch cụ thể là:
Những lợi thế của chiến lược này bao gồm:
Ngoài ra còn có một số rủi ro:
Giải pháp:
Chiến lược này có thể được tối ưu hóa hơn nữa trong các lĩnh vực sau:
Ý tưởng tổng thể của chiến lược này là rõ ràng và dễ hiểu và thực hiện. Nó sử dụng các kênh Donchian trưởng thành để tự động xác định hướng xu hướng. Cấu hình cũng rất linh hoạt để phục vụ cho các nhu cầu khác nhau. Với việc dừng lỗ và tối ưu hóa tham số thích hợp, kết quả tốt có thể đạt được. Tóm lại, chiến lược này có đường cong học tập thấp nhưng hiệu quả hợp lý. Nó phù hợp như một chiến lược giao dịch định lượng bắt đầu.
/*backtest start: 2022-12-07 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h 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/ // © Giovanni_Trombetta // Strategy to capture price channel breakouts //@version=4 strategy("ChannelsBreakout", max_bars_back=50, overlay=true) instrument = input(1, title = "Select 1: Stock/Forex, 2: Future") money = input(10000, title = "Money for each trade") backtest_start = input(2000, "Insert first year to backtest") period = input(50, title = "Period in bars of Donchian Channel") monetary_stoploss = input(1000, title = "Monetary Stop Loss") quantity = if instrument != 1 1 else int(money / close) upBarrier = highest(high,period) downBarrier = lowest(low,period) up = highest(high,period / 4) down = lowest(low,period / 4) plot(upBarrier, color=color.green, linewidth=2) plot(downBarrier, color=color.red, linewidth=2) plot(up, color=color.lime, linewidth=1) plot(down, color=color.orange, linewidth=2) longCondition = crossover(close, upBarrier[1]) and year >= backtest_start if (longCondition) strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0) closeCondition = crossunder(close, down[1]) or down < down[1] if (closeCondition) strategy.close("Long", comment = "Trailing") stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size strategy.exit("StopLoss", from_entry = "Long", stop = stop_level) plot(stop_level, color=color.yellow, linewidth=2) // l = label.new(bar_index, na, // text="PineScript Code", color= color.lime, textcolor = color.white, // style=label.style_labelup, yloc=yloc.belowbar, size=size.normal) // label.delete(l[1])