getfield 效率

  •   226 
  • 最後發表   GaryChiang  2026 四月 09
GaryChiang 發文於   2021/12/22

請問小幫手: 

若同一個值如 getfield ("close","D") 需要用到5次.

我每次都用 getfield 的方式, 和我先將其存到 value1 之後, 接下來再取 value1 來運算, 

這樣子程式的效能有差嗎?

謝謝

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/12/27

Hello GaryChiang,

 

就小幫手所知,效能上應該不會有多少差距。

平常使用的 open, high, low, close 底下都是用 GetField 作出來的。

如果您是把經過運算的數值存在變數中,那效能上就會有差別,因為可以直接取用變數儲存的運算結果而不是重新計算。

PHOT-196 發文於   2026/04/04

Xs小編您好,
請問若要同時呼叫getfield ("close","D") 10次,那是不是效能上,會建議先存在value1 ,再取用呢?還是其實效能還是沒啥差別。

虎科大許教授 發文於   2026/04/04

呼叫一次函數,然後將函數傳回的數值賦予變數,再使用10次變數運算,會比呼叫10次函數來得有效率。只是使用變數處理時,要特別小心,特別是在跨頻率操作時,很容易出現邏輯錯誤。

在盤中抓即時報價時,若沒有使用變數,前後兩次使用報價欄位或資料欄位抓的即時數據可能會有差異。這時候先用變數抓數據再做後續運算會比較可靠。

  • 按讚來自於
  • Pingzz0719
PHOT-196 發文於   2026/04/04

謝謝教授,我正是擔心跨頻情況下會誤用,所以才在思考是否要修正,
假如效能會好個10倍以上,那即使承擔跨頻的風險,我還是願意修正。

XS小編 發文於   2026/04/08

Hello PHOT-196,

 

小編補充,就小編所知,兩者效能上的差距不大,真正的差異其實是在腳本運算上。

會建議如果要優化腳本的話,可以先從演算法的部分著手。

  • 按讚來自於
  • PHOT-196
貓老大 發文於   2026/04/09

各位可以測試一下下方的程式,就可以知道 GetField 賦值給變數是如何運作的,結論如果是我,我不會存變數,因為要多跑一次assign

 

// 指標初始洗價
if IsFirstCall ("") then
{ _______________________________________________________________________________________ 指標初始洗價 _ }
 begin
  value1 = GetField ("均價");
 end; // if IsFirstCall ("") then

Plot (1, GetField ("均價"), "GetField");
Plot (2, value1, "變數");

  • 按讚來自於
  • PHOT-196
發表回覆
Close