Tin tức

Các Mô Hình Nến Phổ Biến

26/09/2026 Đặng Trí Thanh 54 lượt xem ~4 phút đọc
Mục lục bài viết
    Các Mô Hình Nến Phổ Biến

    Các Mô Hình Nến Phổ Biến

    Trong bài viết này, chúng ta sẽ tìm hiểu về các mô hình nến phổ biến được sử dụng trong phân tích kỹ thuật.

    Mô hình nến phổ biến

    Mô Hình Đơn

    1. Doji

    class DojiPattern:
        def __init__(self, body_threshold=0.1):
            self.body_threshold = body_threshold
    
        def identify(self, df):
            # Tính toán thân nến
            body = abs(df['close'] - df['open'])
            total_range = df['high'] - df['low']
    
            # Xác định Doji
            doji = (body / total_range) < self.body_threshold
    
            return doji

    2. Hammer

    class HammerPattern:
        def __init__(self, body_threshold=0.3, shadow_threshold=2.0):
            self.body_threshold = body_threshold
            self.shadow_threshold = shadow_threshold
    
        def identify(self, df):
            # Tính toán các thành phần
            body = abs(df['close'] - df['open'])
            upper_shadow = df['high'] - df[['open', 'close']].max(axis=1)
            lower_shadow = df[['open', 'close']].min(axis=1) - df['low']
            total_range = df['high'] - df['low']
    
            # Xác định Hammer
            hammer = (
                (body / total_range) < self.body_threshold &
                (lower_shadow / body) > self.shadow_threshold &
                (upper_shadow / body) < 0.1
            )
    
            return hammer

    Mô Hình Đôi

    1. Engulfing Pattern

    class EngulfingPattern:
        def identify(self, df):
            # Xác định mô hình Engulfing
            bullish_engulfing = (
                (df['close'].shift(1) < df['open'].shift(1)) &  # Nến trước là nến giảm
                (df['close'] > df['open']) &  # Nến hiện tại là nến tăng
                (df['open'] < df['close'].shift(1)) &  # Mở cửa thấp hơn đóng cửa nến trước
                (df['close'] > df['open'].shift(1))  # Đóng cửa cao hơn mở cửa nến trước
            )
    
            bearish_engulfing = (
                (df['close'].shift(1) > df['open'].shift(1)) &  # Nến trước là nến tăng
                (df['close'] < df['open']) &  # Nến hiện tại là nến giảm
                (df['open'] > df['close'].shift(1)) &  # Mở cửa cao hơn đóng cửa nến trước
                (df['close'] < df['open'].shift(1))  # Đóng cửa thấp hơn mở cửa nến trước
            )
    
            return pd.DataFrame({
                'Bullish_Engulfing': bullish_engulfing,
                'Bearish_Engulfing': bearish_engulfing
            })

    2. Harami Pattern

    class HaramiPattern:
        def identify(self, df):
            # Xác định mô hình Harami
            bullish_harami = (
                (df['close'].shift(1) < df['open'].shift(1)) &  # Nến trước là nến giảm
                (df['close'] > df['open']) &  # Nến hiện tại là nến tăng
                (df['open'] > df['close'].shift(1)) &  # Mở cửa cao hơn đóng cửa nến trước
                (df['close'] < df['open'].shift(1))  # Đóng cửa thấp hơn mở cửa nến trước
            )
    
            bearish_harami = (
                (df['close'].shift(1) > df['open'].shift(1)) &  # Nến trước là nến tăng
                (df['close'] < df['open']) &  # Nến hiện tại là nến giảm
                (df['open'] < df['close'].shift(1)) &  # Mở cửa thấp hơn đóng cửa nến trước
                (df['close'] > df['open'].shift(1))  # Đóng cửa cao hơn mở cửa nến trước
            )
    
            return pd.DataFrame({
                'Bullish_Harami': bullish_harami,
                'Bearish_Harami': bearish_harami
            })

    Mô Hình Ba

    1. Morning Star

    class MorningStarPattern:
        def identify(self, df):
            # Xác định mô hình Morning Star
            morning_star = (
                (df['close'].shift(2) < df['open'].shift(2)) &  # Nến đầu tiên là nến giảm
                (abs(df['close'].shift(1) - df['open'].shift(1)) < 
                 0.1 * (df['high'].shift(1) - df['low'].shift(1))) &  # Nến thứ hai là Doji
                (df['close'] > df['open']) &  # Nến thứ ba là nến tăng
                (df['close'] > (df['open'].shift(2) + df['close'].shift(2)) / 2)  # Đóng cửa nến thứ ba vượt qua điểm giữa nến đầu tiên
            )
    
            return morning_star

    2. Evening Star

    class EveningStarPattern:
        def identify(self, df):
            # Xác định mô hình Evening Star
            evening_star = (
                (df['close'].shift(2) > df['open'].shift(2)) &  # Nến đầu tiên là nến tăng
                (abs(df['close'].shift(1) - df['open'].shift(1)) < 
                 0.1 * (df['high'].shift(1) - df['low'].shift(1))) &  # Nến thứ hai là Doji
                (df['close'] < df['open']) &  # Nến thứ ba là nến giảm
                (df['close'] < (df['open'].shift(2) + df['close'].shift(2)) / 2)  # Đóng cửa nến thứ ba dưới điểm giữa nến đầu tiên
            )
    
            return evening_star

    Mô Hình Phức Tạp

    1. Head and Shoulders

    class HeadAndShouldersPattern:
        def __init__(self, window=20, threshold=0.02):
            self.window = window
            self.threshold = threshold
    
        def identify(self, df):
            # Tìm các đỉnh
            peaks = df['high'].rolling(window=self.window, center=True).max()
    
            # Xác định mô hình Head and Shoulders
            left_shoulder = peaks.shift(2)
            head = peaks.shift(1)
            right_shoulder = peaks
    
            # Kiểm tra điều kiện
            pattern = (
                (abs(left_shoulder - right_shoulder) / left_shoulder < self.threshold) &  # Hai vai cân đối
                (head > left_shoulder) &  # Đỉnh đầu cao hơn vai
                (head > right_shoulder)  # Đỉnh đầu cao hơn vai
            )
    
            return pattern

    2. Double Top/Bottom

    class DoubleTopBottomPattern:
        def __init__(self, window=20, threshold=0.02):
            self.window = window
            self.threshold = threshold
    
        def identify(self, df):
            # Tìm các đỉnh và đáy
            peaks = df['high'].rolling(window=self.window, center=True).max()
            troughs = df['low'].rolling(window=self.window, center=True).min()
    
            # Xác định mô hình Double Top
            double_top = (
                (abs(peaks.shift(1) - peaks) / peaks.shift(1) < self.threshold) &  # Hai đỉnh gần bằng nhau
                (df['close'] < peaks.shift(1))  # Giá đóng cửa dưới đỉnh
            )
    
            # Xác định mô hình Double Bottom
            double_bottom = (
                (abs(troughs.shift(1) - troughs) / troughs.shift(1) < self.threshold) &  # Hai đáy gần bằng nhau
                (df['close'] > troughs.shift(1))  # Giá đóng cửa trên đáy
            )
    
            return pd.DataFrame({
                'Double_Top': double_top,
                'Double_Bottom': double_bottom
            })

    Best Practices

    1. Kết hợp với các chỉ báo kỹ thuật
    2. Xác nhận tín hiệu với khối lượng
    3. Đặt mức cắt lỗ phù hợp
    4. Xem xét bối cảnh thị trường
    5. Tránh giao dịch quá nhiều mô hình

    Kết luận

    Các mô hình nến là công cụ quan trọng trong phân tích kỹ thuật. Tuy nhiên, cần kết hợp chúng với các phương pháp phân tích khác và quản lý rủi ro tốt để đạt hiệu quả trong giao dịch.

    Đặng Trí Thanh

    Đặng Trí Thanh

    Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL Hướng Nghiệp Dữ Liệu
    1.398 Bài viết
    15.4k Người theo dõi
    120k+ Lượt đọc

    Đặ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.

    Thẻ: (chưa gắn thẻ)

    Bài viết liên quan

    DNT DIGITAL

    🤖 AI CODE: Vibe Code NEEDED! 🚀 🏦 SSI • DNSE • MT5 • Bitget ⚡

    Zalo 0934145100
    Khóa đào tạo
    Hỗ trợ

    Được học lại miễn phí · Hỗ trợ trọn đời · Cập nhật miễn phí

    Đội ngũ hỗ trợ

    Đặng Trí Thanh
    Đặng Trí Thanh
    Giám đốc Công nghệ DNT Digital
    Zalo 0934145100
    Mộng Cầm
    Mộng Cầm
    Hỗ trợ khách hàng · Huấn luyện viên
    Zalo 0927909257
    Khánh Linh
    Khánh Linh
    Hỗ trợ khách hàng · Huấn luyện viên
    Zalo 0927909582