Namespace ta.*
Các hàm hỗ trợ phân tích kỹ thuật — đường trung bình động, oscillator, indicator nhiều đầu ra, hàm hỗ trợ tín hiệu và cổng truyền TA-Lib.
Namespace ta.*#
Giữ trong các builder — Tất cả công việc ta.* thuộc về build_indicator_frame hoặc build_signal_frame, không bao giờ trong build_visuals hay ánh xạ trade.
Các hàm hỗ trợ cốt lõi#
| Function | Mục đích |
|---|---|
ta.sma(series, length) | Đường trung bình động đơn giản. |
ta.ema(series, length) | Đường trung bình động hàm mũ. |
ta.rsi(series, length=14) | Chỉ số sức mạnh tương đối. |
ta.atr(frame, length=14) | Biên độ thực trung bình. |
ta.williams(frame, length=14) | Williams %R. |
ta.true_range(frame) | Series biên độ thực. |
ta.psar(frame, acceleration=0.02, maximum=0.2) | Parabolic SAR. |
Các hàm hỗ trợ nhiều đầu ra#
| Function | Trả về |
|---|---|
ta.bbands(series, length=5, std=2.0, mamode="sma") | upper, basis, lower |
ta.macd(...) | macd, signal, histogram |
ta.stoch(...) | k, d |
ta.kdj(...) | k, d, j |
Các hàm hỗ trợ tín hiệu#
ta.crossover(a, b) và ta.crossunder(a, b) trả về boolean series và đã xử lý sẵn các so sánh bar dịch chuyển.
Cổng truyền TA-Lib#
ta cũng là một wrapper TA-Lib động. Nếu runtime có thể phân giải tên hoặc bí danh function TA-Lib, ta.some_function(...) có thể tự động điều phối sang TA-Lib.
Ví dụ Bollinger Bands#
import pandas as pd
from source import indicator, input, linefill, plot, ta
indicator("Pyne BBands Fill", overlay=True, max_bars_back=240)
length = input.int(20, title="Length", key="length")
multiplier = input.float(2.0, title="StdDev Mult", key="multiplier")
mamode = input.string("sma", title="MA Mode", key="mamode")
source_type = input.string("close", title="Source", key="source_type")
plot("lb", key="bb_lower", title="Lower", color="#ff0000", width=1)
plot("cb", key="bb_basis", title="Basis", color="#ffa500", width=1)
plot("ub", key="bb_upper", title="Upper", color="#00aa00", width=1)
linefill.new("bb_lower", "bb_upper", key="bb_band_fill", color="rgba(63,57,100,0.44)")
def build_indicator_frame(df: pd.DataFrame, params: dict | None = None) -> pd.DataFrame:
frame = df.copy().reset_index(drop=True)
merged = {
"length": int(length),
"multiplier": float(multiplier),
"mamode": str(mamode),
"source_type": str(source_type),
} | dict(params or {})
source_series = (
pd.to_numeric(frame[str(merged.get("source_type", "close"))], errors="coerce")
if str(merged.get("source_type", "close")) in frame.columns
else pd.to_numeric(frame["close"], errors="coerce")
)
upper, basis, lower = ta.bbands(
source_series,
length=max(int(merged.get("length", 20) or 20), 2),
std=float(merged.get("multiplier", 2.0) or 2.0),
mamode=str(merged.get("mamode", "sma") or "sma").lower(),
)
frame["lb"] = lower.reset_index(drop=True)
frame["cb"] = basis.reset_index(drop=True)
frame["ub"] = upper.reset_index(drop=True)
return frame