判斷某歷史價是否存在

  •   16 
  • 最後發表   無情卻慈悲  20 小時前
無情卻慈悲 發文於   2026/02/06

請問我想知道一檔股票在n個月前是否已上市,

舉例,我用 OpenM(120)  > 0 來判斷,這樣是否能判斷出來?謝謝

我主要是想判斷它存在才進行ma的計算,可是這樣寫會造成

截圖圖片

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

若你寫的是選股腳本,則可以使用GetFieldStartOffset("開盤價", "M")抓到該商品第一個月到目前總共距離有幾個月。若小於120個月,就不要計算120個月的平均。

value1=GetFieldStartOffset("開盤價", "M");

if value1>=120 then value2=average(GetField("收盤價", "M"), 120);

若你寫的是其他腳本,可以先setTotalBar(120); 然後使用GetFirstBarDate抓讀取資料的第一筆資料日期,並使用GetBarOffset傳回該日期距離距離現在有沒有超過120根K棒。

if BarFreq<>"M" then raiseRunTimeError("限用月頻率");

setTotalBar(120); 

value1=GetBarOffset(GetFirstBarDate);

if value1>=120 then value2=average(GetField("收盤價", "M"), 120);

 

 

無情卻慈悲 發文於   2026/02/06

教授非常利害,竟然提示出有「GetFirstBarDate」可以用,有了這個我就比較好寫了,謝謝教授的提示,也祝週末愉快。

無情卻慈悲 發文於   2026/02/06

來回覆一下教授指導後測試的情況,

我暫時用最簡短方式來寫,預計寫在雷達,但先用指標測試,如下:

setTotalBar(120); 

value1=GetBarOffset(GetFirstBarDate); 

if value1 > 120 then Plot36( OpenM(120),"月開盤價[120]");

以上寫成指標測試一檔2024年上市的個股(6934),在k線圖導入此指標,

會發現當程式執行到這一行setTotalBar(120)就已經在k線圖上出現資料長度不足了,所以在圖上就沒有把Plot36執行成功了,不知我以上作法是否有誤或有更佳的寫法?

更新:

後來我改成這樣,雖沒跳出長度不足,但也不知這樣寫法是否正確

 

value1=GetBarOffset(GetFirstBarDate); 

if value1 > 120 then begin 

setTotalBar(120); 

Plot36( OpenM(120),"月開盤價[120]");

end;

 

虎科大許教授 發文於   2026/02/06

(1)我用我提供的程式測試6934是正常的。

(2)setTotalBar不受流程控制,不管你把它藏在哪裡,它都會被執行。

(3)用你的程式,也沒出現錯誤。

無情卻慈悲 發文於   2026/02/06

謝謝您的回覆,我再試試。

另請教一下情境 ,若有一檔個股只上市180日,但我想在日k下跨頻求得 日ma300、週ma30、月ma20,

在日k下我引用所需最大筆數  setTotalBar(20*30),但我想判斷若筆數不足的就略過計算均線,那麼「月、週」k的筆數是不足的,那麼連「日k」也會被略過計算了,如果用我上面的寫法,寫成三個if,每個if先判斷是否有足夠歷史筆數再進行均線計算,不知同一個腳本中能否個別setTotalBar ?還是說一個腳本中只能setTotalBar一次且只能以最大引用筆數來setTotalBar呢?

謝謝。

 

虎科大許教授 發文於   2026/02/06

(1)一個腳本裡面若有多個SetTotalBar,則系統會選擇執行筆數最多的那個SetTotalBar。

(2)你可以用我前面建議的方法,計算有多少筆日資料,然後在程式裡面計算會有多少週,多少月的資料筆數,再決定要不要計算均線。

XS小編 發文於   2026/02/10

Hello 無情卻慈悲,

 

小編補充,SetTotalBar設定的是執行頻率的長度。

所以您使用在日頻率上的話,SetTotalBar(120) 會是將執行的長度設為120個工作天,因此當取用不同頻率的資料時需考慮到這點 (ex. 不會有120個月前的資料)。

無情卻慈悲 發文於   2026/02/10

好的,請問在雷達時,應用SetTotalBar或是SetbackBar?我有測試若用SetTotalBar,則雷達介面上的「資料讀取」欄位會以我寫的為主,但若用SetbackBar則雷達介面上的「資料讀取」欄位只會是可編輯狀態(預設是200),那麼若我SetbackBar(400)的話,但是「資料讀取」欄位就無法被程式控制?對嗎?

虎科大許教授 發文於   2026/02/10

屬性設定畫面的『資料讀取』是SetTotalBar的數值。若沒有使用SetTotalBar,則策略雷達預設讀取200筆。你用SetBackBar不會影響這個數值。

發表回覆
Close