Xs選股 (投信N日中買M日)

  •   459 
  • 最後發表   里歐  2023 五月 09
里歐 發文於   2023/02/21

如標題

有看到內建 投信連買的選股

是否有辦法 設條件為 過去N日中,有M日有買進
EX:過去30日,投信買進日佔20日或以上。

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/02/23

 Hello 里歐,

 

您可以參考 CountIf 函數來計算期間內符合條件的次數。

再搭配 投信買張 或是 投信買賣超 當作條件即可。

里歐 發文於   2023/02/28

我寫的腳本如下
預期是計算過去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

XQ小幫手 發文於   2023/03/03

Hello 里歐,

 

小幫手這邊把您附上的警示腳本改成指標腳本掛在線圖上有顯示。(參考附圖)

如果您使用的是選股腳本的話,推測可能是資料讀取筆數不足造成的影響,建議您可以將其設為20或以上。

 

1.您可以參考 投信買賣超 的選股欄位說明。

Sdifference 和 投信買賣超 是相同的。

 

2.就小幫手所知沒有這種欄位。

 

建議您可以先在 XSHelp 上查詢函數和欄位等相關資訊。

附加文件

里歐 發文於   2023/03/19

小幫手這邊把您附上的警示腳本改成指標腳本掛在線圖上有顯示 --> 不太懂為何會有這種差別

如果您使用的是選股腳本的話,推測可能是資料讀取筆數不足造成的影響 --> 這是指我設的天數不夠?

例如20改成40?  不太懂為什麼會有這問題qq?

VALUE2 = CountIf(Value1>0,40); //計算過去20天投信買進張數大於1的次數

 

if VALUE2 > 12 then ret =1;

XQ小幫手 發文於   2023/03/21

 Hello 里歐,

 

您可以先閱覽 資料讀取範圍與腳本執行的關係 這篇文章。

 

不太懂為何會有這種差別

=> 因為日線指標預設是用所有筆數去作運算,而分鐘線則是會依據設定 (預設5天) 決定運算的筆數。

這兩者應該都會大於 countif 裡設定的20。

 

這是指我設的天數不夠?

=> 是的,就是您設不夠。

countif(條件, N) 在運算時是檢查過去N根Bar的條件是否有符合,而這N根Bar都需要有運算過才行。

所以資料讀取筆數必須要大於等於N,這樣才能夠在需要時取得正確的數值。

里歐 發文於   2023/03/25

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;

 

XQ小幫手 發文於   2023/03/28

 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)不一樣,沒經過運算就可以有值。

 

建議您閱讀小幫手上面附上的 資料讀取範圍與腳本執行的關係 這篇文章,會比較容易理解 資料讀取筆數 和 資料引用筆數

附加文件

里歐 發文於   2023/03/28

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;

XQ小幫手 發文於   2023/03/29

Hello 里歐,

 

小幫手建議您先閱覽網站上的教學區,裡面有XS語法的基礎和應用可以閱覽。

 

1.您可以參考print函數的說明,會輸出到XS編輯器執行頁面的只有指標腳本。

選股和雷達腳本會將資訊輸出到預設位置為 C:\SysJust\XQLite\XS\Print\ 裡面的檔案。

交易腳本則是預設輸出在執行紀錄中。

 

另外,腳本要有執行運算才會印出資訊。

單純編譯是不會印出資訊的。

 

2. value1 = countif(GetField("投信買賣超", "D") > 0, 80);

這行就是計算過去80日投信買賣超大於0 (也就是投信買超) 的次數沒錯。

里歐 發文於   2023/05/07

想請教
1.不寫死,要如何計算過去10日中,投信買賣超加總

2.能get到 投信買超是哪幾天? 並以此為資訊去get當日收盤價
例如 過去10日,前天投信買超讓我get一個値知道 >0,我再去使用Close[2]

3.有想先寫死,但不知道如何get 前n日當日 投信買超張數
value2 = GetField[1]("投信買賣超");

顯示更多回應 發表回覆
Close