Thảo luận AI-Deep Learning Hội Quán

Thanks bác @chim_non và các bác động viên.
Mình đọc ML DL khoảng 2 năm trước, khó trôi vì nặng toán học và bản thân lớn tuổi rồi. Các ví dụ trong MLDL mạnh về nhận dạng hình ảnh, độ chính xác rất cao 98-99,x %, trong khi bài toán của mình xác định từ đầu là dự đoán stock breakout. Các tài liệu, bài viết về lĩnh vực stock thường theo kiểu chữ nghĩa trả thầy chứ không phải kiểu của 1 người ptkt, giao dịch ck. Gần như không rút ra được gì nên nhiều lúc mình bỏ dở, tạm kết luận là stock có tính random, machine learning không giúp gì đâu. Cho đến gần đây le lói chút hy vọng, mình ghi lên đây hy vọng mọi người quan tâm cho ý kiến và thảo luận thêm.
Data VN30F1M, 5min, từ 1/2000 dến 1/2025, khoảng 350 điểm breakout. Sau khi huấn luyện thì mô hình cho kết quả như hình
Ô A dự đoán breakout, thực tế break thật, càng xa điểm (0,0) lợi nhuận càng cao
Ô B dự đoán không break, thực tế break, bỏ lỡ 1 số cơ hội
Ô C dự đoán không break, thực tế là không, tiết kiệm nhiều xương máu
Ô D dự đoán break, thực tế không break
Các điểm trong ô B và D ít hơn nihều các điểm trong ô A và C

Đó chỉ là phần mình nghiên cứu chứ chưa có áp dụng gì.

VN30F1M_predict.PNG
 
Last edited:
Anh rắn có thể nói chi tiết hơn về cái input data (350 điểm break, hình ảnh ra sao?) và training model (tool nào?) mà anh sử dụng trong nghiên cứu này không ạ? Em đọc về AI ứng dụng trong hình ảnh, chỉ thấy nổi lên mấy cái cơ bản như: Tính calo từ 1 bức ảnh; đọc chẩn đoán qua phim chụp CT, MRI; nhận dạng khuôn mặt; xe điện tự hành.
Gần đây, có xem bên VTV làm một đoạn phóng sự cuộc sống bên Mẽo, có thêm AI vẽ móng tay nữa.
D7282BD7-D028-4A83-9966-813FC22C189D.jpeg
 
Anh rắn có thể nói chi tiết hơn về cái input data (350 điểm break, hình ảnh ra sao?) và training model (tool nào?) mà anh sử dụng trong nghiên cứu này không ạ? Em đọc về AI ứng dụng trong hình ảnh, chỉ thấy nổi lên mấy cái cơ bản như: Tính calo từ 1 bức ảnh; đọc chẩn đoán qua phim chụp CT, MRI; nhận dạng khuôn mặt; xe điện tự hành.
Gần đây, có xem bên VTV làm một đoạn phóng sự cuộc sống bên Mẽo, có thêm AI vẽ móng tay nữa.
View attachment 9182
Các điểm breakout theo chiến lược giao dịch mình từng chia sẻ, nó là time series chứ không phải hình ảnh
Model SimpleRNN và các thứ khác
Dĩ nhiên mình sẽ dần dần viết chi tiết
 
Chào bác Ranluc,
Bác cho hỏi rõ thêm là mô hình của bác dùng cho chart ngày hay chart 5' ạ. Nếu là chart ngày thì mình hiểu hết mỗi ngày nó sẽ dự đoán ngày hôm sau có breakout (A) hay không (C). Nếu là chart 5' thì tức là nó sẽ dự báo 5' sau có xảy ra breakout hay không. Có phải không ạ.
Ngoài ra, input của mô hình sẽ là những thông tin gì bác nhỉ: giá close, open, min, max?, và có cả volume nữa không ạ.
Cảm ơn bác nhé.
 
Thanks bác @chim_non và các bác động viên.
Mình đọc ML DL khoảng 2 năm trước, khó trôi vì nặng toán học và bản thân lớn tuổi rồi. Các ví dụ trong MLDL mạnh về nhận dạng hình ảnh, độ chính xác rất cao 98-99,x %, trong khi bài toán của mình xác định từ đầu là dự đoán stock breakout. Các tài liệu, bài viết về lĩnh vực stock thường theo kiểu chữ nghĩa trả thầy chứ không phải kiểu của 1 người ptkt, giao dịch ck. Gần như không rút ra được gì nên nhiều lúc mình bỏ dở, tạm kết luận là stock có tính random, machine learning không giúp gì đâu. Cho đến gần đây le lói chút hy vọng, mình ghi lên đây hy vọng mọi người quan tâm cho ý kiến và thảo luận thêm.
Data VN30F1M, 5min, từ 1/2000 dến 1/2025, khoảng 350 điểm breakout. Sau khi huấn luyện thì mô hình cho kết quả như hình
Ô A dự đoán breakout, thực tế break thật, càng xa điểm (0,0) lợi nhuận càng cao
Ô B dự đoán không break, thực tế break, bỏ lỡ 1 số cơ hội
Ô C dự đoán không break, thực tế là không, tiết kiệm nhiều xương máu
Ô D dự đoán break, thực tế không break
Các điểm trong ô B và D ít hơn nihều các điểm trong ô A và C

Đó chỉ là phần mình nghiên cứu chứ chưa có áp dụng gì.

View attachment 9185
Cảm ơn bác đã chia sẻ thêm một góc nhìn cho làng ấp chứng.
 
Bài toán học máy trong ptkt chứng khoán
Các bài viết về đề tài này thường theo kiểu cho trước giá đóng cửa vài chục phiên trước, dự đoán giá đóng cửa phiên kế tiếp. Đối với trader kiểu đó là vô dụng.
Nếu ta có 1 hê thống gd dựa trên các chỉ báo kt truyền thống, hệ thống có các lệnh Buy, Sell, Short, Cover rồi, câu hỏi kế tiếp là liệu Machine Learning hay Deep Learning có thể giúp cải thiện hệ thống gd này không?
Ví dụ ở trường họp breakout, cần MLDL giúp thêm break thật hay break giả, xác suất break out thành công là bao nhiêu, có re-test hay vượt luôn, phân nhóm các mẫu hình break thành công và các mẫu hình break thất bại, dự đoán giá mục tiêu ...
Hay trường họp hệ thống dựa vào chỉ báo chính MACD, vào lệnh khi đường signal cắt đường MACD, bài toán không phải là dự đoán giá phiên kế tiếp, nến kế tiếp, mà là xác suất thắng của lệnh này, giá mục tiêu ...
 
Chào bác Ranluc,
Bác cho hỏi rõ thêm là mô hình của bác dùng cho chart ngày hay chart 5' ạ. Nếu là chart ngày thì mình hiểu hết mỗi ngày nó sẽ dự đoán ngày hôm sau có breakout (A) hay không (C). Nếu là chart 5' thì tức là nó sẽ dự báo 5' sau có xảy ra breakout hay không. Có phải không ạ.
Ngoài ra, input của mô hình sẽ là những thông tin gì bác nhỉ: giá close, open, min, max?, và có cả volume nữa không ạ.
Cảm ơn bác nhé.
Theo mình không nên dự ngày hôm sau có break hay không bạn à, chỉ nên dự khi có nến break xảy ra, thì break đó là break thật hay break giả.
Input là các thứ mà bạn nghĩ là có liên quan, có tương quan, O,H,L,C,V, giá trị các chỉ báo kt, chỉ số thế giới ..., sau đó sẽ có cách loại bớt ra.
Còn cụ thể mô hình của mình, chưa xong nên chưa có gì đưa ra tham khảo,
 
Bạn không cần phải cài đặt gì để chạy code machine learning, deep learning, bạn có thể chạy online trên Google Colab và tận dụng sức mạnh CPU, GPU của Google. Unzip và chép 2 file đính kèm lên thư mục Google Driver của bạn
- RNNs-for-VN30F.ipynb là file code Python
- VN30F_break_2018_2024.csv là file giá 5m mã VN30F1M trong khoảng th gian 2018-2024, format csv: Date/Time, Close, Signal, CMA, CO, CH, CL
Signal 1 là Buy, 2 là Sell, 3=Short, 4=Cover. CMA = C-EMA(20), CO = Close -Open, CH = Close -High, CL = Close - Low
Nó không chứa tất cả giá (nến) trong th gian đó mà chỉ chứa lân cận khu vực có tín hiệu thôi: 102 nến trước khi có lênh Buy hay Short (1 phiên gd có 51 nến 5 phút).
f0.JPG
 

Attachments

  • VN30F_break_2018_2024.zip
    517.7 KB · Views: 4
  • RNNs-for-VN30F.zip
    230.8 KB · Views: 4
Last edited:
f1.JPG
Ví dụ chart của 3 chuỗi giá Close 5m trước khi có tín hiệu mua break out 13:50 22/1/2018, 13:35 30/1/ 2018, 13:55 2/2/2018, vẽ chồng lên nhau. Kết quả giao dịch có lãi, có lỗ. Code sẽ phân tích các chuỗi data theo thời gian chứ không phải phân tích hình ảnh.
Các tín hiệu mua bán vào lệnh này là theo phương pháp gd mình đã giới thiệu trước đây, giá vượt kênh Donchian(20) và momentum cũng vượt kênh 50, cùng một vài chỉ báo xác nhận khác. StopLoss và take profit theo chỉ báo PSAR.
Lãi hay lỗ được tính theo phần trăm tăng giảm của chỉ số. Ở các giao dịch Short-Cover cũng vậy, ví dụ chỉ số giảm 2% sau khi breakdown, nghĩa là có lãi 2% (bất kể tỷ lệ margin, ký quỹ), target của gd này là -2.0%. Nếu bạn thấy phân tích cùng lúc các giao dịch Long và Short rắc rối quá thì bỏ Short đi, chỉ phân tích Long thôi.
Trong khoảng thời gian đó có 391 tín hiệu long, 278 tín hiệu short, tỷ lệ lãi lỗ tính theo Ami khoảng 50%. Phân bố lãi lỗ như hình dưới, tập trung nhiều sát 0%, nên cần phải kéo dãn ra để dễ xử lý.

f2.JPG
 
Last edited:
Bước chuẩn hóa data
Giá trị của chuỗi đầu vào (giá CLose VN30F1M) nằm trong khoảng 1000-1500, nên cần chuẩn hóa về xung quanh 0 (trung bình bằng 0), độ lệch deviation =1, hay bằng cách nào đó vì việc tính toán với con số quá lớn sẽ bị tràn. Ví dụ 3 chuỗi Buy đầu tiên như hình bên trên có giá trị trong khoảng 1050-1100 sẽ biến đổi về khoảng -3 - 3 như hình bên dưới.
f3.PNG

Các đặc trưng khác nếu có như CMA, CH, CL, Volume, RSI, MACD ... cũng cần chuyển đổi như vậy. Tuy nhiên ở phiên bản đơn giản này mình chỉ sử dụng giá Close
Sau khi breakout, một số trader sẽ chọn đánh giá theo tỷ lệ R:R=1:3 hay cách nào đó, mình chọn theo chỉ báo PSAR. Giá chạy được bao xa theo mình còn phụ thuộc diễn biến tương lai chứ không chỉ phụ thuộc chuỗi data trước khi break nên mình làm giảm (chặn) target bằng hàm tanh(), ví dụ sau break giá tăng 5 điểm thì target = 0.9, giá tăng 10 điểm thì target = 0.95. Phân bố target sau biến đổi có dạng như hình dưới
f4.PNG
Sau biến đổi thì data sẽ được chia ra, 70% để huấn luyện mô hình, 30% để kiểm tra.
Buy_train:273 Buy_test:118 Short_train:194 Short_test:84
 
Bước tăng cường data
Trong 6 năm có 391 tín hiệu long và 278 tín hiệu short, có thể là quá ít để phân tích nên cần phải tăng cường. Trong nhận dạng hình ảnh việc tăng cường ảnh có thể thực hiện bằng một số cách như thêm nhiễu trắng, lật ảnh, xoay ảnh, cắt crop ảnh. Trong code này mình thử thêm nhiễu trắng, là nhiễu có trung bình bằng 0, độ lệch chuẩn nhỏ.
f5.PNG
Ảnh trên ví dụ chuỗi data Buy_train[0] và chuỗi tăng cường thêm nhiễu của nó Buy_train_aug[0]. Một số ngẫu nhiên trong tập chuỗi huấn luyện sẽ có bản tăng cường chứ không cần phải toàn bộ. Việc tăng cường chỉ áp dụng cho tập huấn luyện. Tập chuỗi kiểm thử sẽ giữ nguyên.
Một cách khác là lật chuỗi data, cho mang dấu âm, target thay vì tăng thì sẽ giảm, mang dấu âm.
 
Last edited:
Sau các bước tiền xử lý data thì ta có các tổ hợp data chọn đưa vào mạng deep learning để huấn luyện:
1. chỉ Buy data
2. Buy và Buy_aug
3. Buy và Short
4. Buy và Buy_aug và Short và Short_aug
Chúng cần trộn ngẫu nhiên trước khi đưa vào mạng DL
 
Mạng thần kinh là gì ?
MACD được tạo bởi 3 đường EMA, mà sau này nhiều người quên mất nó có gì trong đó, cứ thấy đường xanh cắt đường đò là mua, đỏ cắt xanh là chốt. Vậy trader có cần biết mạng thần kinh là gì không, chắc là không, mình sẽ không viết lại vì sách giáo khoa đã có. Mình ước biểu diễn nó ra thành vài đường xanh đỏ vàng tím.
Trong Deep Learning có 2 dòng kiến trúc chính. Một là Mạng Nơ-ron Tích chập (Convolutional Neural Network), thường dùng để nhận dạng ảnh, Hai là Mạng nơ-ron hồi tiếp (Recurrent neural networks), thường dùng để phân tích chuỗi dữ liệu theo thời gian ví dụ như tt chứng khoán, âm thanh, khung hình trong video...
Phần code của mình giới thiệu loại mạng thứ 2. Trong dòng này có 3 cấu trúc phổ biến là Simple RNN, Nút hồi tiếp có cổng (gated recurrent unit - GRU) và Bộ nhớ ngắn hạn dài hạn (long short term memory - LSTM).
Bên cạnh đó có 2 dạng bài toán. Một là phân loại, ví dụ trong nhận dạng ảnh chụp CT ung thư hay không, 1 là có, 0 là không ung thư, hay xác suất 90% ung thư là xác suất cao, trong chứng khoán 1 là breakout thật, 0 là break giả, hay xác suất breakout bao nhiêu. Hai là bài toán hồi quy, ví dụ sau breakout lãi lỗ cụ thể mấy điểm, mấy phần trăm. Phần code của mình cố gắng giải bài toán hồi quy.
Vì số lượng điểm data quá ít nên mạng chỉ thiết kế đơn giản. Với 3 cấu trúc Simple RNN, GRU, LSTM chỉ cần thay 1 dòng code.
Code mạng Simple RNN
reg_model = Sequential() reg_model.add(Input(shape=x_train[0].shape)) # (timestep, #features) reg_model.add(SimpleRNN(units=50, activation='tanh', return_sequences=False)) reg_model.add(Dense(units=50, activation='tanh')) reg_model.add(Dense(units= 1, activation='tanh')) # sigmoid 0..1 tanh -1..1 reg_model.summary()

Mạng GRU
reg_model = Sequential() reg_model.add(Input(shape=x_train[0].shape)) # (timestep, #features) reg_model.add(GRU(units=50, activation='tanh', return_sequences=False)) reg_model.add(Dense(units=50, activation='tanh')) reg_model.add(Dense(units= 1, activation='tanh')) # sigmoid 0..1 tanh -1..1 reg_model.summary()

Mạng LSTM
reg_model = Sequential() reg_model.add(Input(shape=x_train[0].shape)) # (timestep, #features) reg_model.add(LSTM(units=50, activation='tanh', return_sequences=False)) reg_model.add(Dense(units=50, activation='tanh')) reg_model.add(Dense(units= 1, activation='tanh')) # sigmoid 0..1 tanh -1..1 reg_model.summary()
 
Last edited:
Back
Top