管理員請進,資料讀取的問題

  •   32 
  • 最後發表   麥叔  昨天
麥叔 發文於   2026/01/16

我最近一直遇到資料重複讀取,我用5分K,我延遲1秒後再去讀去Close[1],然後計算。但是我發現資料會常常重複,我前面有問過,卻沒人回答! 請看下面截圖,第一筆資料就是Close[1]

截圖圖片

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/01/16

有些時候不是沒人想回答你,而是你沒有提供足夠的訊息。像你這種情況,可能是變數控制不佳造成,你應該提供程式碼,才知道問題所在。

麥叔 發文於   2026/01/16

改了一個,隔2秒後再讀,更慘

截圖圖片

麥叔 發文於   2026/01/16

許教授,完整的程式碼在此,感謝幫忙!

麥叔 發文於   2026/01/16

截圖圖片

 

腳本設定在此

虎科大許教授 發文於   2026/01/16

你的問題出在用currentTime判斷分鐘與秒鐘。currentTime是你的電腦系統時間,它可能與實際的市場出現價格的時間不同。這造成你的系統時間已經完成5分K,但市場時間還沒,因此抓到與前一根5分K相同的數值。

value1=Minute(CurrentTime); 

value2=Second(CurrentTime);

改成

value99=getField("時間","Tick");

value1=Minute(value99); 

value2=Second(value99);

即可解決問題。

  • 按讚來自於
  • TAC214
麥叔 發文於   2026/01/16

感謝許教授~

虎科大許教授 發文於   2026/01/16

若只是單純要抓每根5分K的第一個Tick,直接用isFirstCall("Bar")判斷即可。

  • 按讚來自於
  • TAC214
麥叔 發文於   2026/01/17

請問許教授,我要每5分鐘抓Close[1],isFirstCall("Bar")可以用嗎?我怕Close[1]還沒Ready,這樣又會抓到前前根

虎科大許教授 發文於   2026/01/17

以下程式可於任何分K頻率,在分K的第一個Tick進來時,列印前一根分K收盤價。

if isFirstCall("Bar") then print(Close[1]);

麥叔 發文於   2026/01/17

謝謝許教授,我來試試看

發表回覆
Close