Logo FinLensFinLens Docs

Lọc cổ phiếu theo P/E, ROE, thanh khoản bằng AI

Sàng lọc cổ phiếu Việt Nam bằng Claude hoặc ChatGPT theo điều kiện tự chọn trên P/E, ROE, thanh khoản, khối ngoại, RS, Điểm tổng hợp; xếp hạng theo một chỉ tiêu.

Sàng lọc cổ phiếu là bước đầu của hầu hết quy trình phân tích, và FinLens MCP cho bạn làm việc đó bằng một câu tiếng Việt thay vì kéo thả bộ lọc. Ba công cụ chia việc rõ: screener_list_fields cho biết có thể lọc theo trường nào với đơn vị gì, screener_run chạy cây điều kiện tự chọn, còn screener_top xếp hạng cả bảng lọc theo một chỉ tiêu duy nhất. Kết quả là danh sách mã thật kèm giá trị của đúng những trường bạn đã hỏi.

Có thể lọc theo những trường nào?

Công cụ screener_list_fields trả catalog trường của bảng lọc: mã trường, tên tiếng Việt, nhóm, kiểu dữ liệu, đơn vị, toán tử hợp lệ, thang giá trị gợi ý và tỷ lệ mã có dữ liệu ở phiên mới nhất. Các nhóm gồm giá và biến động (price), thanh khoản (liquidity), khối ngoại (foreign), cổ đông (shareholder), RS và Điểm tổng hợp (rating) và chỉ số cơ bản (fundamental) như P/E, P/B, ROE, ROA, biên lợi nhuận, tăng trưởng, vốn hoá.

Xem catalog một nhóm

Bộ lọc có những trường cơ bản nào, đơn vị từng trường là gì và bao nhiêu phần trăm mã có dữ liệu?

→ screener_list_fields: group='fundamental' — fields.code, unit, operators, coverage_pct

Tìm trường theo từ khoá

Có trường nào về khối ngoại để lọc không? Toán tử nào dùng được với chúng?

→ screener_list_fields: query='nước ngoài' — fields.operators, min_value / max_value, example_conditions

Hai trường ghi chú đáng xem trước khi lọc: coverage_pct bằng 0 nghĩa là trường hiện chưa có số liệu nên lọc sẽ rỗng; as_of_supported cho biết trường có dùng được khi lọc theo một phiên quá khứ hay không — chỉ số cơ bản thì không. Danh sách not_supported_here liệt kê các trường là tín hiệu kỹ thuật dạng sự kiện, thuộc signals_screen chứ không thuộc bộ lọc này.

Lọc theo điều kiện tự chọn

Công cụ screener_run nhận một cây điều kiện {logic, rules}: mỗi rule gồm field lấy từ catalog, op và value; một rule có thể là một nhóm con với logic riêng, lồng tối đa 3 cấp và tối đa 20 rule. Toán tử cho trường số là >=, <=, >, < và between với cặp [thấp, cao]; trường danh sách dùng in và not_in. Giá trị truyền theo đơn vị của trường, phần trăm đã nhân 100.

Hai điều kiện and

Tìm cổ phiếu trên HOSE có ROE từ 15% và P/E dưới 12, sắp theo thanh khoản giảm dần, lấy 20 mã

→ screener_run: conditions={logic:'and', rules:[roe >= 15, pe < 12]}, exchanges=['HOSE'], sort_by='avg_value_bil', limit=20

Lồng and/or và giới hạn ngành

Trong ngành ngân hàng, tìm mã có P/B dưới 1,5 và (ROE trên 18% hoặc tăng trưởng lợi nhuận trên 20%)

→ screener_run: icb_code='8300', rules lồng 2 cấp — nhóm con {logic:'or', rules:[...]}

Lọc trên dữ liệu một phiên cũ

Tại phiên 2026-10-01, mã nào có RS trên 80 và giá trị giao dịch bình quân trên 50 tỷ một phiên?

→ screener_run: as_of='2026-10-01' — chỉ trường có as_of_supported; chỉ số cơ bản không dùng được với as_of

Kết quả trả universe_size là số mã được xét sau khi lọc sàn và ngành, matched là tổng số mã thoả điều kiện trước khi cắt theo limit, và từng dòng gồm mã, sàn, mã ngành ICB cấp 4, giá đóng cửa theo nghìn VND, % thay đổi phiên và 1 tháng, RS 1–100, Điểm tổng hợp 1–99, giá trị giao dịch bình quân 3 tháng cùng values chứa giá trị của mọi trường đã dùng. Trường hoặc toán tử sai trả lỗi nêu rõ rule nào sai, nên bạn sửa đúng chỗ thay vì đoán.

Xếp hạng theo một chỉ tiêu

Công cụ screener_top xếp toàn bộ bảng lọc theo một trường số ở phiên mới nhất: chg_1m_pct tăng giá 1 tháng, chg_d_pct thay đổi trong phiên, avg_value_bil thanh khoản, foreign_net_value_bil khối ngoại mua bán ròng, rs_score, overall_rating, roe, pe, market_cap... direction là desc để lấy giá trị cao nhất trước hoặc asc để lấy thấp nhất trước.

Tăng mạnh nhất tháng

10 cổ phiếu tăng mạnh nhất 1 tháng qua trên HOSE và HNX là mã nào, thanh khoản từng mã ra sao?

→ screener_top: metric='chg_1m_pct', direction='desc', exchanges=['HOSE','HNX'], limit=10

Khối ngoại trong một ngành

Trong ngành bất động sản, mã nào được khối ngoại mua ròng nhiều nhất phiên gần nhất?

→ screener_top: metric='foreign_net_value_bil', icb_code='8600' — khớp cả ngành con

Mã không có giá trị của trường được xếp hạng bị bỏ qua, và screener_top không lọc thêm điều kiện nào khác — khi cần vừa lọc vừa xếp hạng, dùng screener_run với sort_by.

Chạy bộ lọc đã lưu trên FinLens

Bộ lọc bạn đã lưu trên FinLens chạy được ngay trong trợ lý AI sau khi đăng nhập qua OAuth. Công cụ me_saved_screens liệt kê các bộ lọc kèm saved_screen_id, điều kiện, các trường dùng và cờ runnable; truyền id đó vào screener_run(saved_screen_id=...) là chạy đúng bộ lọc trên phiên mới nhất. Bộ lọc có tín hiệu kỹ thuật dạng sự kiện thì không chạy được ở đây — danh sách trường đó nằm ở unsupported_fields. Chi tiết về dữ liệu cá nhân xem Danh mục, watchlist và bộ lọc của bạn.

Bộ lọc đã lưu

Chạy bộ lọc "Giá trị" tôi đã lưu trên FinLens và cho biết hôm nay có bao nhiêu mã khớp

→ me_saved_screens lấy id → screener_run: saved_screen_id=..., không truyền conditions cùng lúc

Phạm vi quét và giới hạn

Phạm vi của ba công cụ là bảng lọc của FinLens — rổ cổ phiếu thanh khoản, không phải toàn bộ mã niêm yết; universe_size trong kết quả cho biết đúng số mã được xét. Bộ lọc dựa trên dữ liệu cuối ngày của phiên ghi ở as_of, chỉ số cơ bản tính khi chạy nên không lọc được theo ngày quá khứ. Công cụ không tính tín hiệu kỹ thuật dạng sự kiện, không chấm điểm và không khuyến nghị mã nào; danh sách khớp điều kiện là điểm bắt đầu để phân tích tiếp, không phải danh mục nên mua.

Khác gì với signals_screen?

screener_run lọc theo trạng thái hiện tại của các trường trong catalog — giá, biến động, thanh khoản, khối ngoại, sở hữu, RS, Điểm tổng hợp, chỉ số cơ bản — với cây điều kiện tự do. signals_screen ở trang Tín hiệu kỹ thuật và backtest quét sự kiện kỹ thuật như giá cắt đường trung bình hay RSI vào vùng quá bán xuất hiện trong N phiên gần nhất, kèm bộ lọc cơ bản đi cùng. Trường nào catalog đánh dấu not_supported_here thì thuộc signals_screen; hai công cụ dùng cùng thang RS 1–100 nên kết quả đối chiếu được với nhau.

Bảng công cụ bộ lọc

Công cụViệc gìTham số chính
screener_list_fieldsCatalog trường lọc: mã, tên, nhóm, kiểu, đơn vị, toán tử, thang giá trị, % mã có dữ liệu, ví dụ conditions; liệt kê trường thuộc signals_screengroup, query
screener_runLọc theo cây điều kiện and/or (≤ 3 cấp, ≤ 20 rule), theo sàn và ngành ICB, sắp xếp theo trường bất kỳ, lọc theo phiên quá khứ, hoặc chạy bộ lọc đã lưuconditions, sort_by, sort_dir, exchanges, icb_code, limit, as_of, saved_screen_id
screener_topXếp hạng cả bảng lọc theo một trường số ở phiên mới nhất, cao nhất hoặc thấp nhất trướcmetric, direction, exchanges, icb_code, limit

Bài liên quan

Câu hỏi thường gặp

Lọc cổ phiếu có ROE trên 15% và P/E dưới 12 bằng AI thế nào?

Chỉ cần hỏi trợ lý AI bằng tiếng Việt, ví dụ tìm cổ phiếu HOSE có ROE từ 15% và P/E dưới 12, sắp theo thanh khoản. FinLens MCP gọi screener_run với cây điều kiện gồm hai rule roe >= 15 và pe < 12 nối bằng logic and, lọc sàn qua exchanges rồi sắp xếp theo avg_value_bil. Kết quả trả từng mã kèm giá, % thay đổi, RS, Điểm tổng hợp, thanh khoản và giá trị thật của mọi trường đã dùng trong điều kiện. Điều kiện có thể lồng and/or tối đa 3 cấp với tối đa 20 rule.

Làm sao biết bộ lọc có những trường nào và đơn vị ra sao?

Công cụ screener_list_fields của FinLens MCP trả catalog đầy đủ: mã trường dùng trong rule, tên tiếng Việt, nhóm, kiểu số hay danh sách, đơn vị như %, nghìn VND, tỷ VND hay lần, toán tử hợp lệ, thang giá trị gợi ý, trường có sắp xếp được không, có lọc theo ngày quá khứ được không và tỷ lệ mã có dữ liệu ở phiên mới nhất. Có thể lọc catalog theo nhóm hoặc từ khoá, ví dụ nhóm fundamental hay từ khoá nước ngoài. Kết quả kèm ví dụ conditions hợp lệ để tham chiếu.

Cổ phiếu nào tăng mạnh nhất tháng qua hoặc được khối ngoại mua ròng nhiều nhất?

Công cụ screener_top của FinLens MCP xếp hạng toàn bộ bảng lọc theo một trường duy nhất ở phiên mới nhất. Hỏi tăng mạnh nhất tháng thì AI dùng metric chg_1m_pct với direction desc; hỏi giảm mạnh nhất thì direction asc; hỏi khối ngoại mua ròng nhiều nhất thì metric foreign_net_value_bil. Có thể giới hạn theo sàn hoặc một ngành ICB ở bất kỳ cấp nào, ngành con được tính luôn. Mã không có giá trị của trường bị bỏ qua và công cụ không lọc thêm điều kiện khác.

FinLens MCP có chạy được bộ lọc tôi đã lưu trên FinLens không?

Có. Sau khi đăng nhập FinLens qua OAuth, me_saved_screens liệt kê các bộ lọc đã lưu kèm id, điều kiện, các trường dùng và cờ runnable cho biết screener_run chạy được toàn bộ điều kiện hay không. Truyền saved_screen_id vào screener_run là chạy đúng bộ lọc đó trên dữ liệu phiên mới nhất. Bộ lọc có chứa tín hiệu kỹ thuật dạng sự kiện thì không chạy được ở đây vì các trường đó thuộc signals_screen; danh sách trường không hỗ trợ nằm ở unsupported_fields.

screener_run khác signals_screen ở điểm nào?

screener_run của FinLens MCP lọc theo trạng thái hiện tại của các trường trong catalog như giá, biến động, thanh khoản, khối ngoại, sở hữu, RS, Điểm tổng hợp và chỉ số cơ bản, với cây điều kiện tự do và không tính tín hiệu kỹ thuật dạng sự kiện. signals_screen quét sự kiện kỹ thuật như giá cắt đường trung bình, RSI hay MACD xuất hiện trong N phiên gần nhất kèm bộ lọc cơ bản đi cùng. Khi catalog của screener_list_fields liệt kê một trường trong not_supported_here thì trường đó là tín hiệu dạng sự kiện và cần dùng signals_screen.

Cập nhật lần cuối

Nội dung trang