Tập lệnh hoặc chiến lược cho kết quả khác nhau sau khi làm mới trang (sơn lại)

Dữ liệu lịch sử không bao gồm các bản ghi về biến động nội thanh của giá cả; chỉ mở, cao, thấp và đóng (OHLC). Điều này dẫn đến một tập lệnh đôi khi hoạt động khác nhau trên dữ liệu lịch sử và trong thời gian thực, trong đó chỉ có giá mở được biết và giá thường sẽ di chuyển nhiều lần trước khi các giá trị cao, thấp và đóng cuối cùng của thanh thời gian thực được đặt sau giá trị thực thanh thời gian đóng cửa.

Nếu chúng ta thêm một tập lệnh trên biểu đồ, hãy đợi cho đến khi tập lệnh tính toán trên một số thanh thời gian thực và sau đó tải lại trang, đôi khi chúng ta sẽ thấy một tập lệnh Plots thay đổi một chút. Hành vi này là một trong một vài loại hành vi khác nhau thường được gọi là sơn lại chỉ báo. Đây là loại sơn lại mà chúng tôi quan tâm ở đây và sẽ đề cập đến khi sử dụng sơn lại. Đó là do thực tế là khi các tính năng nhất định được sử dụng trong các tập lệnh, các tính năng sẽ tính toán khác nhau trên các thanh lịch sử và thời gian thực.

Các loại hành vi khác được gọi đúng hoặc sai được gọi là sơn lại bao gồm âm mưu với phần bù âm trên các thanh quá khứ và sử dụng thông tin tương lai không có sẵn nhận được thông qua các cuộc gọi bị hiểu nhầm là hàm request.security. Điều này có thể đưa dữ liệu không có sẵn trong thời gian thực vào tính toán tập lệnh.

Không phải tất cả các chỉ số đều phải tuân theo kiểu sơn lại mà chúng ta thảo luận ở đây. Trong hầu hết các trường hợp, sơn lại phụ thuộc vào việc có hay không các chức năng hoặc cấu trúc ngôn ngữ nhất định được sử dụng trong mã. Xin lưu ý rằng hiệu ứng sơn lại này không phải là lỗi mà là kết quả của sự khác biệt vốn có giữa các thanh lịch sử và thông tin thanh thời gian thực trên TradingView.

Chúng ta có thể thấy sơn lại trong các trường hợp sau:

1. Chiến lược sử dụng calc_on_every_tick = true. Chiến lược với tham số calc_on_every_tick = false cũng có thể dễ bị sơn lại, nhưng ở mức độ thấp hơn.

2. Sử dụng  request.security để yêu cầu dữ liệu từ độ phân giải cao hơn độ phân giải của biểu đồ chính Mã giao dịch chính:

// Add this study on 1 minute chart
//@version=4
study("My Script")
c = security(syminfo.tickerid, "5", close)
plot(close)
plot(c, color=color.red)

Nghiên cứu này sẽ tính toán khác nhau trên dữ liệu lịch sử và thời gian thực, bất kể giá trị tham số nhìn của giá trị (xem Hiểu về giao diện).

3. Sử dụng security để yêu cầu dữ liệu từ độ phân giải thấp hơn độ phân giải của biểu đồ chính Mã giao dịch chính (có thêm thông tin tại đây):

// Add this study on 5 minute chart
//@version=3
study("My Script")
c = security(tickerid, "1", close, lookahead=false)
plot(close)
plot(c, color=red)

Nếu lookahead=barmerge.lookahead_off, sẽ xảy ra sơn lại. Khi lookahead=barmerge.lookahead_on, sơn lại ít có khả năng xảy ra hơn. Sơn lại vẫn có thể xảy ra khi các bản cập nhật 1 và 5 phút vượt qua nhau.

4. Tất cả các tập lệnh tính toán tùy thuộc vào điểm bắt đầu. Dữ liệu trong ngày được căn chỉnh vào đầu tuần, tháng hoặc năm, tùy thuộc vào độ phân giải. Do đó, kết quả được tạo ra bởi các tập lệnh như vậy có thể khác nhau theo thời gian. Đây là những trường hợp mà các kịch bản sẽ dựa vào điểm bắt đầu:

  • khi họ sử dụng các hàm valuewhen, barsince hoặc ema (do đặc thù trong thuật toán của họ)
  • bất kỳ chiến lược backtesting nào (bất kể cách xác định tham số calc_on_every_tick)

Độ phân giải và sắp xếp điểm bắt đầu có sự phụ thuộc với nhau:

  • 1 - 14 phút - sắp xếp vào đầu tuần
  • 15 - 29 phút - sắp xếp vào đầu tháng
  • từ 30 phút trở lên - sắp xếp đến đầu năm

Các giới hạn sau về độ dài lịch sử được tính đến khi xử lý dữ liệu:

  • 40000 thanh lịch sử cho các kế hoạch cuối cùng
  • 30000 thanh lịch sử cho gói Elite
  • 25000 thanh lịch sử cho kế hoạch Chuyên gia
  • 20000 thanh lịch sử cho gói Premium
  • 10000 thanh lịch sử cho gói Pro và Pro+
  • 5000 thanh lịch sử cho các kế hoạch khác

5. Thay đổi dữ liệu lịch sử, ví dụ, do bị chia tách.

6. Sự hiện diện của các biến sau trong tập lệnh thường dẫn đến việc vẽ lại: