Cách hoạt động
Ba sơ đồ nhìn thư viện từ bên trong, dùng đúng tên trong code để bạn tìm được từng phần trong mã nguồn. Trỏ chuột vào một bước, hoặc dùng Tab để tới nó, để thấy các ô mà bước đó nói tới. Bạn không cần những điều này để dùng biểu đồ; chúng có ích khi bạn viết một nguồn dữ liệu, một plugin, hoặc sửa chính thư viện.
Từ nguồn dữ liệu tới màn hình
Một cây nến đi cùng một đường dù nó đến từ sàn hay từ code của bạn, và một kho duy nhất giữ nó. Mọi thứ được vẽ đều tính ra từ kho đó và khung nhìn.
- Nến đi vào. DataFeed được gọi để lấy lịch sử (getBars) và được đăng ký để nhận nến trực tiếp; DataAdapter, như BinanceAdapter, đẩy mọi thứ ra dưới dạng sự kiện. StreamManager biến một feed thành adapter, gộp lại theo khung thời gian của biểu đồ và dựng nến từ tick.
- Biểu đồ nhận nến. chart.connect() lắng nghe các sự kiện snapshot, barUpdate, barClose và barCorrection. Code của bạn ghi cùng những cây nến đó bằng setData, appendBar, updateLastBar hoặc updateBar, không cần feed nào.
- Một kho duy nhất. Mọi lần ghi đều đi qua SeriesStore. Nó giữ các nến đang hiển thị, toàn bộ chuỗi khi nến ngoài giờ bị ẩn, và chuỗi trực tiếp được cất sang bên trong lúc replay, rồi báo cho biểu đồ biết mỗi lần ghi đã làm gì.
- Tính ra thứ cần vẽ. DisplaySeries dựng chuỗi mà kiểu biểu đồ vẽ (Heikin Ashi, Renko, Kagi…), giữ trong bộ nhớ đệm tới khi nến đổi. IndicatorEngine chỉ tính lại từ cây nến đầu tiên thay đổi. PriceFit khớp thang giá và PaneLayout chia kích thước các pane.
- Khung nhìn. Viewport giữ những nến nào đang thấy, mỗi nến rộng bao nhiêu và đã cuộn tới đâu. Kéo chuột, con lăn và phím cuộn và phóng to nó qua InteractionManager.
- Một khung hình. RenderEngine đánh dấu các lớp đã thay đổi và vẽ chúng ở khung hình kế tiếp; tick trực tiếp được gom trước, nên một loạt tick chỉ thành một khung hình. Canvas scene giữ lưới, chuỗi giá, chỉ báo, hình vẽ và các trục; canvas top giữ crosshair và legend, nên di chuột chỉ vẽ lại canvas đó. Với renderer: 'webgl', một canvas GPU vẽ nến và khối lượng ở bên dưới.
- Trở về ứng dụng của bạn. Biểu đồ báo lại qua sự kiện: crosshairMove, dataUpdate, visibleRangeChange, symbolChange và các sự kiện khác, liệt kê trong tham chiếu API.
Cách viết nguồn dữ liệu của riêng bạn ở Thời gian thực & Replay; chi phí mỗi khung hình ở Hiệu năng.
ChartWidget được ghép từ những gì
ChartWidget là cả màn hình giao dịch bao quanh một Chart. Các phần của nó
là những lớp nhỏ, mỗi lớp chỉ thấy những gì được trao cho nó.
- Một lớp công khai. ChartWidget giữ các phương thức công khai và phần khởi tạo. Hàm khởi tạo là một danh sách bước theo thứ tự các phần cần nhau: readOptions, buildRoot, buildToolbar, buildBody, buildChart … finishSetup.
- Mỗi vùng qua một host. Replay, giao dịch, cảnh báo, so sánh, watchlist, legend, menu, lệnh, bố cục, dock, Chart Settings, chỉnh sửa hình vẽ và khung thời gian đều là lớp riêng. Mỗi lớp nhận một host interface liệt kê đúng những gì nó dùng từ widget, và một phương thức công khai trên ChartWidget chuyển tiếp sang vùng của nó.
- Một biểu đồ. buildChart tạo ra Chart duy nhất mà widget bao lấy. Mọi vùng tới được nó qua host của mình; không vùng nào có biểu đồ riêng. Widget lắng nghe sự kiện của biểu đồ để giữ thanh công cụ và legend khớp theo.
- Signal. Trạng thái mà nhiều phần cùng hiển thị là một signal: giao diện (look), những nút nào trên thanh công cụ đang mở (openRoles) và Chart Settings. Một effect cập nhật mọi chỗ hiển thị nó, nên nơi ghi không phải tự gọi từng lần cập nhật.
- Hộp thoại tải khi mở lần đầu. Các hộp thoại lớn, hộp thoại chỉ báo, bảng lệnh và ô tìm mã nằm trong DIALOGS và chỉ tải code ở lần mở đầu tiên. Chúng mở trong overlayHost, lớp này chuyển vào bên trong widget khi toàn màn hình.
Một lần replay
Replay chạy lại quá khứ từng nến một trên chính biểu đồ đó, còn nến trực tiếp được cất sang bên tới khi kết thúc.
- Chọn một nến. Nút replay mở thanh replay; nhấp vào một nến, hoặc gọi replayFrom(), chọn chỗ bắt đầu.
- Bắt đầu. chart.replayStart() bảo SeriesStore cất các nến trực tiếp sang bên, rồi nạp các nến cần phát vào ReplayManager, nó chờ ở trạng thái tạm dừng tại điểm bắt đầu.
- Từng bước. Phát, tạm dừng, tiến hoặc lùi một bước và tốc độ đều đi tới ReplayManager. Mỗi bước gửi một sự kiện bar; biểu đồ hiển thị các nến tới đó (showReplayed, hoặc appendReplayed khi tiến tới).
- Những gì đi theo replay. Chỉ báo tính lại từ cây nến thay đổi, đường giá hiển thị giá đóng cửa đang replay, và tài khoản paper trading giao dịch ở giá replay. Lệnh và cảnh báo của tài khoản thật vẫn chạy theo giá trực tiếp.
- Kết thúc. Tới nến cuối thì replay tạm dừng. Thoát ra sẽ gọi replayStop(): SeriesStore đặt chuỗi trực tiếp trở lại và biểu đồ chạy trực tiếp như trước.
Tuỳ chọn và sự kiện ở Thời gian thực & Replay.