AgentStack
SKILL verified MIT Self-run

Market News Sentiment

skill-thanhdatngo2003-claude-market-skills-market-news-sentiment · by ThanhDatNgo2003

>

No reviews yet
0 installs
1 views
0.0% view→install

Install

$ agentstack add skill-thanhdatngo2003-claude-market-skills-market-news-sentiment

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No 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.

Are you the author of Market News Sentiment? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

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
  1. 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-white hoặc bg-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-900 chính, text-gray-600 phụ
  • 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 gia
  • references/multi_timeframe_news.md — Strategy 3 tầng thời gian
  • references/macro_calendar.md — Sự kiện & tác động
  • references/deep_research.md — Multi-source research
  • references/expert_persona.md — Expert reasoning
  • references/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ỏ null cho 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.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.