詢問除權息抓取當天與前天k棒數錯誤

  •   176 
  • 最後發表   33  2022 六月 22
33 發文於   2022/06/17

我想抓取2017年除權息當天與前天收盤價當天距離現在的k棒數有多少首先用了getfield抓取除息日期再用了getbaroffset(除權息日期)抓取

有個問題是我下去跑之後竟然有些資料抓的到有些抓不到舉例5281大峽谷-ky明明抓的到除權息日期是20170706但是那天k棒竟然是460

怎麼想都不太可能以下程式碼麻煩小幫手選股選看看是否如我所說,如果真有問題再麻煩小幫手幫忙通報修復謝謝

value1=getField("除息日期")[4];

if value1<>0 and value1<20171231 and value1>20170101 then begin

value2=getbaroffset(value1);

value3=c[value2];

value4=value2[1];

value5=c[value4];

value6=c[1211];

if value2> 0 then ret=1;

end;

outputField1(value1,"2017年除息日期");

outputField2(value2,"那一根k棒");

outputField3(value3,"收盤價");

outputField4(value4,"前一根k棒");

outputField5(value5,"前一天收盤價");

settotalBar(1300);

附加文件

XQ小幫手 發文於   2022/06/22

Hello 33,

 

您要抓前一根Bar 的位置,應該要是用 value2 + 1,而不是value2[1],兩者是不同的。

另外,如果您要確認日期是否正確的話,可以用 date[value2] 和 date[value2+1] 來確認。

5281 之所以會有問題,是因為 getField("除息日期")[4] 在剛開始計算的時候會因為歷史資料長度不足而取不到資料出錯。

而 getbaroffset 是需要腳本運算過該日期才能取得與該日期的差距。

要到 20200729 時,getField("除息日期")[4] 才有辦法取得資料 (有足夠的歷史資料),運算才不會出錯。

 

如果您要取得該日期的話,可以在最後一根Bar時用迴圈去抓取該日期的位置。

簡單的範例如下:

value1=getField("除息日期")[4];

 

if islastBar then begin    //取代getbaroffset 

    value2 = 0;

    while date[value2] > value1 begin

value2 += 1;

if date[value2] < 20161231 then break;

end;

    end;

發表回覆
Close