Xây dựng bot theo dõi, phán đoán điểm mua, bán của một cổ phiếu trong 24h
Nghỉ lễ 2/9 mùa dịch mình tự nhủ dành thời gian rảnh để làm một MVP(Minimum Viable Product) ngoài thời gian nấu ăn ( cái này hư cấu, thật ra thì WFH thay vì mất 40-50 phút di chuyển mình cũng tập tành nấu vài món ăn. Món nào hỏi con trai cũng thấy con khen ngon 😉 ) .
Lấy cảm hứng từ bài blog của Phan Tất Phúc https://labs.flinters.vn/devops/toi-bien-laptop-hong-thanh-can-cau-com-nhu-the-nao/
Mình bắt tay vào xây dựng một ứng dụng theo dõi giá của các mã chứng khoán, dựa vào các thuật toán phân tích kỹ thuật như các đường SMA , RSI…, nhận biết tín hiệu cổ phiếu đó tăng hay giảm. Lý do là mình có đầu tư chứng khoán, nhưng mình chọn những mã trong VN30, những mã mà doanh nghiệp có giá trị và đang phát triển tốt. Để thành công trong thị trường chứng khoán Việt Nam thì phải “thức thời”. Mình thì lại không muốn giành quá nhiều thời gian để theo dõi bảng giá. Nên đã bỏ lỡ nhiều cơ hội, trong khi những mã mình đang nắm giữ có “sức khỏe” không tốt.
Sau khi được Phúc giới thiệu một số tools mình bắt đầu nghiên cứu.
Đầu tiên là việc lấy dữ liệu từ các sàn chứng khoán, với phương châm sử dụng tối đa những thứ có sẵn, mình dùng tool https://github.com/phamdinhkhanh/vnquant .
Dùng tool này mình viết module lấy dữ liệu từ VNDIRECT. Các mã chứng khoán mình quan tâm mình lưu trữ trên google sheet. Lúc này cần viết thêm module đọc dữ liệu từ google sheet, bước này không mất quá nhiều thời gian và mình sử dụng https://docs.gspread.org/en/v4.0.1/.
Vậy là với việc sử dụng thư viện có sẵn, mình hoàn thiện công đoạn lấy dữ liệu của các mã chứng khoán mình quan tâm và lưu trữ dưới dạng file CSV.
Tiếp theo từ dữ liệu lấy về, để tính toán ra các đường SMA, RSI mình cũng không tự đi tìm hiểu và xây dựng module mà dùng thư viện Backtrader ( thư viện này cũng được Phúc giới thiệu ).
Để sử dụng thư viện này thì đầu vào chính là các file CSV mình đã lấy về ở bước trên, tất nhiên phải chỉnh sửa lại chút cho đúng format. Backtrader là một thư viện rất hay, cung cấp đầy đủ các module tính toán cho mình các công thức, đưa ra các kịch bản nếu chúng ta mua và bán ở các điểm theo strategy thì sẽ sinh lời như nào ( hình minh họa phía dưới).
Sử dụng backtrader mình viết một số strategy như đường SMA(10) cắt đường SMA (30) theo chiều lên thì là tín hiệu cổ phiếu này có thể mua vào. Hay theo dõi khối lượng giao dịch của một cổ phiếu so sánh với trung bình 10 phiên giao dịch gần nhất, nếu lớn hơn 1.25 lần thì cũng là tín hiệu cổ phiếu này có dấu hiệu tăng hoặc giảm.
Phần này mình đang tiếp tục xây dựng các strategy dựa vào kiến thức mình tìm hiểu và phán đoán theo kinh nghiệm.
Vậy là mình đã hoàn tất việc, lấy dữ liệu chứng khoán từ các sàn, xây dựng các kịch bản để phán đoán giá cổ phiếu. Giờ còn một bước nữa là nhận những tín hiệu này. Lúc này mình bắt tay vào viết một bot dùng Telegram API để gửi notification về một Telegram Group, mình sử dụng https://github.com/python-telegram-bot/python-telegram-bot . Viết xong thì deploy lên heroku để sử dụng miễn phí dịch vụ hosting của heroku.
Tada! Well done!!! Như vậy là mình đã hoàn tất các công đoạn xây dựng một StockBot, có thể theo dõi giúp mình tín hiệu của các cổ phiếu mà mình quan tâm. Hy vọng tuần tới khi sàn chứng khoán quay lại hoạt động, mình sẽ được thu nhận thành quả. Còn một số điểm mình có thể tối ưu, nhưng sẽ làm sau, sau một thời gian sử dụng.
Nói là 24 giờ nhưng thực ra chỉ mất 8-10 tiếng ( riêng viết blog này đã tiêu tốn của mình 1h đồng hồ rồi ^^ ).
Mình viết blog này với mong muốn truyền cảm hứng cho các bạn trẻ. Nếu có ý tưởng hãy bắt tay vào làm, dù là những thứ đơn giản nhưng cũng mang lại cho mình những trải nghiệm thú vị.
Và… nếu rảnh thì hãy tập tành nấu vài món ăn, công thức thì có thể lấy trên Titok, Youtube. 😉