小幫手您好,
請參閱附件程式碼,當我將程式碼中疑問程式碼部分,標記起來,可以找到符合條件的股票有1620支,可當我加入疑問程式碼部分,將歷史資料帶入array中,只剩下1250支股票,不知原因為何? 又如何解決,謝謝!
另外,我如果想取歷史資料中,每年的平均收盤價(用月或周收盤價平均),不知如何寫法? 謝謝!
好朋友 敬上
Hello 好朋友888,
選股中心的選股結果可以切換顯示的商品。
如果您切換到執行錯誤的商品就可以看到錯誤訊息。(參考附圖)
就小幫手看來錯誤訊息大多為除以零和欄位資料不存在。
您可以針對value21, value33, ArrPe和ArrYield等有用到處法的部分作調整,舉例來說:
if GetField("每股稅後淨利(元)", "Y") <> 0 then value21=GetField("收盤價", "Y")/GetField("每股稅後淨利(元)", "Y") else value21 = 0; //PE
if GetField("收盤價", "Y") <> 0 then value33=100*GetField("股利合計", "Y")/GetField("收盤價", "Y") else value33 = 0; //yield
if GetField("每股稅後淨利(元)", "Y")[i-1] <> 0 then ArrPe[i]=GetField("收盤價", "Y")[i-1]/GetField("每股稅後淨利(元)", "Y")[i-1] else ArrPe[i] = 0;
if GetField("收盤價", "Y")[i-1] <> 0 then ArrYield[i]= 100*GetField("股利合計", "Y")[i-1]/GetField("收盤價", "Y")[i-1] else ArrYield[i] = 0;
這樣大部分除以零的錯誤就可以去除掉。
您可以使用 average 函數來取得平均值,舉例來說:
average(getfield("Close", "W"), 50) 就會是過去50週平均。
average(getfield("Close", "M"), 12) 就會是過去12個月的平均。
小幫手,
謝謝!您的說明 對於平均價,我是指須指定期間,或日期 如今天是2022/1/20, 我想取
1. 2016-2020這段期間,每年的周平均價
2.或我想取2016的"年"開盤價, 年中價,及收盤價
以上這兩個例子,該如何撰寫,謝謝!
Hello 好朋友888,
1.
您可以使用 GetBarOffset 來取得開始與結束日期的相對位置,然後對這段時間的價格做平均。
舉例來說,在週頻率下:
value1 = getbarOffset(20160101);
value2 = getbaroffset(20161231);
value4 = 0;
value5 = 0;
for value3 = value2 to value1 begin
value4 += 1; //期間有幾筆 (相當於 value1 - value2 + 1)
value5 += close[value3]; //期間加總
end;
則 value5 / value4 就會是這段期間內的平均。
2.
您可以使用 GetField 來跨頻率取值,搭配 Year 來搜尋年分。
舉例來說:
value1 = 0;
while year(getfield("Date", "Y")[value1]) <> 2016 begin
value1 += 1;
if value1 = 15 then break;
end;
這樣 getfield("Close", "Y")[value1] 就會是2016年的收盤價,getfield("Open", "Y")[value1] 則是當年的開盤價。
至於年中價,您可以使用 GetBarOffset 來抓取相對應日期的資料。
須注意資料讀取筆數要設的夠長才行,至少要等同於您開始計算的日期。
且由於有使用到迴圈,可以加上條件 islastbar 讓其只在最新一根Bar運作,避免運算過久而逾時。
3 評論