今天(上午的時候)看400張以上大戶持股比例數據是顯示9/17的數據,但我把對應日期調出來卻是9/13
意思是在選股中心裡2021/09/13這個日期實際上放的是2021/09/17的數據,
會造成在用大戶持股比例跑回測的時候會有偷看答案的問題,
是否日期有錯置可否確認一下
今天(上午的時候)看400張以上大戶持股比例數據是顯示9/17的數據,但我把對應日期調出來卻是9/13
意思是在選股中心裡2021/09/13這個日期實際上放的是2021/09/17的數據,
會造成在用大戶持股比例跑回測的時候會有偷看答案的問題,
是否日期有錯置可否確認一下
沒人回應自己補充一下,以下是程式碼,在今天按下面程式碼去跑,本周大戶持股比例跟上周大戶持股比例跑出數值是一樣的,這不合理,另外本周大戶持股比例顯示日期是20210922、上周大戶持股比例顯示日期是20210913,由於集保的公布日期是禮拜六早上,跑回測照理來說是禮拜一會進場,這樣日期有問題所以跑回測也會出現問題
input:ratio(1.5,"增加比例"),ran(400,"大戶持股範圍");
value1 = getField("大戶持股比例","W",param:=ran);
value2 = getField("大戶持股張數","W",param:=ran);
outputField(1,value1,2,"本周大戶持股比例");
outputField(2,value1[1],2,"上周大戶持股比例");
outputField(3,value1-value1[1],2,"持股比例差");
outputField(4,getFieldDate("大戶持股比例","W"),0,"大戶持股比例日期");
outputField(5,getFieldDate("大戶持股比例","W")[1],0,"大戶持股比例日期");
outputField(6,getField("現金股利","Y"),2,"現金股利");
outputField(7,getField("月營收年增率","M"),2,"月營收年增率");
outputField(8,getField("現金股利","Y")/close,2,"殖利率");
condition1 = value1-value1[1]>ratio;
condition2 = trueAll(v>500,5);
condition3 = close > average(close,20);
ret=1;
Hello Easonliao,
在使用集保每週公布的資訊時,需要使用以下方式避開取用到未來資訊的狀況:
if getinfo("FilterMode") = 1 then sameweek = 0
else if datediff(GetFielddate("收盤價","D"),GetFielddate("收盤價","W")) < 6 then sameweek = 1 else sameweek = 0;
value1=getField("大戶持股比例","W",param:=ran)[sameweek];
value2=getField("大戶持股張數","W",param:=ran)[sameweek];
另外您 本週大戶持股比例跟上週大戶持股比例跑出數值是一樣 的問題,小幫手猜測應該是因為您使用日頻率的關係。
value1 = getField("大戶持股比例","W",param:=ran);
value1[1] 取到的是昨日的資訊, getField("大戶持股比例","W",param:=ran)[1] 取到的是上週的資訊。
如果您用週頻率的話應該就不會發生問題。
2 評論