import React, { useState, useEffect, useRef } from 'react'; import { BookOpen, Play, Eye, CheckCircle, AlertTriangle, TrendingUp, TrendingDown, Info, DollarSign, ArrowRight, RefreshCw, ChevronRight, ChevronLeft } from 'lucide-react'; // --- COMPONENTS --- // 1. Simulation Component (Mô phỏng Stop Hunt) const LiquiditySimulator = () => { const [step, setStep] = useState(0); // 0: Idle, 1: Approach, 2: Sweep/Hunt, 3: Reversal const [isAnimating, setIsAnimating] = useState(false); const runSimulation = () => { if (isAnimating) return; setIsAnimating(true); setStep(1); // Sequence of animation setTimeout(() => setStep(2), 1000); // Giá đi lên vùng Stop Hunt setTimeout(() => setStep(3), 2500); // Giá đảo chiều mạnh setTimeout(() => { setIsAnimating(false); }, 4000); }; const reset = () => { setStep(0); setIsAnimating(false); }; return (

Mô Phỏng: Stop Hunt & Liquidity

{/* CHART AREA */}
{/* Grid lines */}
{/* Labels */}
Retail Stop Loss (Buy Stops)
{/* Static Candles (Equal Highs) */}
{/* Equal Highs Line */}
EQUAL HIGHS (EQH)
{/* LIQUIDITY POOL ($$$) */}
= 2 ? 0 : 1, transform: step >= 2 ? 'scale(1.5) translateY(-10px)' : 'scale(1)' }}> {[1,2,3,4,5].map((i) => (
SL
))}
{/* ANIMATED SMART MONEY CANDLE */}
{/* The Wick */}
{/* The Body */}
{/* Annotation Text */} {step === 2 && (
⚡️ Quét Thanh Khoản!
(Kích hoạt Buy Stop/SL)
)} {step === 3 && (
📉 Đảo chiều (Reversal)
(Sau khi đã có đủ hàng)
)}
{/* Big Down Move (Final Step) */}
{/* EXPLANATION FOOTER */}
{step === 0 &&

Thị trường đang có Equal Highs (đỉnh bằng nhau). Retail Trader thường đặt Stop Loss (lệnh chờ mua) ngay phía trên vùng này.

} {step === 1 &&

Giá bắt đầu đi lên. Retail nghĩ: "Sắp Breakout rồi! Mua vào thôi!" hoặc "Giữ lệnh Sell, SL ngay trên đỉnh".

} {step === 2 &&

QUÉT THANH KHOẢN! Giá phá đỉnh giả. Ngân hàng dùng các lệnh Buy Stop (SL của Retail) để khớp lệnh SELL khổng lồ của họ.

} {step === 3 &&

GIÁ SẬP MẠNH! Sau khi lấy đủ thanh khoản, Smart Money đẩy giá đi theo hướng thực sự. Retail bị "bẫy" mua đỉnh hoặc dính SL.

}
); }; // 2. Card Component const ConceptCard = ({ title, icon: Icon, children, highlight = false }) => (

{title}

{children}
); // 3. Checklist Component const PracticeChecklist = () => { const [tasks, setTasks] = useState([ { id: 1, text: "Mở chart XAUUSD hoặc EURUSD (Khung H1/H4)", done: false }, { id: 2, text: "Khoanh tròn các đỉnh/đáy rõ ràng (Cũ)", done: false }, { id: 3, text: "Tìm Equal Highs / Equal Lows", done: false }, { id: 4, text: "Ghi chú 'SL nằm ở đây' tại các vùng đó", done: false }, { id: 5, text: "QUAN TRỌNG: Chỉ quan sát, KHÔNG vào lệnh", done: false }, ]); const toggleTask = (id) => { setTasks(tasks.map(t => t.id === id ? { ...t, done: !t.done } : t)); }; const progress = Math.round((tasks.filter(t => t.done).length / tasks.length) * 100); return (

Bài Tập Thực Hành (3 Ngày Tới)

{progress}% Hoàn thành
{tasks.map(task => (
toggleTask(task.id)} className={`flex items-center gap-4 p-3 rounded-lg cursor-pointer transition-all border ${ task.done ? 'bg-emerald-900/20 border-emerald-500/30' : 'bg-slate-800 border-slate-700 hover:border-slate-500' }`} >
{task.done && }
{task.text}
))}
{progress === 100 && (
Tuyệt vời! Bạn đã sẵn sàng để nhìn chart dưới góc nhìn Smart Money.
)}
); }; // --- MAIN APP --- export default function ICTLessonOne() { const [activeTab, setActiveTab] = useState('theory'); // theory, visualizer, practice return (
{/* HEADER */}
ICT

Bài 1: Giá Di Chuyển Vì Thanh Khoản

LESSON_01 | CORE_LOGIC
{/* CONTENT WRAPPER */}
{/* HERO SECTION */}

"Không có Thanh Khoản,
Không có Chuyển Động Lớn."

Nếu bạn chỉ nhớ 1 điều duy nhất trong ICT, hãy nhớ điều này. Giá không chạy ngẫu nhiên, giá chạy đi tìm nơi có nhiều tiền nhất.

{/* TABS NAVIGATION (Mobile Friendly) */}
{[ { id: 'theory', label: 'Lý Thuyết', icon: BookOpen }, { id: 'visualizer', label: 'Mô Phỏng', icon: Eye }, { id: 'practice', label: 'Thực Hành', icon: CheckCircle }, ].map((tab) => ( ))}
{/* TAB CONTENT: THEORY */} {activeTab === 'theory' && (
{/* 1. Definition */}

Nói theo ngôn ngữ Trader:

  • Thanh khoản = Nơi có NHIỀU LỆNH CHỜ SẴN.
  • Lệnh chờ nhiều nhất = Stop-Loss.
  • Nơi nhiều Stop-Loss nhất = Đỉnh/Đáy cũ rõ ràng.
Smart Money: "Tôi muốn mua 1 tỷ đô, tôi cần ai đó bán cho tôi 1 tỷ đô. Stop Loss của bạn chính là thứ tôi cần."

Ngân hàng muốn SELL 1.000 lot nhưng thị trường chỉ có 100 lot BUY.

❌ Không đủ thanh khoản để bán.

👉 Ngân hàng đẩy giá PHÁ ĐỈNH.

Khi đó: Trader Breakout nhảy vào BUY + Trader Sell bị dính Stop Loss (cũng là lệnh BUY).

✅ Đủ thanh khoản (Lệnh BUY) → Ngân hàng SELL hết hàng.

{/* 2. Key Locations */}

Thanh Khoản Nằm Ở Đâu? (3 Vị Trí Cố Định)

Trên Đỉnh Cũ

Buy-side Liquidity

Nơi đặt SL của phe Sell.

Dưới Đáy Cũ

Sell-side Liquidity

Nơi đặt SL của phe Buy.

Equal Highs / Lows

Hồ Thanh Khoản

Nơi SL tập trung nhiều nhất.

{/* 3. Mindset Shift */}

Đổi Tư Duy - Bước Ngoặt

Tư Duy Cũ (Retail)

"Giá sắp tăng hay giảm?"

"Mô hình này là gì?"

Tư Duy ICT (Smart Money)

"Ai đang mắc bẫy ở đây?"

"Stop-loss của họ nằm ở đâu?"

"Giá cần đi đâu để có thanh khoản?"

)} {/* TAB CONTENT: VISUALIZER */} {activeTab === 'visualizer' && (

Thị Trường Thực Tế

Hãy quan sát cách giá được "thao túng" để lấy thanh khoản trước khi di chuyển thật sự. Đây không phải là lừa đảo, đây là cơ chế vận hành.

Cạm Bẫy Retail

Thấy phá đỉnh → Nghĩ xu hướng tăng mạnh → Nhảy vào BUY (FOMO) hoặc dời SL ngay dưới đỉnh. Kết quả: Dính đỉnh.

Góc Nhìn ICT

Thấy phá đỉnh → Chờ đợi tín hiệu quét thanh khoản (Sweep) → Quan sát nến đảo chiều (Engulfing) → SELL khi Retail đang hoảng loạn.

)} {/* TAB CONTENT: PRACTICE */} {activeTab === 'practice' && (

Bài Tập Về Nhà (Bắt Buộc)

Nếu bạn chưa nhìn thấy thanh khoản trên chart thật, đừng học bài tiếp theo.

Tóm Tắt Bài 1 (Phải Thuộc Lòng)

"Giá không phá đỉnh để đi tiếp.
Giá phá đỉnh để LẤY THANH KHOẢN."
)}
{/* FOOTER */}
); }