Quay lại danh sách bài viết

Các Chỉ Báo Kỹ Thuật Phổ Biến

30 tháng 11, 2025
admin
Các Chỉ Báo Kỹ Thuật Phổ Biến
# Các Chỉ Báo Kỹ Thuật Phổ Biến Trong bài viết này, chúng ta sẽ tìm hiểu về các chỉ báo kỹ thuật phổ biến được sử dụng trong phân tích kỹ thuật. ![Các chỉ báo kỹ thuật phổ biến](/img/blog/technical_indicators.svg) ## Chỉ Báo Xu Hướng ### 1. Moving Average ```python import pandas as pd import numpy as np class MovingAverage: def __init__(self, period=20, ma_type='SMA'): self.period = period self.ma_type = ma_type def calculate(self, df): if self.ma_type == 'SMA': return df['close'].rolling(window=self.period).mean() elif self.ma_type == 'EMA': return df['close'].ewm(span=self.period, adjust=False).mean() elif self.ma_type == 'WMA': weights = np.arange(1, self.period + 1) return df['close'].rolling(window=self.period).apply( lambda x: np.sum(weights * x) / weights.sum(), raw=True ) ``` ### 2. MACD ```python class MACD: def __init__(self, fast_period=12, slow_period=26, signal_period=9): self.fast_period = fast_period self.slow_period = slow_period self.signal_period = signal_period def calculate(self, df): # Tính toán MACD exp1 = df['close'].ewm(span=self.fast_period, adjust=False).mean() exp2 = df['close'].ewm(span=self.slow_period, adjust=False).mean() macd = exp1 - exp2 signal = macd.ewm(span=self.signal_period, adjust=False).mean() histogram = macd - signal return pd.DataFrame({ 'MACD': macd, 'Signal': signal, 'Histogram': histogram }) ``` ## Chỉ Báo Động Lực ### 1. RSI ```python class RSI: def __init__(self, period=14): self.period = period def calculate(self, df): # Tính toán RSI delta = df['close'].diff() gain = (delta.where(delta > 0, 0)).rolling(window=self.period).mean() loss = (-delta.where(delta < 0, 0)).rolling(window=self.period).mean() rs = gain / loss rsi = 100 - (100 / (1 + rs)) return rsi ``` ### 2. Stochastic Oscillator ```python class StochasticOscillator: def __init__(self, k_period=14, d_period=3): self.k_period = k_period self.d_period = d_period def calculate(self, df): # Tính toán Stochastic low_min = df['low'].rolling(window=self.k_period).min() high_max = df['high'].rolling(window=self.k_period).max() k = 100 * ((df['close'] - low_min) / (high_max - low_min)) d = k.rolling(window=self.d_period).mean() return pd.DataFrame({ 'K': k, 'D': d }) ``` ## Chỉ Báo Biến Động ### 1. Bollinger Bands ```python class BollingerBands: def __init__(self, period=20, std_dev=2): self.period = period self.std_dev = std_dev def calculate(self, df): # Tính toán Bollinger Bands middle_band = df['close'].rolling(window=self.period).mean() std = df['close'].rolling(window=self.period).std() upper_band = middle_band + (std * self.std_dev) lower_band = middle_band - (std * self.std_dev) return pd.DataFrame({ 'Middle': middle_band, 'Upper': upper_band, 'Lower': lower_band }) ``` ### 2. ATR ```python class ATR: def __init__(self, period=14): self.period = period def calculate(self, df): # Tính toán ATR high_low = df['high'] - df['low'] high_close = np.abs(df['high'] - df['close'].shift()) low_close = np.abs(df['low'] - df['close'].shift()) ranges = pd.concat([high_low, high_close, low_close], axis=1) true_range = np.max(ranges, axis=1) atr = true_range.rolling(window=self.period).mean() return atr ``` ## Chỉ Báo Khối Lượng ### 1. OBV ```python class OBV: def calculate(self, df): # Tính toán OBV obv = pd.Series(0.0, index=df.index) for i in range(1, len(df)): if df['close'].iloc[i] > df['close'].iloc[i-1]: obv.iloc[i] = obv.iloc[i-1] + df['volume'].iloc[i] elif df['close'].iloc[i] < df['close'].iloc[i-1]: obv.iloc[i] = obv.iloc[i-1] - df['volume'].iloc[i] else: obv.iloc[i] = obv.iloc[i-1] return obv ``` ### 2. Money Flow Index ```python class MoneyFlowIndex: def __init__(self, period=14): self.period = period def calculate(self, df): # Tính toán Money Flow Index typical_price = (df['high'] + df['low'] + df['close']) / 3 money_flow = typical_price * df['volume'] positive_flow = pd.Series(0.0, index=df.index) negative_flow = pd.Series(0.0, index=df.index) for i in range(1, len(df)): if typical_price.iloc[i] > typical_price.iloc[i-1]: positive_flow.iloc[i] = money_flow.iloc[i] else: negative_flow.iloc[i] = money_flow.iloc[i] positive_mf = positive_flow.rolling(window=self.period).sum() negative_mf = negative_flow.rolling(window=self.period).sum() mfi = 100 - (100 / (1 + positive_mf / negative_mf)) return mfi ``` ## Best Practices 1. Kết hợp nhiều chỉ báo 2. Xác định thời gian phù hợp 3. Tránh tín hiệu nhiễu 4. Theo dõi xu hướng chính 5. Quản lý rủi ro ## Kết luận Các chỉ báo kỹ thuật là công cụ quan trọng trong phân tích thị trường. Tuy nhiên, cần sử dụng chúng một cách hợp lý và kết hợp với các phương pháp phân tích khác để đạt hiệu quả tốt nhất.
technical-analysis
trading-indicators
quantitative-trading
Chia sẻ:

Bài viết liên quan

Chiến lược giao dịch theo xu hướng

Chiến lược giao dịch theo xu hướng ![Chiến lược giao dịch theo xu hướng](/img/blog/trading_strategies.svg) Giới thiệu Giao dịch theo xu hướn...

Chiến lược giao dịch với Ichimoku Cloud trong Python

Chiến lược giao dịch với Ichimoku Cloud trong Python Ichimoku Cloud (Kumo) là một chỉ báo kỹ thuật phức tạp được phát triển bởi Goichi Hosoda vào n...

Cách đánh giá hiệu suất mô hình giao dịch định lượng

Cách đánh giá hiệu suất mô hình giao dịch định lượng Đánh giá hiệu suất là một phần quan trọng trong phát triển mô hình giao dịch định lượng. Bài v...