Đây là một chiến lược theo dõi xu hướng được thiết kế dựa trên chỉ số bảng cân bằng đầu tiên. Chiến lược này sử dụng đường chuyển đổi, đường chuẩn và hình dạng của đám mây trên bảng cân bằng đầu tiên, đặt ra các điều kiện nhập cảnh rất nghiêm ngặt, đồng thời sử dụng một cách dừng lỗ đơn giản để đóng lệnh.
Chiến lược này sử dụng đường chuyển đổi, đường chuẩn, đường A và đường B của bảng cân bằng đầu tiên và mối quan hệ giữa giá và chính nó để đánh giá hướng và sức mạnh của xu hướng. Các tiêu chuẩn đánh giá cụ thể như sau:
Một tín hiệu mua được tạo ra khi tất cả các điều kiện trên được đáp ứng cùng một lúc; một tín hiệu bán được tạo ra khi tất cả các điều kiện bị đảo ngược.
Chiến lược này đồng thời thiết lập đường dài A làm đường dừng chân. Khi giá vượt qua đường dừng chân, nó sẽ xóa các vị trí liên quan.
Đây là một chiến lược có điều kiện rất nghiêm ngặt, vì vậy nó có thể tránh được sự can thiệp của tín hiệu giả, do đó khóa cơ hội của xu hướng lớn. Đồng thời, chiến lược sử dụng nhiều chỉ số để đánh giá xu hướng, tránh rủi ro hệ thống khi chỉ số đơn lẻ sai.
Chiến lược này phù hợp với việc nắm giữ đường dài, có thể làm giảm tần suất giao dịch, giúp giảm chi phí giao dịch và tác động của điểm trượt.
Đường dừng lỗ của chiến lược này là khá lỏng lẻo, đường đi phía trước A. Điều này có thể dẫn đến rủi ro lớn về tổn thất đơn lẻ. Bạn có thể xem xét thắt chặt đường dừng lỗ hoặc sử dụng các chỉ số phụ trợ để kiểm soát rủi ro.
Ngoài ra, có ít tín hiệu chiến lược, có thể bỏ lỡ một số cơ hội ngắn. Nếu theo đuổi giao dịch với tần suất cao hơn, bạn có thể xem xét giảm mức độ nghiêm ngặt của một số điều kiện nhập cảnh.
Có thể cân nhắc cân bằng thả lỏng trên các điều kiện vào, giảm ngưỡng vào để có được nhiều tín hiệu hơn; hoặc nâng cao tiêu chuẩn lọc nhiều tiếng ồn hơn, khóa tín hiệu ít tinh tế hơn.
Phương pháp dừng lỗ có thể được tối ưu hóa, thử nghiệm các phương pháp như dừng tự động hoặc dừng lỗ từ xa, để kiểm soát tổn thất đơn lẻ.
Có thể kiểm tra ảnh hưởng của các tham số khác nhau đối với kết quả, tìm ra sự kết hợp tham số tối ưu. Các chỉ số khác cũng có thể được thêm vào để xếp hạng, cho phép quản lý đơn đặt hàng chính xác hơn.
Đây là một chiến lược theo dõi xu hướng rất nghiêm ngặt. Nó sử dụng nhiều chỉ số trên bảng cân bằng để đánh giá xu hướng và cường độ, tránh tín hiệu giả.
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="BadaBing Ichimoku", shorttitle="BadaBing", overlay=true)
atr_period = input(title="ATR Period", defval=20)
conversion_period = input(title="Conversion Line Period", defval=9, minval=1)
base_period = input(title="Base Line Period", defval=26, minval=1)
span_b_period = input(title="Span B Period", defval=52, minval=1)
displacement = input(title="Displacement", defval=26, minval=1)
min_current_cloud_atr = input(title="Min Current Cloud ATR", type=float, defval=1.0)
min_future_cloud_atr = input(title="Min Future Cloud ATR", type=float, defval=0)
check_base_line_above_cloud = input(title="Check Base Line above Cloud?", type=bool, defval=true)
check_conversion_line_above_base_line = input(title="Check Conversion Line above Base Line?", type=bool, defval=true)
check_price_above_conversion_line = input(title="Check Price above Conversion Line?", type=bool, defval=true)
check_span_a_point_up = input(title="Check Current Span A is pointing Up?", type=bool, defval=false)
check_span_b_point_up = input(title="Check Current Span B is pointing Up?", type=bool, defval=false)
check_future_span_a_point_up = input(title="Check Future Span A is pointing Up?", type=bool, defval=true)
check_future_span_b_point_up = input(title="Check Future Span B is pointing Up?", type=bool, defval=true)
check_base_line_point_up = input(title="Check Base Line is Pointing Up?", type=bool, defval=true)
check_conversion_line_point_up = input(title="Check Conversion Line is Pointing Up?", type=bool, defval=true)
bullish_color = #ccff99
bearish_color = #ff704d
span_a_color = #0000cc
span_b_color = #000066
conversion_color = #ff99ff
base_color = #4da6ff
bull_signal_color = #228b22
bear_signal_color = #990000
donchian(len) => avg(lowest(len), highest(len))
bchange(series) => series and not series[1]
conversion_line = donchian(conversion_period)
base_line = donchian(base_period)
future_span_a = avg(conversion_line, base_line)
future_span_b = donchian(span_b_period)
span_a = future_span_a[displacement]
span_b = future_span_b[displacement]
current_atr = atr(atr_period)
min_cloud_width = min_current_cloud_atr * current_atr
current_cloud_long_flag = span_a > (span_b + min_cloud_width)
current_cloud_short_flag = span_a < (span_b - min_cloud_width)
future_cloud_long_flag = future_span_a > (future_span_b + min_cloud_width)
future_cloud_short_flag = future_span_a < (future_span_b - min_cloud_width)
base_line_long_flag = check_base_line_above_cloud ? (base_line > span_a) : true
base_line_short_flag = check_base_line_above_cloud ? (base_line < span_a) : true
conversion_line_long_flag = check_conversion_line_above_base_line ? (conversion_line > base_line) : true
conversion_line_short_flag = check_conversion_line_above_base_line ? (conversion_line < base_line) : true
price_long_flag = check_price_above_conversion_line ? (close > conversion_line) : true
price_short_flag = check_price_above_conversion_line ? (close < conversion_line) : true
span_a_point_long_flag = check_span_a_point_up ? (span_a > span_a[1]) : true
span_a_point_short_flag = check_span_a_point_up ? (span_a < span_a[1]) : true
span_b_point_long_flag = check_span_b_point_up ? (span_b > span_b[1]) : true
span_b_point_short_flag = check_span_b_point_up ? (span_b < span_b[1]) : true
future_span_a_point_long_flag = check_future_span_a_point_up ? (future_span_a > future_span_a[1]) : true
future_span_a_point_short_flag = check_future_span_a_point_up ? (future_span_a < future_span_a[1]) : true
future_span_b_point_long_flag = check_future_span_b_point_up ? (future_span_b > future_span_b[1]) : true
future_span_b_point_short_flag = check_future_span_b_point_up ? (future_span_b < future_span_b[1]) : true
base_line_point_long_flag = check_base_line_point_up ? (base_line > base_line[1]) : true
base_line_point_short_flag = check_base_line_point_up ? (base_line < base_line[1]) : true
conversion_line_point_long_flag = check_conversion_line_point_up ? (conversion_line > conversion_line[1]) : true
conversion_line_point_short_flag = check_conversion_line_point_up ? (conversion_line < conversion_line[1]) : true
bada_long = bchange(current_cloud_long_flag)
or bchange(future_cloud_long_flag)
or bchange(base_line_long_flag)
or bchange(conversion_line_long_flag)
or bchange(price_long_flag)
or bchange(span_a_point_long_flag)
or bchange(span_b_point_long_flag)
or bchange(future_span_a_point_long_flag)
or bchange(future_span_b_point_long_flag)
or bchange(base_line_point_long_flag)
or bchange(conversion_line_point_long_flag)
bada_short = bchange(current_cloud_short_flag)
or bchange(future_cloud_short_flag)
or bchange(base_line_short_flag)
or bchange(conversion_line_short_flag)
or bchange(price_short_flag)
or bchange(span_a_point_short_flag)
or bchange(span_b_point_short_flag)
or bchange(future_span_a_point_short_flag)
or bchange(future_span_b_point_short_flag)
or bchange(base_line_point_short_flag)
or bchange(conversion_line_point_short_flag)
bada_color = bada_long ? bull_signal_color : bear_signal_color
plotshape(bada_long or bada_short, title="bada",
style=shape.circle,
location=location.belowbar,
color=bada_color,
transp=50)
bing_long = current_cloud_long_flag
and future_cloud_long_flag
and base_line_long_flag
and conversion_line_long_flag
and price_long_flag
and span_a_point_long_flag
and span_b_point_long_flag
and future_span_a_point_long_flag
and future_span_b_point_long_flag
and base_line_point_long_flag
and conversion_line_point_long_flag
bing_short = current_cloud_short_flag
and future_cloud_short_flag
and base_line_short_flag
and conversion_line_short_flag
and price_short_flag
and span_a_point_short_flag
and span_b_point_short_flag
and future_span_a_point_short_flag
and future_span_b_point_short_flag
and base_line_point_short_flag
and conversion_line_point_short_flag
bing_color = bing_long ? bull_signal_color : bear_signal_color
plotshape(bchange(bing_long or bing_short), title="bing",
style=shape.diamond,
location=location.abovebar,
color=bing_color,
transp=0)
c = plot(conversion_line, color=conversion_color, title="Conversion Line", linewidth=2)
b = plot(base_line, color=base_color, title="Base Line", linewidth=2)
p1 = plot(future_span_a, offset = displacement, color=span_a_color, title="Span A", linewidth=3)
p2 = plot(future_span_b, offset = displacement, color=red, title="Span B", linewidth=3)
fill(p1, p2, color = future_span_a > future_span_b ? bullish_color : bearish_color, transp = 60)
strategy.entry("long", true, 1, when=bing_long)
strategy.exit("stop", "long", stop=span_a)
strategy.close("long", when=close < base_line)
strategy.entry("short", false, 1, when=bing_short)
strategy.exit("stop", "short", stop=span_a)
strategy.close("short", when=close > base_line)