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
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
- Kết hợp với các chỉ báo kỹ thuật
- Xác nhận tín hiệu với khối lượng
- Đặt mức cắt lỗ phù hợp
- Xem xét bối cảnh thị trường
- 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.