Chiến lược theo xu hướng dựa trên Ichimoku Kinko Hyo


Ngày tạo: 2024-01-18 15:03:28 sửa đổi lần cuối: 2024-01-18 15:03:28
sao chép: 2 Số nhấp chuột: 363
1
tập trung vào
1214
Người theo dõi

Chiến lược theo xu hướng dựa trên Ichimoku Kinko Hyo

Tổng quan

Đâ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.

Nguyên tắc chiến lược

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:

  1. Hiện tại, đám mây rộng lớn và giá cả cao hơn đám mây.
  2. Tương lai của đám mây.
  3. Đường chuẩn nằm trên mây.
  4. Đường chuyển đổi trên đường chuẩn;
  5. Giá cả trên đường chuyển đổi;
  6. Các đường biên A, đường biên B, đường chuẩn và đường chuyển đổi hiện tại và trong tương lai đều hướng lên;

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.

Phân tích lợi thế

Đâ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.

Phân tích rủi ro

Đườ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.

Hướng tối ưu hóa

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.

Tóm tắt

Đâ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ả.

Mã nguồn chiến lược
/*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)