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

Namespace request.*

Truy cập dữ liệu multi-timeframe qua request.security và request.security_lower_tf — khi nào nên dùng và cách tránh độ phức tạp căn chỉnh.

Namespace request.*#

Chỉ sử dụng khi cần thiết — Chỉ dùng request.* khi script thực sự phụ thuộc vào dữ liệu timeframe cao hơn hoặc timeframe thay thế. Nó nhanh chóng thêm state và độ phức tạp căn chỉnh.

Giữ trong các builder tín hiệu hoặc indicator — Thực hiện tất cả công việc request trong build_indicator_frame hoặc build_signal_frame, không bao giờ trong build_trade_frame hay build_visuals.

request.security(frame, timeframe, expr, fill_method="ffill")#

Tái lấy mẫu frame nguồn theo timeframe được yêu cầu, đánh giá expr trên frame đã tái lấy mẫu và căn chỉnh kết quả về frame gốc.

Đối sốMô tả
frameDataFrame nguồn.
timeframeChuỗi như 15m, 1h, 1d.
exprCallable hoặc biểu thức series được đánh giá trên frame đã tái lấy mẫu.
fill_methodffill (mặc định) hoặc bfill.

request.security_lower_tf(...)#

Hiện tại chưa đầy đủ. Nó cache theo chữ ký request và dự phòng khi timeframe thấp hơn không thể được suy ra một cách có ý nghĩa từ frame gốc.

Ví dụ strategy xác nhận MTF#

# @name: pynescript_mtf_confirmation_strategy
import numpy as np
import pandas as pd

from source import strategy, input, ta, request, build_mapped_trade_frame

strategy("Pyne MTF Confirmation Strategy", overlay=True, process_orders_on_close=True, max_bars_back=180)
fast_period = input.int(10, title="Fast EMA", key="fast_period")
slow_period = input.int(24, title="Slow EMA", key="slow_period")
trend_length = input.int(34, title="HTF Trend EMA", key="trend_length")
confirm_tf = input.timeframe("15m", title="Confirm TF", key="confirm_tf")
trade_qty = input.float(1.0, title="Trade Qty", key="trade_qty")


def build_signal_frame(df: pd.DataFrame, params: dict | None = None) -> pd.DataFrame:
    frame = df.copy().reset_index(drop=True)
    p = {
        "fast_period": int(fast_period),
        "slow_period": int(slow_period),
        "trend_length": int(trend_length),
        "confirm_tf": str(confirm_tf),
    } | dict(params or {})
    ema_fast = ta.ema(frame["close"], int(p["fast_period"]))
    ema_slow = ta.ema(frame["close"], int(p["slow_period"]))
    htf_trend = request.security(
        frame,
        str(p["confirm_tf"]),
        lambda x: ta.ema(x["close"], int(p["trend_length"])),
    )
    frame["buy_signal"] = (
        ta.crossover(ema_fast, ema_slow).fillna(False)
        & (frame["close"] >= htf_trend.fillna(frame["close"]))
    )
    frame["sell_signal"] = (
        ta.crossunder(ema_fast, ema_slow).fillna(False)
        & (frame["close"] <= htf_trend.fillna(frame["close"]))
    )
    frame["entry_side"] = np.where(frame["buy_signal"], "BUY", np.where(frame["sell_signal"], "SELL", ""))
    frame["entry_price"] = frame["open"]
    frame["quantity"] = float(trade_qty)
    frame["size_pct"] = 0.0
    return frame


def build_trade_frame(signal_df: pd.DataFrame, params: dict | None = None, styles: dict | None = None) -> pd.DataFrame:
    return build_mapped_trade_frame(signal_df)

Nếu đây là script multi-timeframe đầu tiên của bạn, hãy sao chép mẫu strategy xác nhận ở trên trước khi cố gắng tự viết logic tái lấy mẫu.