8.2. Momentum Indicators (Chỉ báo động lượng)
8.2.1. RSI (Relative Strength Index)
RSI là một chỉ báo đo lường tốc độ và biên độ của biến động giá gần đây để đánh giá liệu một tài sản đang bị mua quá nhiều (overbought) hay bán quá nhiều (oversold).
RSI được tính toán dựa trên giá đóng cửa trong một khoảng thời gian nhất định (thường là 14 ngày).
Chỉ số này dao động trong khoảng từ 0 đến 100.
RSI trên 70: Là vùng quá mua, tài sản có thể đã tăng giá quá nhanh và có khả năng điều chỉnh giảm.
RSI dưới 30: Là vùng quá bán, tài sản có thể đã giảm giá quá sâu và có khả năng phục hồi.
def rsi(column: pandas.core.series.Series, window: int = 14)
Tham số
column
Cột dữ liệu (series) chứa các giá trị để tính toán RSI.
pandas.Series
window
Số lượng điểm dữ liệu sử dụng trong phép tính RSI.
int
14
Ví dụ:
fi = client.FiinIndicator()
df['rsi'] = fi.rsi(df['close'], window=14)
print(df)
8.2.2. Stochastic
Stochastic Oscillator (Chỉ báo Dao động ngẫu nhiên) là một công cụ phân tích kỹ thuật hiệu quả, giúp đánh giá động lượng và khả năng đảo chiều của giá, xác định vùng mua/bán tiềm năng trên thị trường.
Cấu tạo:
%K: Đường này so sánh giá đóng cửa hiện tại của chứng khoán với phạm vi giá cao nhất và thấp nhất trong một khoảng thời gian nhất định. Trên 80: Cho thấy chứng khoán có thể quá mua, khả năng điều chỉnh giá xuống. Dưới 20: Cho thấy chứng khoán có thể quá bán, khả năng phục hồi giá.
%D: Đường SMA của %K, giúp làm mượt mà các biến động ngắn hạn.
Cả %K và %D đều dao động trong khoảng từ 0 đến 100.
def stoch(high: pandas.core.series.Series, low: pandas.core.series.Series, close: pandas.core.series.Series, window: int = 14, smooth_window: int = 3)
def stoch_signal(high: pandas.core.series.Series, low: pandas.core.series.Series, close: pandas.core.series.Series, window: int = 14, smooth_window: int = 3)
Tham số
low
Cột dữ liệu chứa các giá trị cột giá thấp nhất để tính toán Stochastic.
pandas.Series
high
Cột dữ liệu chứa các giá trị cột giá cao nhất để tính toán Stochastic.
pandas.Series
close
Cột dữ liệu chứa các giá trị cột giá đóng cửa để tính toán Stochastic.
pandas.Series
window
Số lượng điểm dữ liệu sử dụng trong phép tính Stochastic.
int
14
smooth_window
Số lượng điểm dữ liệu sử dụng trong phép tính Stochastic Signal bằng cách lấy SMA của Stochastic.
int
3
Ví dụ:
fi = client.FiinIndicator()
df['stoch'] = fi.stoch(df['high'], df['low'], df['close'], window=14)
df['stoch_signal'] = fi.stoch_signal(df['high'], df['low'], df['close'], window=14, smooth_window=3)
print(df)
8.2.3. AO (Awesome Oscillator)
Awesome Oscillator (AO) là một chỉ báo kỹ thuật về động lượng thị trường (market momentum) được phát triển bởi nhà phân tích tài chính Bill Williams. Chỉ báo này được trình bày dưới dạng một biểu đồ histogram (biểu đồ cột) dao động xung quanh đường Zero. AO so sánh động lượng ngắn hạn (SMA5) với động lượng dài hạn (SMA34) để đánh giá sức mạnh của xu hướng hiện tại và dự đoán các khả năng đảo chiều.
def awesome_oscillator(high: pandas.Series, low: pandas.Series, window1: int = 5, window2: int = 34)
Tham số
high
Cột dữ liệu chứa các giá trị cột giá cao nhất để tính toán Awesome Oscillator.
pandas.Series
low
Cột dữ liệu chứa các giá trị cột giá thấp nhất để tính toán Awesome Oscillator.
pandas.Series
window1
Số kỳ dùng để tính trung bình ngắn hạn (thường là 5).
int
5
window2
Số kỳ dùng để tính trung bình dài hạn (thường là 34).
int
34
Ví dụ:
fi = client.FiinIndicator()
df['ao'] = fi.awesome_oscillator(df['high'], df['low'], window1=5, window2=34)
print(df)
8.2.4. PPO (The Percentage Price Oscillator)
Percentage Price Oscillator (PPO) là một chỉ báo động lượng kỹ thuật (technical momentum indicator) đo lường sự khác biệt phần trăm giữa hai đường trung bình động (Moving Averages).
Chỉ báo này rất giống với chỉ báo MACD (Moving Average Convergence Divergence), nhưng thay vì đo lường sự khác biệt tuyệt đối (giá trị tuyệt đối) giữa hai đường trung bình động, PPO biểu thị sự khác biệt đó dưới dạng phần trăm của đường trung bình động dài hạn.
def ppo(close: pandas.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9)
def ppo_hist(close: pandas.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9)
def ppo_signal(close: pandas.Series, window_slow: int = 26, window_fast: int = 12, window_sign: int = 9)
Tham số
close
Cột giá đóng cửa của tài sản dùng để tính PPO.
pandas.Series
window_slow
Số kỳ của EMA chậm (thường là 26).
int
26
window_fast
Số kỳ của EMA nhanh (thường là 12).
int
12
window_sign
Số kỳ dùng để tính đường tín hiệu (Signal line).
int
9
Ví dụ:
fi = client.FiinIndicator()
df['ppo'] = fi.ppo(df['close'], window_slow=26, window_fast=12, window_sign=9)
df['ppo_hist'] = fi.ppo_hist(df['close'], window_slow=26, window_fast=12, window_sign=9)
df['ppo_signal'] = fi.ppo_signal(df['close'], window_slow=26, window_fast=12, window_sign=9)
print(df)
8.2.5. ROC (Rate of Change)
Rate of Change (ROC), hay còn gọi là Tỷ lệ Thay đổi, là một chỉ báo động lượng (momentum oscillator) quan trọng trong phân tích kỹ thuật.
Nó đo lường tốc độ mà giá của một tài sản đang thay đổi bằng cách xác định phần trăm thay đổi của giá trong một khoảng thời gian xác định (n kỳ) so với giá hiện tại. ROC giúp nhà giao dịch đánh giá sức mạnh của xu hướng và dự đoán các khả năng đảo chiều.
def roc(close: pandas.Series, window: int = 9)
Tham số
close
Cột giá đóng cửa của tài sản dùng để tính tốc độ thay đổi.
pandas.Series
window
Số kỳ lùi về trước để so sánh thay đổi giá.
int
9
Ví dụ:
fi = client.FiinIndicator()
df['roc'] = fi.roc(df['close'], window=9)
print(df)
8.2.6. UO (Ultimate Oscillator)
Ultimate Oscillator (UO) là một chỉ báo động lượng kỹ thuật được phát triển bởi Larry Williams vào năm 1976. Thiết kế cốt lõi của nó là đo lường động lượng đồng thời trên ba khung thời gian khác nhau, giúp giảm thiểu sự biến động và số lượng tín hiệu phân kỳ sai thường thấy ở các bộ dao động chỉ dùng một chu kỳ.
Chỉ báo UO dao động trong khoảng từ 0 đến 100 và chủ yếu được sử dụng để xác định các điều kiện quá mua/quá bán cũng như tạo ra các tín hiệu đảo chiều dựa trên phân kỳ.
def ultimate_oscillator(high: pandas.Series, low: pandas.Series, close: pandas.Series, window1: int = 7, window2: int = 14, window3: int = 28, weight1: float = 4.0, weight2: float = 2.0, weight3: float = 1.0)
Tham số
high
Cột giá cao nhất trong phiên, dùng để tính biên độ dao động.
pandas.Series
low
Cột giá thấp nhất trong phiên.
pandas.Series
close
Cột giá đóng cửa của tài sản.
pandas.Series
window1
Số kỳ ngắn hạn để tính trung bình (thường là 7).
int
7
window2
Số kỳ trung hạn (thường là 14).
int
14
window3
Số kỳ dài hạn (thường là 28).
int
28
weight1
Trọng số cho chu kỳ ngắn hạn.
float
4.0
weight2
Trọng số cho chu kỳ trung hạn.
float
2.0
weight3
Trọng số cho chu kỳ dài hạn.
float
1.0
Ví dụ:
fi = client.FiinIndicator()
df['uo'] = fi.ultimate_oscillator(df["high"], df["low"], df["close"], window1=7, window2=14, window3=28, weight1=4.0, weight2=2.0, weight3=1.0)
print(df)
8.2.7. Williams %R
Williams %R (Williams Percentage Range) là một chỉ báo động lượng kỹ thuật được phát triển bởi Larry Williams. Nó là một bộ dao động có giới hạn, tương tự như Stochastic Oscillator, được sử dụng chủ yếu để xác định các điều kiện quá mua (overbought) và quá bán (oversold) trên thị trường.
Chỉ báo này đo lường vị trí giá đóng cửa hiện tại so với phạm vi giá cao nhất và thấp nhất trong một khoảng thời gian nhất định (thường là 14 kỳ).
def williams_r(high: pandas.Series, low: pandas.Series, close: pandas.Series, lbp: int = 14)
Tham số
high
Cột giá cao nhất trong phiên, dùng để tính biên độ dao động.
pandas.Series
low
Cột giá thấp nhất trong phiên.
pandas.Series
close
Cột giá đóng cửa của tài sản.
pandas.Series
lbp
Số kỳ dùng để tính biên độ giá (lookback period).
int
14
Ví dụ:
fi = client.FiinIndicator()
df['WilliamsR'] = fi.williams_r(df["high"], df["low"], df["close"], lbp=14)
print(df)
8.2.8. PMO (Price Momentum Oscillator)
PMO (Price Momentum Oscillator) là chỉ báo động lượng được phát triển bởi Carl Swenlin, dùng để đo tốc độ thay đổi giá tương tự như MACD nhưng được làm mượt hai lần (double-smoothed) nhằm giảm nhiễu và phản ánh sức mạnh xu hướng rõ ràng hơn.
PMO được xây dựng dựa trên tỷ lệ thay đổi giá (%ROC), sau đó áp dụng EMA hai lần để tính ra giá trị dao động mượt mà hơn, giúp nhà đầu tư xác định các tín hiệu mua – bán dựa trên giao cắt giữa PMO và đường tín hiệu (Signal Line).
def pmo(close: pandas.Series, smoothing: int = 35, double_smoothing: int = 20, signal: int = 10)
Tham số
close
Cột giá đóng cửa của tài sản.
pandas.Series
smoothing
Số kỳ làm mượt đầu tiên cho %ROC (EMA 1).
int
35
double_smoothing
Số kỳ làm mượt thứ hai cho PMO (EMA 2).
int
20
signal
Số kỳ dùng để tính đường tín hiệu của PMO.
int
10
Ví dụ:
fi = client.FiinIndicator()
df['pmo'] = fi.pmo(df["close"], smoothing=35, double_smoothing=20, signal=10)
print(df)
8.2.9. MOM (Momentum)
Momentum là chỉ báo đo tốc độ thay đổi giá trong một khoảng thời gian nhất định. Nó cho biết giá hiện tại cao hơn hoặc thấp hơn bao nhiêu so với giá của n phiên trước.
Chỉ báo này giúp xác định sức mạnh xu hướng và các tín hiệu đảo chiều khi động lượng tăng hoặc giảm đột ngột.
def mom(close: pandas.Series, period: int = 10, relative: bool = False)
Tham số
close
Cột giá đóng cửa của tài sản.
pandas.Series
period
Số phiên dùng để so sánh
int
10
relative
Nếu True → tính Momentum %, nếu False → tính Momentum tuyệt đối
bool
False
Ví dụ:
fi = client.FiinIndicator()
df['mom'] = fi.mom(df["close"], period=10, relative=False)
print(df)
8.2.10. (APO) Absolute Price Oscillator
Absolute Price Oscillator (APO) là một chỉ báo động lượng (momentum oscillator) trong phân tích kỹ thuật được sử dụng để đo lường sự khác biệt tuyệt đối giữa hai đường trung bình động hàm mũ (EMA) có chu kỳ khác nhau.
APO về cơ bản là giống hệt với đường MACD (Moving Average Convergence Divergence) về mặt công thức, ngoại trừ việc MACD thường đi kèm với Đường Tín hiệu (Signal Line) và Biểu đồ Histogram, còn APO thì thường chỉ tập trung vào sự khác biệt tuyệt đối giữa hai đường EMA.
def apo(price: pandas.Series, fast_period: int = 10, slow_period: int = 20)
Tham số
price
Chuỗi giá (thường là giá đóng cửa) của tài sản.
pandas.Series
fast_period
Số phiên tính EMA nhanh
int
10
slow_period
Số phiên tính EMA chậm
int
20
Ví dụ:
fi = client.FiinIndicator()
df['apo'] = fi.apo(df["close"], fast_period=10, slow_period=20)
print(df)
Last updated