Các bác oánh chứng khoán có hay đặt SL và TP không ạ. Mình sau những cú sập mất cả đống tiền nên đã tự kỉ luật SL, TP cho bản thân. Trong quá trình sử dụng mình cũng khá tò mò về cách thức xử lí, công nghệ sử dụng bên dưới. Dưới đây là ý tưởng thiết kế của mình.
Trong thực tế, ví dụ con hàng cổ phiếu HPG thanh khoản một phiên của nó rất lớn. Các tín hiệu giá khớp được sinh ra liên tục.
Bài toán đặt ra:
- Sử dụng công nghệ gi để lưu trữ lệnh stop loss, take profit
- Tổ chức dữ liệu như nào để có thể trích xuất và kích hoạt lệnh nhanh chóng và hiệu quả nhất.
Sau khi mình đặt ra được bài toán cụ thể thì trong đầu mình có suy nghĩ ngay đến việc sử dụng redis và lựa trọn cấu trúc dữ liệu Redis Sorted Set để thực hiện lưu trữ thông tin, trong đó:
- key: mã chứng khoán + suffix (suffix ở đây là loại lệnh STOPLOST hoặc TAKE_PROFIT)
- score: giá mục tiêu
- value: ID lệnh|ID khách hàng|khối lượng kích hoạt bán|Mã chứng khoán
Ví dụ hiện tại trong tài sản của mình đang có 1000 cổ phiếu HPG, giá vốn mình mua là giá 19, hiện tại HPG đang giao dịch với giá là 20, mình tiến hành đặt lệnh STOP_LOSS và TAKE_PROFIT lần lượt là 17 và 24. Sau khi đặt lệnh thành công hệ thống sinh ra cho mình 2 lệnh và có ID định danh tương ứng STOP_LOSS là 100 và TAKE_PROFIT là 101 . Đồng thời dữ liệu sẽ được tổ chức trong redis như sau:
ZADD HPG-STOPLOSS 17 "100|081xxx|1000|HPG"
ZADD HPG-TAKEPROFIT 24 "101|081xxx|1000|HPG"
Khi nhận được tín hiện giá thị trường ví dụ lúc này HPG tăng lên giá 23.5. Hệ thống sẽ thực hiện command redis như sau:
ZREVRANGEBYSCORE HPG-STOPLOSS +inf 23.5 LIMIT 0 1
ZRANGEBYSCORE HPG-TAKEPROFIT -inf 23.5 LIMIT 0 1
Kết quả:
Nhìn vào kết quả trên chúng ta không tìm thấy có lệnh nào thỏa mãn điều kiện khi HPG ở giá 23.5.
Tiếp, đội lái cỏ Việt Nam quyết tâm để cổ phiếu HPG hôm nay đóng nến ở 24. Nến đã kéo cổ phiếu lên và hiện tại giá cổ phiếu đang ở giá 24
ZREVRANGEBYSCORE HPG-STOPLOSS +inf 24 LIMIT 0 1
ZRANGEBYSCORE HPG-TAKEPROFIT -inf 24 LIMIT 0 1
Kết quả:
Nhìn kết quả thấy lệnh TAKE_PROFIT có kết quả lệnh thỏa mãn trả về => Hệ thống sẽ kích hoạt lệnh bán
Tương tự trường hợp nếu HPG bị đạp và giá hiện tại đang là 17 thì:
ZREVRANGEBYSCORE HPG-STOPLOSS +inf 17 LIMIT 0 1
ZRANGEBYSCORE HPG-TAKEPROFIT -inf 17 LIMIT 0 1
Kết quả:
Trên đây mình trình bày các khá đơn giản trong bài toán SL, TP. Anh em có ý tưởng nào hay thì comment phía dưới nhé.