Bài viết gần đây
-
Quản lý CRM toàn diện: Từ lead đến học viên trung thành
Tháng 8 16, 2026
Trang chủ → Bài Viết → Đo Tâm Lý Thị Trường Bằng Python | Sentiment Analysis Tin Tức, Từ Điển Cảm Xúc (Python 365 Ngày 64)
| Đo Tâm Lý Thị Trường Bằng Python | Sentiment Analysis Tin Tức, Từ Điển Cảm Xúc (Python 365 Ngày 64)
Được viết bởi Đặng Trí Thanh vào ngày 18/08/2026 lúc 11:27 | 6 lượt xem
Đo tâm lý thị trường bằng Python là gì? Đó là cách dùng chương trình Python đọc một câu tin tức, đếm những từ mang cảm xúc tích cực/tiêu cực trong đó, rồi quy ra một con số từ -1 (rất bi quan) đến +1 (rất lạc quan). Trong bài học Python 365 Ngày 64 này, bạn sẽ xây dựng hoàn chỉnh một bộ phân tích cảm xúc (sentiment analysis) bằng tiếng Việt: xây từ điển cảm xúc, viết hàm tính điểm cho một câu, phân tích một loạt tin tức và ghi bảng kết quả ra file CSV.
Vì sao việc này quan trọng với trader? Vì giá thường di chuyển theo tâm lý đám đông — tin vui đẩy giá lên, tin xấu kéo giá xuống. Nếu bạn có thể đo được “nhiệt độ cảm xúc” của thị trường một cách có hệ thống, bạn có thêm một lớp thông tin bên cạnh phân tích kỹ thuật.
Mục lục
- Đo tâm lý thị trường là gì? Vì sao cần đo tâm lý?
- Sentiment analysis — phân tích cảm xúc hoạt động ra sao
- Từ điển cảm xúc tiếng Việt — xương sống của chương trình
- Hàm tính điểm sentiment cho một câu
- Nhãn cảm xúc — TÍCH CỰC, TIÊU CỰC, TRUNG LẬP
- Phân tích loạt tin tức và điểm trung bình
- Ghi kết quả ra file CSV
- Script hoàn chỉnh Ngày 64
- Kết quả chạy thật — bảng sentiment 6 tin
- Ứng dụng trong trading và bot tự động
- Hạn chế của từ điển cảm xúc và hướng nâng cấp
- Những điều cần lưu ý khi dùng sentiment
- FAQ
- Kết luận
1. Đo tâm lý thị trường là gì? Vì sao cần đo tâm lý?
Tâm lý thị trường (market sentiment) là thái độ chung của nhà đầu tư đối với một tài sản, một thị trường hay toàn bộ nền kinh tế tại một thời điểm. Khi phần lớn nhà đầu tư lạc quan, họ mua vào và đẩy giá lên; khi họ bi quan, họ bán tháo và giá giảm. Đo tâm lý thị trường chính là cố gắng định lượng thái độ đó thay vì đoán cảm tính.
Trong thực tế, người ta đo tâm lý bằng nhiều cách:
- Khảo sát: hỏi trực tiếp nhà đầu tư về kỳ vọng của họ.
- Chỉ số biến động: như VIX, phản ánh mức độ sợ hãi trên thị trường.
- Vị thế nhà đầu tư: tỉ lệ mua/bán, khối lượng giao dịch.
- Phân tích tin tức: đọc báo, mạng xã hội và đánh giá sắc thái cảm xúc — đây chính là việc chúng ta làm hôm nay.
Vì sao trader cần đo tâm lý? Vì giá không chỉ phản ánh giá trị mà còn phản ánh kỳ vọng và cảm xúc. Một tin tức hay có thể đẩy cổ phiếu tăng vọt dù các chỉ số cơ bản chưa đổi; một tin xấu có thể gây bán tháo dù nền tảng vững vàng. Nắm được “tâm lý đang ở đâu” giúp bạn:
- Nhận diện sớm những cú biến động lớn.
- Tránh mua đuổi khi thị trường quá lạc quan (sợ bỏ lỡ — FOMO).
- Tránh bán tháo khi thị trường quá bi quan.
- Kết hợp với phân tích kỹ thuật để đưa ra quyết định có cơ sở hơn.
Trong loạt bài Python 365 ngày tại Hướng Nghiệp Dữ Liệu, Ngày 64 đánh dấu bước chuyển quan trọng: từ việc xử lý dữ liệu số (giá, nến, chỉ báo) sang xử lý dữ liệu văn bản (tin tức, thông điệp) — một kỹ năng ngày càng có giá trị trong kỷ nguyên AI.
2. Sentiment analysis — phân tích cảm xúc hoạt động ra sao
Sentiment analysis (phân tích cảm xúc) là lĩnh vực xử lý ngôn ngữ tự nhiên (NLP) nhằm xác định xem một đoạn văn bản mang sắc thái tích cực, tiêu cực hay trung lập. Có hai cách tiếp cận chính:
Cách 1 — Học máy (Machine Learning): huấn luyện mô hình trên hàng nghìn câu đã gán nhãn để mô hình tự “học” quy luật. Chính xác nhưng cần dữ liệu lớn và thư viện nặng.
Cách 2 — Từ điển cảm xúc (Lexicon-based): chuẩn bị sẵn một danh sách từ tích cực và tiêu cực, sau đó đếm số từ trùng khớp trong câu. Đơn giản, minh bạch, chỉ cần thư viện chuẩn — đây là cách chúng ta dùng hôm nay.
Quy trình của cách từ điển cảm xúc:
- Chuẩn hóa văn bản: chuyển chữ hoa thành chữ thường, thêm khoảng trắng để tách từ chính xác.
- Đếm từ tích cực: số từ trong câu nằm trong danh sách tích cực.
- Đếm từ tiêu cực: số từ trong câu nằm trong danh sách tiêu cực.
- Tính điểm: quy về một con số chuẩn hóa trong khoảng [-1, +1].
- Gán nhãn: dựa trên ngưỡng điểm để kết luận tích cực/tiêu cực/trung lập.
Điểm hay của cách tiếp cận này là bạn hiểu rõ chuyện gì đang xảy ra bên trong — không có “hộp đen”. Nếu kết quả sai, bạn chỉ cần sửa từ điển hoặc công thức. Đây là cách tuyệt vời để bắt đầu học NLP trước khi chuyển sang mô hình học máy.
3. Từ điển cảm xúc tiếng Việt — xương sống của chương trình
Trái tim của chương trình là từ điển cảm xúc: hai tập hợp từ tiếng Việt đại diện cho cảm xúc tích cực và tiêu cực. Trong script Ngày 64, chúng ta định nghĩa:
POSITIVE = {
"tăng", "tăng mạnh", "phục hồi", "đột phá", "thắng", "lợi nhuận",
"kỷ lục", "tốt", "tuyệt vời", "mạnh", "lạc quan", "cơ hội",
"phát triển", "mua", "hồi phục", "khả quan", "đầu tư", "tích cực",
"xu hướng tăng", "bull", "bùng nổ", "nhu cầu cao",
}
NEGATIVE = {
"giảm", "sụt giảm", "thua lỗ", "khủng hoảng", "rủi ro", "xấu",
"tiêu cực", "bi quan", "phá sản", "cắt giảm", "sa thải", "bán tháo",
"lo ngại", "điều chỉnh giảm", "bear", "sụp đổ", "lỗ", "yếu",
"chậm lại", "mất giá", "vi phạm",
}
Nhận xét về từ điển:
- Từ đơn và cụm từ: bên cạnh từ đơn như “tăng”, “giảm”, ta còn có cụm như “tăng mạnh”, “xu hướng tăng”, “điều chỉnh giảm” — giúp bắt đúng sắc thái mạnh hơn.
- Từ chuyên ngành tài chính: “bull”, “bear”, “bán tháo”, “phá sản” — từ vựng đặc thù thị trường.
- Tiếng Việt có dấu: toàn bộ từ điển viết có dấu đầy đủ, khớp với văn bản tin tức tiếng Việt chuẩn.
Vì đây là danh sách mở, bạn hoàn toàn có thể mở rộng theo lĩnh vực: thêm từ ngành crypto (“fomo”, “whale”, “pump”, “dump”), ngành chứng khoán (“nới room”, “khối ngoại mua ròng”), hay ngành bất động sản. Từ điển càng phong phú, kết quả càng chính xác — đây chính là nơi bạn thể hiện kiến thức thị trường của mình.
4. Hàm tính điểm sentiment cho một câu
Hàm cốt lõi của chương trình là score_sentence, nhận một câu văn bản và trả về điểm từ -1 đến +1:
def score_sentence(text: str) -> float:
"""Điểm sentiment của 1 câu: (pos - neg) / (pos + neg), mặc 0 nếu không có từ."""
text_l = " " + text.lower() + " "
pos = sum(1 for w in POSITIVE if f" {w} " in text_l)
neg = sum(1 for w in NEGATIVE if f" {w} " in text_l)
if pos + neg == 0:
return 0.0
return round((pos - neg) / (pos + neg), 3)
Giải thích từng bước:
" " + text.lower() + " "— chuyển câu về chữ thường và bọc hai đầu bằng khoảng trắng. Việc bọc khoảng trắng đảm bảo khi tìm" tăng "ta không vô tình khớp với “tăngtrưởng” hay “tăngcường”.sum(1 for w in POSITIVE if f" {w} " in text_l)— đếm số từ/cụm tích cực xuất hiện trong câu.- Tương tự cho
neg— đếm số từ tiêu cực. - Công thức
(pos - neg) / (pos + neg)— nếu câu chỉ có từ tích cực, điểm = +1; chỉ có từ tiêu cực, điểm = -1; cân bằng thì về 0. - Nếu không có từ nào (
pos + neg == 0) — trả về 0 (trung lập), tránh lỗi chia cho 0. round(..., 3)— làm tròn 3 chữ số thập phân cho dễ đọc.
Hãy thử với câu: “Bitcoin tăng mạnh và lập kỷ lục mới”.
- Từ tích cực: “tăng mạnh”, “kỷ lục” →
pos = 2. - Từ tiêu cực: không có →
neg = 0. - Điểm = (2 – 0) / (2 + 0) = +1.0 → TÍCH CỰC.
Với câu: “Thị trường chứng khoán sụt giảm mạnh do lo ngại khủng hoảng”.
- Từ tích cực: không có →
pos = 0. - Từ tiêu cực: “sụt giảm”, “mạnh”? — chờ đã, “mạnh” nằm trong danh sách tích cực! Đây là điểm cần lưu ý: “mạnh” có thể là tích cực (“tăng mạnh”) hoặc trung tính/tiêu cực tùy ngữ cảnh. Trong câu này, “sụt giảm mạnh” khiến “mạnh” bị đếm nhầm thành tích cực → kết quả bị trừu tượng hóa một phần.
Đây chính là hạn chế kinh điển của phương pháp từ điển: nó không hiểu ngữ cảnh. Chúng ta sẽ bàn kỹ ở mục 11, và đây cũng là lý do script cho kết quả -0.5 thay vì -1.0 cho câu này. Điều này không phải lỗi — nó minh họa trung thực giới hạn của cách tiếp cận, và là cơ hội học hỏi quý giá.
5. Nhãn cảm xúc — TÍCH CỰC, TIÊU CỰC, TRUNG LẬP
Sau khi có điểm số, ta cần quy về nhãn dễ hiểu. Hàm label định nghĩa ngưỡng:
def label(s):
if s > 0.2:
return "TÍCH CỰC 😄"
if s < -0.2:
return "TIÊU CỰC 😟"
return "TRUNG LẬP 😐"
Logic rất trực quan:
- Điểm > 0.2 → TÍCH CỰC — thị trường đang lạc quan.
- Điểm < -0.2 → TIÊU CỰC — thị trường đang bi quan.
- Còn lại trong khoảng [-0.2, 0.2] → TRUNG LẬP — thông tin trung tính.
Vì sao dùng ngưỡng ±0.2 thay vì ±0? Vì trong thực tế rất ít câu hoàn toàn một chiều. Ngưỡng tạo ra một vùng “an toàn” cho những câu trung tính, tránh việc gán nhãn quá nhạy cảm. Bạn có thể tinh chỉnh ngưỡng này — nếu muốn nhạy hơn, dùng ±0.1; nếu muốn chắc chắn hơn, dùng ±0.3. Đây là một siêu tham số bạn cần “vặn” cho phù hợp thị trường của mình.
6. Phân tích loạt tin tức và điểm trung bình
Một câu chưa nói lên nhiều — thị trường cần được nhìn từ nhiều tin tức. Script định nghĩa một danh sách tin mẫu:
NEWS = [
"Bitcoin tăng mạnh và lập kỷ lục mới, giới đầu tư lạc quan.",
"Thị trường chứng khoán sụt giảm mạnh do lo ngại khủng hoảng.",
"Doanh nghiệp báo lợi nhuận kỷ lục, triển vọng phát triển tích cực.",
"Đồng coin X bán tháo sau tin tức tiêu cực và rủi ro pháp lý.",
"Nền kinh tế phục hồi nhanh, nhu cầu tiêu dùng cao.",
"Nhà đầu tư bi quan khi lợi nhuận sụt giảm và chi phí tăng.",
]
Hàm analyze_news lặp qua từng tin, tính điểm và in ra màn hình:
def analyze_news(news):
scores = []
for n in news:
s = score_sentence(n)
scores.append(s)
print(f" 📰 {n}")
print(f" → Điểm: {s:+.2f} | {label(s)}")
avg = sum(scores) / len(scores)
print(f" TỔNG KẾT: Tâm lý trung bình = {avg:+.2f} → {label(avg)}")
Điểm trung bình là con số quan trọng nhất: nó cho bạn bức tranh tổng thể của thị trường trong khoảng thời gian đó. Nếu trung bình dương và các tin đều tích cực → tâm lý chung lạc quan; nếu trung bình âm → tâm lý bi quan. Trong ví dụ của chúng ta, 6 tin gồm 3 tin tích cực, 2 tin tiêu cực và 1 tin trung lập → điểm trung bình là +0.22 (TÍCH CỰC nhẹ).
Việc lấy trung bình giúp giảm nhiễu của từng tin riêng lẻ — giống như cách một chỉ báo trung bình động làm mượt giá. Một tin gây sốc có thể làm lệch cục bộ, nhưng trung bình cả loạt cho bạn xu hướng tâm lý thực sự.
7. Ghi kết quả ra file CSV
Một chương trình hay không chỉ in ra màn hình mà còn lưu lại dữ liệu. Script ghi kết quả vào sentiment_log.csv:
with open(LOG_FILE, "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["news", "score", "label"])
for n, s in zip(news, scores):
w.writerow([n, s, label(s)])
File CSV có 3 cột: news (tin tức), score (điểm số), label (nhãn). File này mở được bằng Excel, Google Sheets hoặc đưa vào pandas để phân tích tiếp. Vì sao lưu CSV quan trọng?
- Kiểm toán: bạn biết chính xác chương trình đã “nghĩ” gì về từng tin.
- Lịch sử: gom nhiều ngày lại, bạn có chuỗi điểm sentiment theo thời gian — dữ liệu vàng cho backtest.
- Tinh chỉnh: thấy tin nào bị gán nhãn sai, bạn sửa từ điển và chạy lại.
- Tự động hóa: bot sau này có thể đọc CSV này để quyết định có mở lệnh hay không.
Việc xuất dữ liệu ra file định dạng chuẩn là thói quen của mọi hệ thống dữ liệu chuyên nghiệp — và CSV chính là “ngôn ngữ chung” đơn giản nhất.
8. Script hoàn chỉnh Ngày 64
Dưới đây là script đầy đủ của bài học — bạn có thể lưu thành Day 64_Do tam ly thi truong.py và chạy trực tiếp:
"""Day 64 - Đo tâm lý thị trường bằng Python (Sentiment Analysis)"""
import csv
import sys
from pathlib import Path
try:
sys.stdout.reconfigure(encoding="utf-8")
except Exception:
pass
BASE_DIR = Path(__file__).parent
LOG_FILE = BASE_DIR / "sentiment_log.csv"
POSITIVE = {
"tăng", "tăng mạnh", "phục hồi", "đột phá", "thắng", "lợi nhuận",
"kỷ lục", "tốt", "tuyệt vời", "mạnh", "lạc quan", "cơ hội",
"phát triển", "mua", "hồi phục", "khả quan", "đầu tư", "tích cực",
"xu hướng tăng", "bull", "bùng nổ", "nhu cầu cao",
}
NEGATIVE = {
"giảm", "sụt giảm", "thua lỗ", "khủng hoảng", "rủi ro", "xấu",
"tiêu cực", "bi quan", "phá sản", "cắt giảm", "sa thải", "bán tháo",
"lo ngại", "điều chỉnh giảm", "bear", "sụp đổ", "lỗ", "yếu",
"chậm lại", "mất giá", "vi phạm",
}
NEWS = [
"Bitcoin tăng mạnh và lập kỷ lục mới, giới đầu tư lạc quan.",
"Thị trường chứng khoán sụt giảm mạnh do lo ngại khủng hoảng.",
"Doanh nghiệp báo lợi nhuận kỷ lục, triển vọng phát triển tích cực.",
"Đồng coin X bán tháo sau tin tức tiêu cực và rủi ro pháp lý.",
"Nền kinh tế phục hồi nhanh, nhu cầu tiêu dùng cao.",
"Nhà đầu tư bi quan khi lợi nhuận sụt giảm và chi phí tăng.",
]
def score_sentence(text: str) -> float:
text_l = " " + text.lower() + " "
pos = sum(1 for w in POSITIVE if f" {w} " in text_l)
neg = sum(1 for w in NEGATIVE if f" {w} " in text_l)
if pos + neg == 0:
return 0.0
return round((pos - neg) / (pos + neg), 3)
def label(s):
if s > 0.2:
return "TÍCH CỰC 😄"
if s < -0.2:
return "TIÊU CỰC 😟"
return "TRUNG LẬP 😐"
def analyze_news(news):
print("=" * 60)
print(" ĐO TÂM LÝ THỊ TRƯỜNG | Python 365 - Ngày 64")
print("=" * 60)
scores = []
for n in news:
s = score_sentence(n)
scores.append(s)
print(f"n 📰 {n}")
print(f" → Điểm: {s:+.2f} | {label(s)}")
avg = sum(scores) / len(scores)
print("n" + "=" * 60)
print(f" TỔNG KẾT: Tâm lý trung bình = {avg:+.2f} → {label(avg)}")
print("=" * 60)
with open(LOG_FILE, "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["news", "score", "label"])
for n, s in zip(news, scores):
w.writerow([n, s, label(s)])
print(f" 📄 Log: {LOG_FILE}")
if __name__ == "__main__":
analyze_news(NEWS)
Cách chạy:
python "Day 64_Do tam ly thi truong.py"
Chương trình chỉ dùng thư viện chuẩn của Python (csv, sys, pathlib) — không cần cài thêm bất kỳ package nào. Đây là điểm mạnh: bạn có thể chạy trên bất kỳ máy nào có Python.
9. Kết quả chạy thật — bảng sentiment 6 tin
Khi chạy script, ta có bảng kết quả sau (đã ghi vào sentiment_log.csv):
| Tin tức | Điểm | Nhãn |
|---|---|---|
| Bitcoin tăng mạnh và lập kỷ lục mới, giới đầu tư lạc quan. | +1.00 | TÍCH CỰC 😄 |
| Thị trường chứng khoán sụt giảm mạnh do lo ngại khủng hoảng. | -0.50 | TIÊU CỰC 😟 |
| Doanh nghiệp báo lợi nhuận kỷ lục, triển vọng phát triển tích cực. | +1.00 | TÍCH CỰC 😄 |
| Đồng coin X bán tháo sau tin tức tiêu cực và rủi ro pháp lý. | -1.00 | TIÊU CỰC 😟 |
| Nền kinh tế phục hồi nhanh, nhu cầu tiêu dùng cao. | +1.00 | TÍCH CỰC 😄 |
| Nhà đầu tư bi quan khi lợi nhuận sụt giảm và chi phí tăng. | -0.20 | TRUNG LẬP 😐 |
| Trung bình | +0.22 | TÍCH CỰC |
Phân tích kết quả:
- Các tin rõ ràng một chiều (chỉ tích cực hoặc chỉ tiêu cực) được gán đúng và đạt điểm cực đại ±1.00.
- Tin hỗn hợp như “sụt giảm mạnh” bị trừ một phần vì từ “mạnh” (trong từ điển tích cực) xuất hiện cùng “sụt giảm” → điểm -0.50 thay vì -1.00.
- Tin trung lập “bi quan khi lợi nhuận sụt giảm” có cả từ tích cực (“lợi nhuận”) lẫn tiêu cực (“bi quan”, “sụt giảm”) → cân bằng về -0.20, gần ngưỡng trung lập.
- Tâm lý trung bình +0.22 → thị trường đang lạc quan nhẹ.
Những con số này hoàn toàn có thể giải thích được từng dòng — chính là ưu điểm của phương pháp minh bạch. Khi gặp kết quả lạ, bạn mở file CSV, nhìn lại câu gốc và sửa từ điển cho hợp lý.
10. Ứng dụng trong trading và bot tự động
Sentiment analysis không chỉ là bài tập lập trình — nó là một lớp tín hiệu thực sự mà bạn có thể kết hợp vào hệ thống giao dịch:
1. Lọc tin tức trước khi giao dịch. Bot của bạn có thể đọc tin tức trước mỗi phiên, tính điểm sentiment, và chặn lệnh khi tâm lý quá bi quan hoặc quá lạc quan (tránh vào lệnh ngược xu hướng cảm xúc).
2. Bổ sung cho tín hiệu kỹ thuật. Kết hợp với MA, RSI (đã học ở các bài trước): tín hiệu mua kỹ thuật + sentiment tích cực → xác suất cao hơn. Tín hiệu kỹ thuật nhưng sentiment cực kỳ tiêu cực → thận trọng.
3. Xây dựng chỉ số tâm lý theo thời gian. Chạy phân tích mỗi ngày, gom điểm vào CSV, vẽ biểu đồ chuỗi sentiment. Nhận diện đỉnh lạc quan / đáy bi quan — những vùng thường báo hiệu đảo chiều.
4. Đầu vào cho chiến lược định lượng. Điểm sentiment có thể trở thành một feature trong backtest: chiến lược “mua khi sentiment > 0.5” có hiệu quả hơn không? Đây chính là hướng mà khóa Quant Trading và Bot Auto Trading tại HNDL khai thác.
Điểm quan trọng: sentiment là tín hiệu bổ trợ, không phải công cụ dự đoán tuyệt đối. Kết hợp nhiều nguồn (kỹ thuật, cơ bản, tâm lý) luôn tốt hơn phụ thuộc một nguồn duy nhất.
11. Hạn chế của từ điển cảm xúc và hướng nâng cấp
Phương pháp từ điển đơn giản nhưng có những hạn chế rõ ràng — hãy hiểu chúng để dùng đúng cách:
Hạn chế 1 — Không hiểu ngữ cảnh (lớn nhất). “Giảm” thường tiêu cực, nhưng trong “giảm thuế” lại là tin tốt. “Tăng” thường tích cực, nhưng trong “tăng chi phí” lại là tin xấu. Từ điển không phân biệt được. Đây là lý do “sụt giảm mạnh” bị tính sai một phần (từ “mạnh”).
Hạn chế 2 — Không xử lý phủ định. “Không tệ” chứa từ tiêu cực “tệ” → bị gán tiêu cực, dù nghĩa thực là tích cực. Cần thêm logic đảo nghĩa khi gặp “không”, “chẳng”, “đâu có”.
Hạn chế 3 — Không hiểu ngữ pháp. “Thị trường giảm nhưng vẫn tốt hơn kỳ vọng” — từ điển chỉ đếm từ, không nắm được cấu trúc câu.
Hạn chế 4 — Vốn từ có hạn. Tin tức dùng vô số cách diễn đạt; từ điển nhỏ sẽ bỏ sót nhiều từ quan trọng.
Hướng nâng cấp:
- Thêm logic phủ định: nếu trước từ cảm xúc có “không/chẳng” thì đảo dấu.
- Dùng trọng số: “tăng mạnh” nặng hơn “tăng” — gán trọng số theo mức độ.
- Xử lý cụm từ chuyên ngành: bổ sung từ điển theo từng thị trường (crypto, chứng khoán, forex).
- Chuyển sang mô hình học máy: dùng mô hình tiếng Việt được huấn luyện sẵn (PhoBERT, VnCoreNLP) hoặc API LLM — chính xác hơn nhiều về ngữ cảnh.
- Tích hợp AI: dùng Claude Code / AI Code (đúng tinh thần loạt bài) để chấm điểm cảm xúc bằng mô hình ngôn ngữ — chủ đề các bài học nâng cao.
Hiểu giới hạn giúp bạn không lạm dụng công cụ và biết khi nào cần nâng cấp. Đây chính là tư duy của kỹ sư dữ liệu thực thụ.
12. Những điều cần lưu ý khi dùng sentiment
- Không phải lời khuyên đầu tư: sentiment chỉ là một tín hiệu tham khảo, không quyết định việc mua/bán.
- Tin tức có độ trễ: báo chí thường phản ánh sự kiện đã xảy ra; thị trường có thể đã phản ứng trước.
- Nhiễu và giả tin: không phải tin nào cũng đáng tin; sentiment từ nguồn kém chất lượng sẽ sai lệch.
- Ngưỡng cần tinh chỉnh: ngưỡng ±0.2 có thể không phù hợp mọi thị trường — hãy thử nghiệm.
- Kết hợp nhiều nguồn: đối chiếu với phân tích kỹ thuật, khối lượng giao dịch, tin cơ bản.
- Quản trị rủi ro: dù tâm lý tích cực, vẫn luôn đặt stop loss và định cỡ vị thế hợp lý.
- Không cam kết lợi nhuận: mọi công cụ phân tích chỉ tăng xác suất, không đảm bảo kết quả.
13. FAQ
Đo tâm lý thị trường bằng Python có cần cài thư viện gì không? Không. Script chỉ dùng thư viện chuẩn: csv, sys, pathlib.
Sentiment analysis là gì? Là kỹ thuật xác định sắc thái cảm xúc (tích cực/tiêu cực/trung lập) của văn bản, thuộc lĩnh vực xử lý ngôn ngữ tự nhiên (NLP).
Phương pháp từ điển cảm xúc hoạt động thế nào? Chuẩn bị sẵn danh sách từ tích cực/tiêu cực, đếm số từ trùng khớp trong câu rồi quy về điểm [-1, +1].
Điểm sentiment +1 nghĩa là gì? Câu đó chỉ chứa từ tích cực — thị trường đang rất lạc quan. -1 là rất bi quan, 0 là trung lập.
Vì sao “sụt giảm mạnh” lại ra -0.5 mà không phải -1? Vì từ “mạnh” nằm trong từ điển tích cực, xuất hiện cùng “sụt giảm” khiến điểm bị trừu tượng hóa. Đây là hạn chế của phương pháp từ điển — không hiểu ngữ cảnh.
Có thể dùng sentiment để mua bán tự động không? Có thể, nhưng nên dùng làm tín hiệu bổ trợ kết hợp với phân tích kỹ thuật và quản trị rủi ro — không nên phụ thuộc một mình sentiment.
Làm sao cải thiện độ chính xác? Mở rộng từ điển, thêm logic phủ định, gán trọng số, hoặc chuyển sang mô hình học máy/LLM.
Sentiment có áp dụng được cho crypto, chứng khoán, forex không? Được. Chỉ cần bổ sung từ điển chuyên ngành cho từng thị trường.
File CSV sinh ra để làm gì? Để kiểm toán, phân tích, gom lịch sử tâm lý và làm dữ liệu đầu vào cho backtest.
Python 365 ngày là gì? Chuỗi bài học lập trình Python mỗi ngày của Hướng Nghiệp Dữ Liệu, đi từ cơ bản đến xây dựng bot giao dịch thực chiến.
14. Kết luận
Trong Ngày 64 của loạt bài Python 365, bạn đã xây dựng một chương trình đo tâm lý thị trường bằng Python: xây từ điển cảm xúc tiếng Việt, viết hàm tính điểm sentiment từ -1 đến +1, gán nhãn TÍCH CỰC/TIÊU CỰC/TRUNG LẬP, phân tích loạt tin tức, tính điểm trung bình và ghi kết quả ra CSV.
Những kỹ năng bạn vừa rèn:
- Xử lý văn bản tiếng Việt bằng Python.
- Thiết kế từ điển cảm xúc cho một lĩnh vực cụ thể.
- Viết hàm chuẩn hóa điểm số theo công thức.
- Phân tích dữ liệu phi cấu trúc (văn bản) thành dữ liệu có cấu trúc (số).
- Ghi log và xuất CSV để kiểm toán.
- Hiểu rõ giới hạn của phương pháp và hướng nâng cấp.
Đây là bước đệm quan trọng để bạn bước vào phân tích dữ liệu phi cấu trúc — một kỹ năng ngày càng quan trọng khi AI lan tỏa vào tài chính. Từ một từ điển cảm xúc đơn giản, bạn có thể tiến xa hơn: tích hợp với bot giao dịch, dùng mô hình học máy tiếng Việt, hay gọi LLM để chấm điểm cảm xúc thông minh hơn.
Hành trình Python 365 ngày tại Hướng Nghiệp Dữ Liệu sẽ tiếp tục đồng hành cùng bạn: vẽ biểu đồ dữ liệu, quản lý rủi ro, và cuối cùng là xây dựng bot giao dịch hoàn chỉnh. Mỗi ngày một viên gạch — hôm nay bạn đã đặt thêm một viên gạch về đo lường cảm xúc thị trường, một lợi thế mà ít nhà giao dịch có được.
Đọc thêm:
- Python 365 Ngày 63 — Bot đặt lệnh demo bằng Python (Paper Trading)
- Khóa học Bot Auto Trading: https://www.huongnghiepdulieu.com/bot-auto-trading/
- Khóa học Lập trình Python cơ bản: https://www.huongnghiepdulieu.com/lap-trinh-python-co-ban/
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.