-
TradingView 的獨特作法: 您的 Pine Script 程式碼使用了一個非常特殊的功能
request.security()
。它的運作方式可以理解為:-
第一步:在 1 分鐘的精細資料上,先計算出平滑的 ALMA 移動平均線。
-
第二步:每隔 10 分鐘,去「採樣」一次那條 1 分鐘 MA 線的數值。
-
第三步:將這個採樣到的數值,作為接下來 10 分鐘內固定不變的「階梯線」值。 這種「先計算再採樣」的邏輯,會產生非常平滑且反應滯後的階梯狀訊號線。
-
-
XS 的限制:
-
XS 的跨頻率函數
GetField
主要是用來取得原始的 K 棒資料(如 10 分鐘的開盤價、收盤價),它無法對一個在 1 分鐘週期上已經計算完成的自訂指標序列進行「採樣」。 -
我們之前所有試圖用
xfMin_GetDTValue
來手動模擬「採樣」的嘗試,都因為 XS 在處理這種複雜、非連續的序列歷史值 ([1]
) 時遇到瓶頸,最終導致腳本中斷或無法產生訊號。
-
結論就是:Pine Script 的這種特殊採樣模式,在 XS 中沒有可以直接對應且穩定運行的實現方法。
// --- 區塊 B:高週期採樣與階梯線建立 ---
vars:
_openSeries_Sampled(0),
_closeSeries_Sampled(0);
// 使用 xfMin_GetDTValue 判斷是否為 10 分鐘週期的第一根 K 棒
// 【問題點】: 這一行程式碼在我們的測試中,會導致腳本在執行時中斷
if xfMin_GetDTValue("10", date) <> xfMin_GetDTValue("10", date)[1] then begin
// 如果是,就去「採樣」前一分鐘MA線的數值
_openSeries_Sampled = _openSeries_base[1];
_closeSeries_Sampled = _closeSeries_base[1];
end else begin
// 如果不是,就維持前一分鐘的「階梯」數值不變
_openSeries_Sampled = _openSeries_Sampled[1];
_closeSeries_Sampled = _closeSeries_Sampled[1];
end;
當 XS 引擎執行到 if xfMin_GetDTValue("10", date) <> xfMin_GetDTValue("10", date)[1]
這一行時,雖然語法正確,但在我們的複雜腳本環境中,它引發了一個底層的執行錯誤,導致整個腳本的運算當場中斷。
1 評論