補K問題

  •   131 
  • 最後發表   PHOT-196  2025 十一月 03
PHOT-196 發文於   2025/10/15

Xs小編您好

最近在測試數據,發現成交量較低的股票,用自動洗價+主頻率1分k,若成交相差數分鐘,則會有補k情形,請問該如何只print最新的那根k棒就好?

我有用以下測試(10/15的榮昌),但這三種情境下都還是會print補k的資料,詳圖補k的過程中,還是把3個print都印出來了。

print(currentTime,time,C);
if getInfo("IsRealTime")=1 then print(currentTime,time,C);
if IsLastBar then print(currentTime,time,C);

附加文件

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/10/15

若你使用1分鐘頻率,則可用Time與GetField("Time","Tick")比較,只有兩者的分鐘相同才Print。

if Minute(Time)=Minute(GetField("Time", "Tick")) then print(Time, Close);

PHOT-196 發文於   2025/10/15

謝謝教授,我有思考過這個解法,不過目前我是運算  if  GetQuote("賣出1") >  C*1.02 then print()。
這個解法會變成,if Minute(Time)=Minute(GetField("Time", "Tick")) and GetQuote("賣出1") >  C*1.02 then print();
因此就會變成C有成交才會成立(因為時間才會相等),但我希望C就算沒成交,只要符合運算式也要印出。

   

 

虎科大許教授 發文於   2025/10/15

在沒有交易的幾分鐘裡面,若想抓最佳委賣價,可用自動洗價,只判斷GetQuote("賣出1") >  C*1.02。不過要注意,這裡的C是補K之前的C。

PHOT-196 發文於   2025/10/16

謝謝教授,我的確是用自動洗價,判斷出來。
但現在的問題是,單純用GetQuote("賣出1") >  C*1.02,自動洗價若有成交時會補K,造成資訊誤判,所以才在想有沒有辦法只print最新的k棒,不要print補k的。

虎科大許教授 發文於   2025/10/17

你可試著用getInfo("IsTimerMode")判斷是否該次洗價是自動洗價。若為自動洗價,會傳回1。補K的洗價是成交Tick造成而非自動洗價造成。

  • 按讚來自於
  • PHOT-196
PHOT-196 發文於   2025/10/20

教授謝謝,不過經過我盤中實測,僅勾自動洗價,1秒洗1次,補K仍會被判定為自動洗價,導致print。

print(currentTime,time,C);

if getInfo("IsTimerMode")=1 then print(currentTime,time,C);

虎科大許教授 發文於   2025/10/20

由於你只勾選自動洗價,所以getInfo("IsTimerMode")永遠等於1,亦即每次洗價(包含補K的洗價)都會Print兩次。試著逐筆洗價與自動洗價都打勾,洗價間隔改成3秒看看。

  • 按讚來自於
  • PHOT-196
PHOT-196 發文於   2025/10/20

謝謝教授,我尚未測試,但為了效能,不能勾逐筆洗價,不知道是否仍有其他方法?

XS小編 發文於   2025/10/22

Hello PHOT-196,

 

小編補充,您指的補K應該是過180秒沒有成交發生 (勾選分鐘K棒自動完成) 或下一筆成交發生時,則補出中間無成交的K棒。

如此的話,可以使用 volume = 0 來當作條件來判斷。

另外,您也可以考慮勾選 系統參數 => 策略 => 不揭示未成交分鐘,讓系統不會補出成交量0的K棒。

附加文件

  • 按讚來自於
  • PHOT-196
  • Pingzz0719
PHOT-196 發文於   2025/10/22

謝謝小編,我在測試看看~

顯示更多回應 發表回覆
Close