Tham chiếu hàm request.*
Tham chiếu cho request.security và request.seed trong ATK PyneScript V6 — lấy mẫu lại multi-timeframe và luồng dữ liệu phụ trợ dựa trên seed.
Tổng quan request.*#
Namespace request cung cấp hai hàm để đưa dữ liệu bên ngoài hoặc được lấy mẫu lại vào frame builder. Cả hai chỉ thuộc về giai đoạn tính toán — không bao giờ trong build_trade_frame hoặc build_visuals.
request.security#
Lấy mẫu lại frame cơ sở sang timeframe cao hơn và chạy phép tính trên kết quả.
| Parameter | Điều khiển gì | Cách chọn |
|---|---|---|
frame | Tập dữ liệu cơ sở để lấy mẫu lại. | Dùng frame sạch đang được tính toán trong builder hiện tại. Không truyền trade frame đã ánh xạ một phần hoặc lát cắt giai đoạn render. |
timeframe | Mức tổng hợp đích. | Chỉ chọn timeframe thực sự thay đổi ý nghĩa script. Nếu người dùng không giải thích được tại sao ngữ cảnh HTF quan trọng, script có lẽ không cần request.security. |
expr | Phép tính HTF để chạy trên frame đã lấy mẫu lại. | Giữ nó hẹp và đơn mục đích. Một lambda nhỏ cho một HTF EMA dễ suy luận hơn một pipeline lồng sâu. |
fill_method | Cách kết quả HTF được căn chỉnh ngược về frame cơ sở. | Dùng forward-fill khi giá trị HTF đã xác nhận cuối cùng nên giữ nguyên cho đến khi bar HTF tiếp theo đến. Chỉ dùng backward-fill khi ý nghĩa ngữ nghĩa thực sự đòi hỏi. |
Sử dụng đúng giai đoạn#
import pandas as pd
from source import input, request, strategy, ta
strategy("Annotated MTF Strategy", overlay=True, process_orders_on_close=True, max_bars_back=240)
confirm_tf = input.timeframe("15m", title="Confirm TF", key="confirm_tf")
trend_length = input.int(34, title="HTF Trend EMA", key="trend_length", minval=1)
def build_signal_frame(df: pd.DataFrame, params: dict | None = None) -> pd.DataFrame:
frame = df.copy().reset_index(drop=True)
merged = {
"confirm_tf": str(confirm_tf),
"trend_length": int(trend_length),
} | dict(params or {})
# request.security belongs in the signal builder because it is part of computation.
htf_trend = request.security(
frame,
str(merged.get("confirm_tf", "15m") or "15m"),
lambda x: ta.ema(x["close"], int(merged.get("trend_length", 34) or 34)),
)
frame["htf_trend"] = htf_trend
frame["trend_ok"] = (frame["close"] >= htf_trend.fillna(frame["close"]))
return frameSai vs Đúng#
# Wrong: trade mapping should not contain computation.
def build_trade_frame(signal_df, params=None, styles=None):
signal_df = signal_df.copy()
signal_df["htf"] = request.security(signal_df, "1h", lambda x: ta.ema(x["close"], 34))
return build_mapped_trade_frame(signal_df)
# Right: compute in the signal builder, then map only.
def build_signal_frame(df, params=None):
frame = df.copy().reset_index(drop=True)
frame["htf"] = request.security(frame, "1h", lambda x: ta.ema(x["close"], 34))
frame["buy_signal"] = (frame["close"] >= frame["htf"].fillna(frame["close"]))
return frame
def build_trade_frame(signal_df, params=None, styles=None):
return build_mapped_trade_frame(signal_df)Gọi request.security bên trong build_trade_frame hoặc build_visuals biến một helper tính toán thành phụ thuộc giai đoạn ánh xạ hoặc giai đoạn render. Luôn đặt nó trong build_indicator_frame hoặc build_signal_frame.
request.seed#
Đưa dữ liệu inline có cấu trúc vào một cột frame mà không cần nguồn dữ liệu thị trường trực tiếp. Dùng khi dữ liệu phụ trợ được tính toán trong Python và cần được căn chỉnh với frame.
from source import indicator, input, request
indicator("Annotated Request Seed", overlay=False)
seed_window = input.int(4, title="Seed Window", key="seed_window", minval=2)
def build_indicator_frame(df, params=None):
frame = df.copy().reset_index(drop=True)
window = max(int((params or {}).get("seed_window", seed_window) or seed_window), 2)
seeded_source = {
"seeded_close": frame["close"].rolling(window, min_periods=1).mean().round(4).tolist(),
"seeded_bias": [
"bullish" if close_val >= open_val else "bearish"
for open_val, close_val in zip(frame["open"], frame["close"])
],
}
frame["seeded_close"] = request.seed(seeded_source, "seeded_close")
frame["seeded_bias"] = request.seed(seeded_source, "seeded_bias")
return frameXem thêm: