Chuyển đến nội dung chính
ATK Pine Script®

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#

FunctionMụ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#

FunctionTrả 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)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