Install
$ agentstack add skill-thanhdatngo2003-claude-market-skills-market-news-sentiment ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ● Filesystem access Used
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Market News & Sentiment — Multi-Timeframe
> ⛔ CHẠY SCRIPT để có context giá/index CHÍNH XÁC > > Hành động ĐẦU TIÊN: chạy python scripts/analyze_all.py [TICKER1] [TICKER2] ... cho VN-Index và ticker liên quan. > Script dùng VPS API (realtime) + yfinance (fallback) để lấy giá CHÍNH XÁC — cần thiết để đánh giá sentiment đúng. > Nếu script fail: dùng WebFetch gọi https://bgapidatafeed.vps.com.vn/getliststockdata/[TICKER] > > WebSearch là nguồn CHÍNH cho tin tức, nhưng PHẢI có giá chính xác từ script/API trước. > Nếu bạn WebSearch giá thay vì chạy script → đánh giá "thị trường tăng/giảm" sẽ SAI.
🧠 BƯỚC 0 — ĐỌC MEMORY TRƯỚC KHI PHÂN TÍCH (Learning Loop)
Skill này có bộ nhớ dài hạn lưu tại ~/.claude/skills-data/market-analyst/. Mỗi lần phân tích đều được ghi journal. Daily Digest được thu thập tự động lúc 11:59 hằng ngày qua Windows Task Scheduler.
Quy trình BẮT BUỘC — Chạy CẢ HAI lệnh này trước khi phân tích:
# 1. Đọc daily digest — số ngày phụ thuộc vào SCOPE của câu hỏi user:
# "hôm nay / tin mới nhất" → --days 1
# "tuần này / 7 ngày qua" → --days 7
# "tháng này / tháng vừa qua" → --days 30
# "chung chung / không rõ scope" → --days 3 (default)
python scripts/read_digest.py --days [N] --summary
# 2. Đọc journal + calibration cho ticker cụ thể (nếu có)
python scripts/journal_manager.py context [TICKER] --price [GIA_HIEN_TAI]
Quy tắc dùng digest:
- Nếu digest đã có tin → KHÔNG search lại tin đó, chỉ search bổ sung những gì còn thiếu
- Nếu digest trả về "Chưa có digest" → search bình thường như thường lệ
- Digest là prior context — dùng để tránh duplicate search, tiết kiệm token
- KHÔNG giới hạn phân tích theo số ngày digest — digest là input, không phải output
- Trước phân tích — chạy:
python scripts/journal_manager.py context [TICKER] --price [GIA_HIEN_TAI]
- Trả về: track record cũ, calibration score, lessons learned, lịch sử thesis
- Nếu
bull_hit_rate/dev/null
python scripts/analyze_all.py VNINDEX
Nếu phân tích sentiment cho tài sản cụ thể, thêm ticker:
```bash
python scripts/analyze_all.py VNINDEX HPG FPT
Script sử dụng VPS API (realtime) + yfinance (fallback) để lấy:
- ✅ Giá realtime chính xác từ sàn — context nền cho sentiment analysis
- ✅ OHLC phiên — xác nhận "thị trường đang tăng/giảm" bằng DATA
- ✅ Volume — đánh giá sức mạnh xu hướng
Lưu ý giá VPS API: Trả theo đơn vị nghìn (18.1 = 18,100 VND). Script tự convert.
Sentiment analysis chính xác cần dựa trên giá chính xác — nếu giá sai thì đánh giá "thị trường đang tăng/giảm" cũng sai theo. WebSearch là nguồn CHÍNH cho tin tức, nhưng PHẢI có context giá chính xác từ script trước.
Ưu tiên 2 — Nếu script fail (ví dụ trong Claude.ai sandbox): Dùng WebFetch gọi VPS API trực tiếp:
WebFetch URL: https://bgapidatafeed.vps.com.vn/getliststockdata/VNINDEX
Prompt: "Trả về JSON: lastPrice, highPrice, lowPrice, openPrice, lot"
Gọi TỪNG MÃ MỘT. Nếu fail, THỬ LẠI 1 lần.
Ưu tiên 3 — Fallback cuối cùng: WebSearch giá từ finance.vietstock.vn hoặc cafef.vn.
Phạm vi phân tích:
- Tổng quan thị trường → quét rộng, multi-timeframe
- Tin về tài sản cụ thể → focus + context ngành
- Tác động sự kiện → Impact Matrix
- Lịch kinh tế → Calendar view + dự báo tác động
Bước 2: Thu thập tin bằng WebSearch — Multi-timeframe, tối thiểu 8-12 queries
Tại sao cần 3 tầng thời gian
Tin breaking dễ gây phản ứng thái quá nếu không đặt trong bối cảnh lớn hơn. Một phiên giảm mạnh có thể chỉ là noise trong uptrend structural. Ngược lại, một tin structural (FTSE nâng hạng) có thể quan trọng hơn nhiều phiên breaking gộp lại.
Tầng 1 — Structural (3-12 tháng), 3-4 queries:
"triển vọng chứng khoán VN 2026 dài hạn"
"FTSE nâng hạng Việt Nam tiến độ mới nhất"
"đầu tư công giải ngân 2026"
"chiến tranh thương mại tác động xuất khẩu VN"
Tầng 2 — Developing (1-4 tuần), 3-4 queries:
"khối ngoại mua bán ròng tháng gần nhất VN"
"ngành dẫn dắt thị trường VN tuần qua"
"KQKD quý gần nhất doanh nghiệp niêm yết VN"
"margin chứng khoán VN mức hiện tại"
Tầng 3 — Breaking (24-72h), 2-3 queries:
"chứng khoán VN hôm nay"
"tin tài chính mới nhất Việt Nam"
"VN-Index phiên giao dịch hôm nay"
Nguồn data
- Script/VPS API — giá realtime cho context
- WebSearch — nguồn CHÍNH cho tin tức và sentiment
Bước 3: Phân tích — Second-level thinking
Contrarian sentiment analysis
Tại sao cần contrarian: khi toàn thị trường bullish, rủi ro thường cao nhất (vì upside đã price-in). Khi toàn thị trường bearish, cơ hội thường lớn nhất (vì downside đã price-in).
Cho mỗi tin quan trọng, phân tích 2 tầng:
- Level 1: Tác động trực tiếp (Fed giữ lãi suất → bullish)
- Level 2: Tác động gián tiếp (giữ vì kinh tế yếu → earnings miss → bearish)
Đánh giá mức độ price-in: tin này thị trường đã biết bao lâu? Giá đã phản ứng chưa? Nếu đã phản ứng → tin này không còn là catalyst.
Tác động lên mid/small cap
Đừng chỉ phân tích tác động lên VN30. Tin về đầu tư công ảnh hưởng mạnh đến VLXD/thép mid-cap. Tin về FTSE nâng hạng ảnh hưởng đến nhóm có room ngoại còn. Tin về lãi suất ảnh hưởng đến BĐS small-cap đang vay nhiều.
Search thêm 2-3 queries cho mid/small cap impact:
"cổ phiếu midcap hưởng lợi [sự kiện]"
"ngành nhỏ hưởng lợi [chính sách]"
"small cap VN sector [liên quan]"
Bước 4: Tạo React Dashboard — LIGHT THEME
Quy tắc giao diện
- Nền:
bg-whitehoặcbg-gray-50 - Cards:
bg-white shadow-sm border border-gray-200 rounded-lg - Severity colors trên nền sáng:
bg-red-50 border-red-200,bg-amber-50 border-amber-200,bg-green-50 border-green-200 - Text:
text-gray-900chính,text-gray-600phụ - Không dùng:
bg-gray-900,bg-slate-800, nền tối
Cấu trúc dashboard
Header: Market Pulse
- Ngày cập nhật
- Sentiment badge: SO HAI / THAN TRONG / TRUNG LAP / LAC QUAN / THAM LAM
- Mini cards ngang: VN-Index, Vàng, BTC, USD/VND — mỗi cái hiện % thay đổi color-coded
3 Tầng Tin Tức (cấu trúc chính):
Structural Stories (3-12 tháng):
- 2-3 câu chuyện lớn đang chi phối thị trường
- Mỗi story: status badge (ACTIVE / DEVELOPING / ENDING), mức độ price-in (%)
- Tác động: liệt kê blue-chip VÀ mid/small cap bị ảnh hưởng
Developing Stories (1-4 tuần):
- 3-5 diễn biến gần đây chưa kết thúc
- Severity badge: CRITICAL / HIGH / MEDIUM
- Impact tag: Bullish / Bearish / Neutral
Breaking (24-72h):
- Tin mới nhất
- Đánh giá: noise hay signal? Tạm thời hay bền vững?
Impact Matrix:
- Rows: Tin tức / sự kiện chính
- Columns: Blue-chip | Mid-cap | Small-cap | Vàng | Crypto | Forex
- Cells: color-coded impact (tích cực/tiêu cực/trung tính)
- Expandable: click để xem giải thích chi tiết
Sự kiện sắp tới:
- Timeline cards: ngày, tên sự kiện, mức độ quan trọng
- Dự báo tác động theo 3 kịch bản (tốt/trung/xấu) nếu sự kiện quan trọng
Contrarian Corner:
- "Thị trường đang nghĩ gì?" vs "Điều gì có thể sai?"
- Liệt kê 2-3 consensus views và contrarian alternatives
Expandable:
- Phân tích macro chi tiết
- Sector impact breakdown
- Trading implications
Expert Voice
Viết như market strategist morning briefing:
- Ngắn gọn, có quan điểm rõ ràng
- "Khối ngoại bán ròng 5 phiên liên tiếp >5,000 tỷ — đây không phải noise, đây là institutional repositioning. Tác động: VN30 chịu áp lực trực tiếp, nhưng mid-cap ngoài VN30 có thể hưởng lợi từ sector rotation."
- Phân biệt noise vs signal, tạm thời vs cấu trúc
References
references/market-analyst-guide.md— Framework tư duy chuyên giareferences/multi_timeframe_news.md— Strategy 3 tầng thời gianreferences/macro_calendar.md— Sự kiện & tác độngreferences/deep_research.md— Multi-source researchreferences/expert_persona.md— Expert reasoningreferences/vn_market_guide.md— Đặc thù VN (khối ngoại, margin)references/upgrade_rules.md— Quy tắc nâng cấp v5
💾 BƯỚC CUỐI — LƯU VÀO MEMORY (BẮT BUỘC sau mỗi phiên phân tích)
Sau khi trả lời xong cho user, luôn luôn chạy lệnh này để lưu kết quả phân tích vào memory của skill:
python -c "
import sys, json
sys.stdout.reconfigure(encoding='utf-8')
sys.path.insert(0, r'C:\Users\ADMIN\.claude\skills\market-news-sentiment\scripts')
from journal_manager import write_entry, get_data_dir
from pathlib import Path
from datetime import datetime
today = datetime.now().strftime('%Y-%m-%d')
# === ĐIỀN DỮ LIỆU THỰC TỪ PHÂN TÍCH VỪA THỰC HIỆN ===
digest = {
'date': today,
'collected_at': datetime.now().isoformat(),
'source': 'interactive_session', # khác với 'daily-auto-collector'
'user_query': 'QUERY_CUA_USER', # câu hỏi user đặt ra
'vn_index_sentiment': 'SENTIMENT_VN', # ví dụ: 'SIDEWAY — 1.720đ, -0.3%'
'foreign_flow': 'FLOW', # ví dụ: 'MUA RÒNG +450 tỷ'
'global_sentiment': 'GLOBAL_SENTIMENT', # RISK-ON / RISK-OFF / NEUTRAL
'international_top5': [], # list 5 tin quốc tế quan trọng
'domestic_top5': [], # list 5 tin trong nước
'short_term_risks': [], # list rủi ro ngắn hạn
'beneficiaries': [], # list ngành/mã hưởng lợi
'top3_insights': [ # 3 nhận định quan trọng nhất
'INSIGHT_1',
'INSIGHT_2',
'INSIGHT_3',
],
'market_data': {
'vn_index': None,
'sp500_change_pct': None,
'gold_usd': None,
'oil_wti_usd': None,
'dxy': None,
'usd_vnd': None,
},
}
# ======================================================
# 1. Lưu vào journal
write_entry({
'ticker': 'MARKET_DIGEST',
'skill': 'market-news-sentiment',
'price': 0,
'digest': digest,
'auto_collected': False,
'target_date': today,
})
# 2. Lưu/merge vào digest file ngày hôm nay
digest_dir = get_data_dir() / 'digests'
digest_dir.mkdir(exist_ok=True)
digest_file = digest_dir / f'{today}.json'
# Nếu đã có digest tự động từ Task Scheduler → merge thay vì overwrite
if digest_file.exists():
with open(digest_file, 'r', encoding='utf-8') as f:
existing = json.load(f)
# Bổ sung session_analyses vào file hiện có
existing.setdefault('session_analyses', [])
existing['session_analyses'].append({
'time': digest['collected_at'],
'query': digest.get('user_query'),
'insights': digest.get('top3_insights', []),
})
with open(digest_file, 'w', encoding='utf-8') as f:
json.dump(existing, f, ensure_ascii=False, indent=2)
print(f'[OK] Merged into existing digest: {digest_file}')
else:
with open(digest_file, 'w', encoding='utf-8') as f:
json.dump(digest, f, ensure_ascii=False, indent=2)
print(f'[OK] New digest created: {digest_file}')
# 3. Lưu top3_insights vào lessons
lessons_file = get_data_dir() / 'lessons.jsonl'
for insight in digest.get('top3_insights', []):
if insight and not insight.startswith('INSIGHT_'): # bỏ qua placeholder
with open(lessons_file, 'a', encoding='utf-8') as f:
f.write(json.dumps({
'timestamp': datetime.now().isoformat(),
'date': today,
'text': insight,
'tags': ['interactive', today],
'source': 'interactive_session',
}, ensure_ascii=False) + '\n')
print(f'[OK] Memory saved for {today}')
"
Lưu ý quan trọng:
- Điền đúng dữ liệu thực từ phân tích vào các trường (không để placeholder)
- Nếu user hỏi chung chung (không có số liệu cụ thể) → điền những gì có, bỏ
nullcho những gì không có - Lệnh này chạy sau khi đã trả lời user — không ảnh hưởng đến tốc độ response
- Nếu Bash fail → báo ngắn gọn cho user biết memory chưa được lưu
Nhắc lại: Script trước, WebSearch sau
Nếu bạn chưa chạy python scripts/analyze_all.py cho VN-Index, DỪNG LẠI và chạy script ngay bây giờ.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ThanhDatNgo2003
- Source: ThanhDatNgo2003/claude-market-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.