Bài viết gần đây

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

Được viết bởi thanhdt vào ngày 13/11/2025 lúc 06:11 | 6 lượt xem

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.