Vnstock Logo

Phân Tích Chuyên Sâu (Insights)

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

Thảo luận

Mục lục

Lưu ý Quan Trọng
  • Cấu trúc dữ liệu (Schema): Để xem chính xác tên cột, kiểu dữ liệu (Dtype) và ý nghĩa của các bảng dữ liệu trả về, vui lòng tham khảo chi tiết tại đây. KHÔNG nên suy đoán tên cột khi viết mã xử lý.
  • Cách Sử Dụng Nâng Cao: Hướng dẫn này tập trung vào kiến trúc Unified UI mặc định. Nếu bạn muốn can thiệp sâu vào nguồn dữ liệu, vui lòng tham khảo Tính Năng Nâng Cao.

📌 Tổng Quan

Insights Layer cung cấp xếp hạng top cổ phiếubộ lọc chứng khoán để nhà đầu tư nhận diện cơ hội và xu hướng thị trường.

Lưu ý: Nhóm chức năng định giá (P/E, P/B toàn thị trường) đã được chuyển sang nhóm lệnh Analytics từ phiên bản Unified UI mới. Nếu trước đây bạn dùng Insights().valuation, vui lòng chuyển sang Analytics().valuation(index).

🏗️ Cấu Trúc Nhóm Lệnh

Python
Insights()
├── .ranking       # Xếp hạng top cổ phiếu
├── .screener      # Bộ lọc chứng khoán
├── .sentiment     # Tâm lý thị trường (Experimental)
├── .flow          # Dòng tiền thị trường (Experimental)
├── .sector()      # Phân tích ngành (Experimental)
└── .equity()      # Phân tích cổ phiếu (Experimental)

1. Xếp hạng (Ranking)

Xếp hạng top cổ phiếu theo các tiêu chí khác nhau: tăng giá, giảm giá, khối lượng, nước ngoài, v.v.

Source: VND
Nhóm lệnh: insights.ranking

Phương Thức

MethodTham SốMô TảReturn
gainer()index, limitTop cổ phiếu tăng giáDataFrame
loser()index, limitTop cổ phiếu giảm giáDataFrame
value()index, limitTop cổ phiếu theo giá trị giao dịchDataFrame
volume()index, limitTop cổ phiếu theo khối lượngDataFrame
foreign_buy()date, limitTop nước ngoài mua nhiềuDataFrame
foreign_sell()date, limitTop nước ngoài bán nhiềuDataFrame
deal()index, limitTop giao dịch thỏa thuậnDataFrame

Parameters:

  • index (str, optional): Chỉ số lọc (ví dụ: 'VNINDEX', 'HNX'). Mặc đình lấy toàn thị trường.
  • limit (int, optional): Số lượng kết quả. Mặc định 10.
  • date (str, optional): Ngày giao dịch (YYYY-MM-DD).

Ví Dụ

Python
from vnstock_data import Insights

ins = Insights()

df_gainers_vn = ins.ranking.gainer(index='VNINDEX', limit=1)
print(df_gainers_vn)
symbolexchangelast_pricelast_updatedprice_change_1dprice_change_pct_1dtotal_valueavg_volume_20dvolume_spike_20d_pct
HIDHOSE4.652026-05-15 10:380.36.896557.35031e+0844665535.9562

df_losers = ins.ranking.loser() print(df_losers)

df_volume = ins.ranking.volume() print(df_volume)

Python
df_foreign_buy = ins.ranking.foreign_buy(limit=1)
print(df_foreign_buy)
symboldatenet_value
TCB2026-05-154.11252e+10
Python
df_foreign_sell = ins.ranking.foreign_sell()
print(df_foreign_sell)

df_deals = ins.ranking.deal()
print(df_deals)

2. Bộ lọc chứng khoán (Screener)

Bộ lọc cổ phiếu cho phép lọc nhanh danh sách các mã cổ phiếu bạn quan tâm với bộ tiêu chí được hỗ trợ. Người dùng có thể nạp điều kiện lọc khi gọi API bằng cách truyền filters cấu hình bộ lọc nhằm rút ngắn thời gian và độ lớn dữ liệu tải về. (Mặc định nếu chạy không có tham số API sẽ kết hợp rất nhiều tiêu chí với biên độ lớn, đôi khi trả về rất ít kết quả).

Source: VCI
Nhóm lệnh: insights.screener

Phương Thức

MethodTham SốMô TảReturn
criteria()langDanh sách giải thích tên cột và cấu hình (vi/en)DataFrame
filter()filters, limitDữ liệu screener theo bộ lọc hoặc toàn thị trườngDataFrame

Parameters:

  • filters (List[Dict], optional): Payload bộ lọc tùy chỉnh (là danh sách các tiêu chí lọc). Nếu không truyền, hệ thống sẽ gọi bộ lọc mặc định rộng nhất.
  • lang (str): Ngôn ngữ ('vi' hoặc 'en'). Mặc định 'vi'.
  • limit (int): Số lượng bản ghi tối đa. Mặc định 2000.

Bảng Tham Chiếu Cấu Trúc Bộ Lọc (Filters Payload)

Cấu trúc JSON cơ bản của filters (là một danh sách các dictionary) như sau:

JSON
[
    {
        "name": "TÊN_TIÊU_CHÍ_TỪ_HÀM_CRITERIA",
        "extraName": "TÊN_BỔ_SUNG_NẾU_CÓ",
        "conditionOptions": [
            {"type": "value", "value": "GIÁ_TRỊ_LỰA_CHỌN"}, 
            {"from": 0, "to": 10} 
        ]
    }
]

Lưu ý quan trọng: Các field_nameextraName ở bảng dưới đây dùng để cấu hình filters khi gửi request. Khi dữ liệu trả về thành DataFrame, tên cột sẽ tự động chuyển sang định dạng snake_case (ví dụ: priceEma + ema20 sẽ thành cột price_ema_20, ema20Ema50 sẽ thành cột ema_20_ema_50). Vui lòng xem Schema Reference để biết chính xác tên cột của kết quả đầu ra.

Tất cả các tiêu chí lọc được hệ thống hỗ trợ bạn có thể tìm thấy ở bảng dưới đây (được rút trích từ bộ tiêu chí đầy đủ của hàm criteria()):

Phân LoạiTiêu Chífield_nameextraName / extraName2Kiểu Filter (conditionOptions)Ví dụ
Thông tin chungSàn giao dịchexchangechọn giá trị (hsx, hnx, upcom){"type": "value", "value": "hsx"}
Nhóm ngành cấp 1sectorLv1chọn mã ngành{"type": "value", "value": "1000"}
Vốn hóa (VND)marketCapkhoảng giá trị{"from": 0, "to": 1000000000}
Thị giámarketPricekhoảng giá trị{"from": 10000, "to": 50000}
Giá & Khối lượng% Biến động giá hàng ngàydailyPriceChangePercentkhoảng giá trị{"from": -5, "to": 5}
Giá trị GD trung bìnhadtv30Dayskhoảng giá trị{"from": 1e9, "to": 5e9}
Khối lượng TBavgVolume30Dayskhoảng giá trị{"from": 100000, "to": 2000000}
Đột biến KL (vs TB)esVolumeVsAvgVolume30Dayskhoảng giá trị (%){"from": 20, "to": 100}
Tỷ suất lợi nhuậnpriceReturn3Monthkhoảng giá trị (%){"from": 5, "to": 20}
Hiệu suất vs VN-IndexoutperformsIndex3Monthkhoảng giá trị (%){"from": 0, "to": 15}
Mức biến động giápriceFluctuation30Dayskhoảng giá trị (%){"from": 0, "to": 10}
Phân tích kỹ thuậtSức mạnh giá (Stock Strength)stockStrengthkhoảng giá trị{"from": 50, "to": 100}
Sức mạnh tương đối (RS)rs3Monthkhoảng giá trị{"from": 70, "to": 100}
RSIrsikhoảng giá trị{"from": 30, "to": 70}
Giá so với EMApriceEmaema20khoảng giá trị (%){"from": -5, "to": 5}
Tương quan EMA20 & EMA50ema20Ema50khoảng giá trị (%){"from": 0, "to": 5}
Tương quan EMA50 & EMA200ema50Ema200khoảng giá trị (%){"from": 0, "to": 5}
MACDmacdkhoảng giá trị{"from": 0, "to": 5}
MACD Histogramhistogramkhoảng giá trị{"from": 0, "to": 1}
ADXadxkhoảng giá trị{"from": 25, "to": 100}
Xu hướng cổ phiếustockTrendchọn giá trị string{"type": "value", "value": "STRONG_UPTREND"}
Xu hướng AO (Awesome Osc)aoTrendchọn giá trị string{"type": "value", "value": "ABOVE_ZERO"}
Định giá & Tài chínhP/E cơ bảnttmPekhoảng giá trị{"from": 5, "to": 15}
P/B cơ bảnttmPbkhoảng giá trị{"from": 0.5, "to": 2.5}
ROEttmRoekhoảng giá trị (%){"from": 15, "to": 50}
Tăng trưởng LNST (Mẹ)npatmiGrowthYoy, Qm1 (extraName2)khoảng giá trị (%){"from": 10, "to": 100}
Tăng trưởng doanh thurevenueGrowthYoykhoảng giá trị (%){"from": 10, "to": 100}
Biên Lợi nhuận ròngnetMarginkhoảng giá trị (%){"from": 10, "to": 100}
Biên Lợi nhuận gộpgrossMarginkhoảng giá trị (%){"from": 15, "to": 100}

🤖 Mẹo: Dùng AI Để Viết Bộ Lọc

Do số lượng tiêu chí lọc tương đối nhiều, bạn nên yêu cầu AI viết cấu trúc payload JSON filters bằng cách cung cấp danh sách cột từ hàm criteria().

Prompt mẫu:

"Tôi đang dùng thư viện vnstock_data, hàm ins.screener.filter(filters=...) cho phép truyền payload JSON để lọc cổ phiếu từ máy chủ. Dưới đây là danh sách tiêu chí lấy từ hàm criteria():

[Copy/paste kết quả từ hàm ins.screener.criteria().to_csv() hoặc to_json() vào đây].

Hãy soạn cho tôi một danh sách Python (cấu trúc JSON array) để lọc các cổ phiếu thuộc sàn HSX, có ROE > 15%, P/E < 10, và khối lượng giao dịch trung bình 30 ngày > 1,000,000."

Ví Dụ

Python
from vnstock_data import Insights

ins = Insights()

custom_filters = [
    {
        "name": "exchange",
        "conditionOptions": [{"type": "value", "value": "hsx"}]
    },
    {
        "name": "ttmRoe",
        "conditionOptions": [{"from": 15, "to": 100}]
    },
    {
        "name": "ttmPe",
        "conditionOptions": [{"from": 0, "to": 10}]
    }
]

df_filtered = ins.screener.filter(filters=custom_filters)
print(f"Cổ phiếu HSX, P/E < 10, ROE > 15: {len(df_filtered)}")
print(df_filtered[['ticker', 'ttm_pe', 'ttm_roe']].head())

from vnstock_data import Listing

lst_vci = Listing(source="vci")
icb_df = lst_vci.industries_icb()

lv1_sectors = icb_df[icb_df['level'] == 1]
print("Danh sách mã ngành cấp 1:\n", lv1_sectors[['icb_code', 'icb_name']].head())

sector_code = "1000" 
sector_filter = [
    {
        "name": "sectorLv1",
        "conditionOptions": [{"type": "value", "value": sector_code}]
    }
]

df_sector = ins.screener.filter(filters=sector_filter)
print(f"\nCổ phiếu thuộc nhóm ngành {sector_code}: {len(df_sector)}")
print(df_sector[['ticker', 'exchange', 'sector_lv1']].head())

df_all = ins.screener.filter()
print(f"Total stocks: {len(df_all)}")

cheap_good = df_all[
    (df_all['pe'] < 10) & (df_all['roe'] > 15)
]
print(cheap_good[['symbol', 'pe', 'roe']].head())
symbolexchangeref_priceceilingpriceflooraccumulated_valueaccumulated_volumemarket_capprice_change_percentavg_value_30davg_value_10davg_volume_30dest_volumevolume_breakout_30dpepbroeprofit_growth_yoyrevenue_growth_yoynet_margingross_margin
ABBUPCOM152001740015200130001.65051e+091079001.57326e+1301.23616e+10-86.8034831840302733-63.60684.695710.98699521.1886260.7449.460434.548868.6208

3. Tâm lý thị trường (Sentiment)

Cung cấp các chỉ báo vĩ mô về tâm lý thị trường.

Nhóm lệnh: insights.sentiment

MethodTham SốMô TảReturn
breadth()exchangeĐộ rộng thị trường (tăng/giảm, trên MA20/MA50)DataFrame
contribution()exchangeTop cổ phiếu đóng góp vào điểm số chỉ sốDataFrame
heatmap()exchangeBản đồ nhiệt thị trườngDataFrame
Python
df_breadth = ins.sentiment.breadth(exchange='HOSE')

4. Dòng tiền (Flow)

Cung cấp phân tích dòng tiền của các thành phần tham gia thị trường.

Nhóm lệnh: insights.flow

MethodTham SốMô TảReturn
foreign()exchange, group_byDòng tiền mua/bán ròng của khối ngoạiDataFrame
proprietary()exchange, group_byDòng tiền tự doanhDataFrame
active()exchange, group_byDòng tiền chủ động (aggressor)DataFrame
Python
df_foreign = ins.flow.foreign(exchange='HOSE', group_by='stock')

5. Phân tích ngành (Sector)

Cung cấp công cụ phân tích cấp độ ngành (Yêu cầu ind_code).

Nhóm lệnh: insights.sector

MethodTham SốMô TảReturn
valuation()Chỉ số định giá của ngànhDataFrame
members()Danh sách các cổ phiếu thành phầnDataFrame
rrg()Động lượng RRG của ngànhDataFrame
flow()Dòng tiền cấp độ ngànhDataFrame
index_intraday()Giá trị chỉ số ngành intradayDataFrame
flow_intraday()Dòng tiền chủ động intraday của ngànhDataFrame
Python
df_bank_val = ins.sector('bank').valuation()

6. Phân tích cổ phiếu (Equity)

Cung cấp công cụ phân tích cấp độ cổ phiếu (Yêu cầu symbol).

Nhóm lệnh: insights.equity

MethodTham SốMô TảReturn
peer_compare()So sánh định giá với các công ty cùng ngànhDataFrame
order_flow()modePhân bổ dòng lệnh (mode: 'by_price' hoặc 'by_time')DataFrame
order_flow_history()Lịch sử giao dịch và phân bổ dòng tiềnDataFrame
rrg()Động lượng RRG của cổ phiếuDataFrame
Python
df_acb_comp = ins.equity('ACB').peer_compare()

Thảo luận

Đang tải bình luận...