
Ý tưởng cốt lõi của chiến lược này là thực hiện giao dịch mua và bán dựa trên sự phá vỡ giá của kênh Dongxian, thuộc loại chiến lược định lượng theo dõi xu hướng. Nó có thể tự động xác định kênh giá, mở nhiều vị trí khi giá phá vỡ trên kênh và đóng cửa khi giá giảm trở lại gần hoặc dừng lỗ bên dưới kênh.
Chiến lược này dựa trên chỉ số kênh Dongxian, kênh Dongxian là vùng kênh được vẽ bằng giá cao nhất và giá thấp nhất trong một chu kỳ nhất định. Cách tính toán là:
Đường đua = giá cao nhất trong gần n chu kỳ Đường đua dưới = giá thấp nhất trong gần n chu kỳ
Khi giá phá vỡ đường ray, nó được coi là vào xu hướng đa đầu, và khi giá rơi xuống đường ray, nó được coi là vào xu hướng không. Chiến lược này chỉ xem xét trường hợp phá vỡ đường ray.
Các giao dịch được thực hiện theo các logic sau:
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Giải pháp tương ứng:
Chiến lược này cũng có thể được tối ưu hóa bằng cách:
Chiến lược này có ý tưởng tổng thể rõ ràng, dễ hiểu và thực hiện, sử dụng các chỉ số đường Đông Dương đã được kiểm định để tự động xác định xu hướng. Đồng thời, cấu hình linh hoạt hơn, có thể được điều chỉnh theo nhu cầu thực tế. Bằng cách dừng lỗ và tối ưu hóa tham số, hiệu quả tốt hơn có thể đạt được.
/*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])