
Chiến lược này tạo ra các kênh giá chính, đại diện cho hướng xu hướng dài hạn bằng cách tính toán các mức giá cao nhất và thấp nhất trong các chu kỳ thời gian khác nhau ((50 bar và 200 bar)). Đồng thời kết hợp các đường tín hiệu nhanh và đường tín hiệu chậm để xác định hướng xu hướng ngắn hạn. Chiến lược sẽ nhắc nhở khi xu hướng dài hạn phù hợp.
Đầu tiên, bằng cách tính giá cao nhất và giá thấp nhất trong vòng 50 bar cuối cùng, và giá cao nhất và giá thấp nhất trong vòng 200 bar cuối cùng, tạo ra hai kênh giá đại diện cho hướng xu hướng dài hạn.
Thứ hai, tính giá cao nhất, giá thấp nhất trong 7 bar cuối cùng để xác định xu hướng ngắn hạn; tính giá cao nhất, giá thấp nhất trong 20 bar cuối cùng để xác định xu hướng ngắn hạn hơn.
Cuối cùng, khi các kênh tín hiệu nhanh, kênh tín hiệu chậm và kênh giá dài có cùng hướng, tín hiệu nhập cảnh được gợi ý. Ví dụ: tất cả các kênh đang trong xu hướng tăng, gợi ý mua; tất cả các kênh đang trong xu hướng giảm, gợi ý bán.
Ưu điểm lớn nhất của chiến lược này là có thể xác định hướng xu hướng thống nhất trong thời gian ngắn. Bằng cách xác nhận các kênh giá trong các chu kỳ thời gian khác nhau, bạn có thể tránh bị nhiễu bởi tiếng ồn thị trường ngắn hạn.
Ngoài ra, chiến lược sử dụng nhiều khung thời gian để đánh giá và không dễ dàng thay đổi tín hiệu ngay cả khi có sự đảo ngược giá ngắn hạn, đảm bảo sự ổn định của tín hiệu.
Rủi ro chính của chiến lược này là khi xu hướng dài hạn ngắn hạn bị đảo ngược, tín hiệu sẽ bị trì hoãn do cần nhiều chu kỳ thời gian để xác nhận kênh. Trong trường hợp này, nếu theo dõi mù quáng có thể gây ra sự mất mát.
Ngoài ra, không thân thiện với giao dịch tần số cao, không thể phản ứng nhanh với biến động giá ngắn hạn. Nếu gặp tình huống khắc nghiệt, điều kiện dừng lỗ không đúng cách cũng có thể gây ra tổn thất lớn.
Bạn có thể xem xét thêm một chiến lược dừng động tự điều chỉnh, có thể kiểm soát rủi ro một cách hiệu quả khi giá phá vỡ một tỷ lệ nào đó theo hướng bất lợi.
Ngoài ra, có thể thêm nhiều kênh giá với độ dài khác nhau để quyết định tín hiệu cuối cùng thông qua cách bỏ phiếu, giúp tăng độ chính xác.
Hoặc sử dụng các thuật toán học máy để tự động tối ưu hóa các tham số của từng kênh, làm cho các tham số phù hợp hơn với môi trường thị trường hiện tại.
Chiến lược tổng thể của chiến lược này rõ ràng và dễ hiểu, thông qua các kênh giá khung thời gian đa dạng để đánh giá xu hướng thị trường, có thể loại bỏ hiệu quả tiếng ồn thị trường ngắn hạn. Tuy nhiên, việc xử lý và kiểm soát rủi ro đối với tình huống đảo ngược cũng cần được tăng cường.
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 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/
// © ZoomerXeus
//@version=4
strategy("Swing High Low Price Channel V.1", overlay=true)
//========================= variable =================================//
dead_channel_source = input(title="Main swing channel source", defval="H/L", options=["H/L"])
fast_signal_length = input(title="Fast Slow Length", type=input.integer, defval=7, maxval=49, minval=1)
slow_signal_length = input(title="Slow Slow Length", type=input.integer, defval=20, maxval=49, minval=1)
is_show_only_dead_channel = input(title="Show main channel only", defval=true)
main_channel_width = input(title="Main line width", defval=2, minval=1)
signal_channel_width = input(title="Signal line width", defval=1, minval=1)
//========================= indicator function =================================//
dead_cross_high_50 = highest(high, 50)
dead_cross_high_200 = highest(high, 200)
//========================================
dead_cross_low_50 = lowest(low, 50)
dead_cross_low_200 = lowest(low, 200)
//========================================
medain_dead_cross_50 = ((dead_cross_high_50-dead_cross_low_50)*0.5)+dead_cross_low_50
medain_dead_cross_200 = ((dead_cross_high_200-dead_cross_low_200)*0.5)+dead_cross_low_200
//========================================
fasthighest = highest(high, fast_signal_length)
fastlowest = lowest(low, fast_signal_length)
//========================================
slowhighest = highest(high, slow_signal_length)
slowlowest = lowest(low, slow_signal_length)
//========================================
//========================= plot =================================//
plot(dead_channel_source == "H/L" ? dead_cross_high_50 : na,title="50 bar highest", color=color.red, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_high_200 : na,title="200 bar highest", color=color.aqua, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_low_50 : na,title="50 bar lowest", color=color.red, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_low_200 : na,title="200 bar lowest", color=color.aqua, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? medain_dead_cross_200 : na,title="200 bar middle lowest", color=color.orange, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? medain_dead_cross_50 : na,title="50 bar middle lowest", color=color.lime, linewidth=main_channel_width)
//===========================================
plot(is_show_only_dead_channel == false ? fasthighest : na,title="fast signal highest", color=#ff00f9, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? fastlowest : na,title="fast signal lowest", color=#ff00f9, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? slowhighest : na,title="slow signal highest", color=color.white, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? slowlowest : na,title="slow signal lowest", color=color.white, linewidth=signal_channel_width)
//===========================================
plot(crossover(medain_dead_cross_50, medain_dead_cross_200) ? medain_dead_cross_200 : na, title="Dead cross buy plot", style=plot.style_circles, linewidth=6, color=color.lime)
plot(crossunder(medain_dead_cross_50, medain_dead_cross_200) ? medain_dead_cross_200 : na, title="Dead cross sell plot", style=plot.style_circles, linewidth=6, color=color.red)
plot(is_show_only_dead_channel and (medain_dead_cross_50 < medain_dead_cross_200) and high == slowhighest ? high : na, title="Follow trend short term sell plot zone", style=plot.style_circles, linewidth=3, color=color.orange)
plot(is_show_only_dead_channel and (medain_dead_cross_50 > medain_dead_cross_200) and low == slowlowest ? low : na, title="Follow trend short term buy plot zone", style=plot.style_circles, linewidth=3, color=color.green)
plot(is_show_only_dead_channel and high == slowhighest and (high == dead_cross_high_200) ? high : na, title="Not follow trend short term sell plot zone", style=plot.style_circles, linewidth=3, color=color.orange)
plot(is_show_only_dead_channel and low == slowlowest and (low == dead_cross_low_200) ? low : na, title="Not follow trend short term buy plot zone", style=plot.style_circles, linewidth=3, color=color.green)
//===================== open close order condition =========================================================//
strategy.entry("strong buy", true, 1, when=low == dead_cross_low_200)
strategy.exit("close strong buy 50%", "strong buy", qty_percent=50, when=high==slowhighest)
strategy.entry("strong sell", false, 1, when=high == dead_cross_high_200)
strategy.exit("close strong sell 50%", "strong sell", qty_percent=50, when=low==slowlowest)