如標題
有看到內建 投信連買的選股
是否有辦法 設條件為 過去N日中,有M日有買進
EX:過去30日,投信買進日佔20日或以上。
Xs選股 (投信N日中買M日)
- 459
- 最後發表 里歐 2023 五月 09
我寫的腳本如下
預期是計算過去20天投信買進張數大於1的次數
//Value1 = GetField("投信買賣超");
Value1 = GetField("Sdifference");
VALUE2 = CountIf(Value1>0,20); //計算過去20天投信買進張數大於1的次數
if VALUE2 > 12 then ret =1;
但如下圖,沒抓到QQ
是因為GetField("Sdifference"); 沒有自動往前20日每日的買超資訊??
還是回傳的不是數字? 買賣超是怎麼表示的? 買超+100,賣超-100之類的嗎.....
再麻煩幫看一下....感謝
另外請教一下
1.外資寫法是以下嗎?
//Value1 = GetField("外資買賣超");
2.外資/投信,買賣超前n名,要怎麼get
小幫手這邊把您附上的警示腳本改成指標腳本掛在線圖上有顯示 --> 不太懂為何會有這種差別
如果您使用的是選股腳本的話,推測可能是資料讀取筆數不足造成的影響 --> 這是指我設的天數不夠?
例如20改成40? 不太懂為什麼會有這問題qq?
VALUE2 = CountIf(Value1>0,40); //計算過去20天投信買進張數大於1的次數
if VALUE2 > 12 then ret =1;
Hello 里歐,
您可以先閱覽 資料讀取範圍與腳本執行的關係 這篇文章。
不太懂為何會有這種差別
=> 因為日線指標預設是用所有筆數去作運算,而分鐘線則是會依據設定 (預設5天) 決定運算的筆數。
這兩者應該都會大於 countif 裡設定的20。
這是指我設的天數不夠?
=> 是的,就是您設不夠。
countif(條件, N) 在運算時是檢查過去N根Bar的條件是否有符合,而這N根Bar都需要有運算過才行。
所以資料讀取筆數必須要大於等於N,這樣才能夠在需要時取得正確的數值。
hihi
1.您可以參考 投信買賣超 的選股欄位說明。 --> 所以回傳值是張數? 那要怎麼判斷是買超還是賣超?
另外有辦法印出value1,2 的值方便debug嗎????
2.回到腳本問題,目前我改成以下
我預期功能是,過去80天,計算投信買超大於一張的次數,大於10次回傳true也就是選到該股。
但以中興電為例,肯定超過10次 但沒抓到,也沒抓到任何一支股票
才想說是不是哪裡寫錯
Value1 = GetField("Sdifference");
VALUE2 = CountIf(Value1>0,80); //計算過去20天投信買進張數大於1的次數
if VALUE2 > 10 then ret =1;

Hello 里歐,
小幫手建議您先閱覽網站上的教學區,裡面有XS語法的基礎和應用。
1.舉例來說,回傳值為3 => 買超3張。
回傳值為 -3 => 賣超3張。
您可以使用 print 或是 outputfield 函數將其輸出。
2.如同小幫手上面所說,您的 資料讀取筆數 不足。 (參考附圖)
您腳本這種寫法,countif 會去取過去80根Bar的結果。
但如果您讀取筆數只有設10筆的話,value1 只有過去10筆會是 投信買賣超 的資訊,再往前的話都是0。
或是您可以這樣寫:
value1 = countif(GetField("投信買賣超", "D") > 0, 80);
if vlaue1 > 10 then ret = 1;
這樣就不用將讀取筆數設為80筆,因為選股預設是可以拉出所有日頻率以上的資料 (引用所有日頻率以上的資料),而資料和變數(value1)不一樣,沒經過運算就可以有值。
建議您閱讀小幫手上面附上的 資料讀取範圍與腳本執行的關係 這篇文章,會比較容易理解 資料讀取筆數 和 資料引用筆數
1. 您可以使用 print 或是 outputfield 函數將其輸出--->
我寫成以下,編譯時可以看到? 目前沒看到不知道是哪個部分操作有誤qq
//Value1 = GetField("投信買賣超");
Value1 = GetField("Sdifference");
VALUE2 = CountIf(Value1>0,80); //計算過去20天投信買進張數大於1的次數
print (VALUE2);
if VALUE2 > 10 then ret =1;

2. 拍謝 資料讀取範圍與腳本執行的關係 這個部分目前還沒看懂
想說投信買超不就只能是日頻率,當日結算的結果 還有什麼bar的問題,這部份我再看下
想先請教,以下的程式,意思等於 計算過去80日,投信買超>0張的次數嗎?
value1 = countif(GetField("投信買賣超", "D") > 0, 80);
if vlaue1 > 10 then ret = 1;
想請教
1.不寫死,要如何計算過去10日中,投信買賣超加總
2.能get到 投信買超是哪幾天? 並以此為資訊去get當日收盤價
例如 過去10日,前天投信買超讓我get一個値知道 >0,我再去使用Close[2]
3.有想先寫死,但不知道如何get 前n日當日 投信買超張數
value2 = GetField[1]("投信買賣超");
11 評論