請問關於獲取開盤後5分鐘內最高價,為什麼會有2個數值

  •   123 
  • 最後發表   ricky888888  2023 六月 09
ricky888888 發文於   2023/06/05

用以下代碼獲取開盤後5分鐘內最高價應該只會有一個數值,可是會跑2個數值出來,如下圖所示:

圖片

圖片內,第二次顯示的最高價才是正確的。

想請問小幫手為什麼會出現這種情況呢?謝謝

var: price_5mh(0);
var: barcount(0);
if date <> date[1] then barcount=1 else barcount+=1;
if barcount = 6 then //時間上來到了AM09:6:00
begin
 price_5mh = highest(GetField("high","1")[1],5);
end;


Print(file("C:\SysJust\XQLite\XS\Print\"),NumToStr(date,0),NumToStr(time,0),"《",SymbolName,"》","09:05前最高價new:",price_5mh);

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/06/07

 Hello ricky888888

 

您的圖片中是資料預讀筆數的運算,82.9的部分應該是前一天的運算結果,其數值有誤的原因小幫手認為應該是資料讀取筆數開始的地方導致barcount = 6 的位置不是前一日的090500。

建議您可以一併將 barcount print出來,或許會比較好理解。

 

如果還是有問題的話,麻煩提供 自動交易中心匯出檔勾選(包含)交易腳本 讓小幫手確認。

您可以直接將檔案上傳,也可以保存至雲端空間並提供連結Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

 

XQ小幫手 發文於   2023/06/09

Hello ricky888888,

 

小幫手這邊使用您的腳本加上印出barcount看起來運作都正常,都是在 barcount = 6 的時候印出。

不過看您的腳本應該是有修改過。(圖片上是 09:05前最高價,但腳本中上面程式碼的位置是 前5分鐘內最高價)。

小幫手認為可能的原因是您的print 原本可能是放在 if barcount = 6 then 之前,所以印出的會是前一次運算的數值。

 

您也可以嘗試這種寫法:

if date <> date[1] then price_5mh = high 

    else if time < 090500 and price_5mh < high then price_5mh = high;

 

if time = 090400 then price_5mh = getfield("High", "5");

這樣都可以在1分鐘頻率下抓到開盤的前5分鐘的最高值。

附加文件

發表回覆
Close