Skip to main content

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

· 5 min read

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.