在XScript中取得前100名的弱勢股

  •   148 
  • 最後發表   阿哲DR5  2025 八月 13
阿哲DR5 發文於   2025/07/28

許老師和大家好

如標題,請問有辦法在 XScript 裡面取得每天盤中即時的跌幅前100名的弱勢股嗎?

附圖如下:

截圖圖片

謝謝大家!

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/07/28

可以用Group處理。不過,你似乎對XS了解不多,這個需求對你難度較高,建議先把基本功練好。

阿哲DR5 發文於   2025/07/28

想請問老師如何磨練XS的基本功呢?

虎科大許教授 發文於   2025/07/28

找看看是否有系統性的課程,上上課,打好基礎。

XS小編 發文於   2025/07/30

Hello 阿哲DR5,

 

小編補充,您可以參考 商品清單功能 的說明。

阿哲DR5 發文於   2025/08/04

想請問小編:

Input: myGroup(Group);

Value1 = GetSymbolField(myGroup[1], "Close", "D");
print(Value1);

我按照文章的程式碼想先印出我的自選股的標的,由於我只選2檔,照理來說 myGroup[1] 是要印出第一檔標的的收盤價對吧?

不過我卻2檔都印出來了。想請教這個陣列的使用方式是甚麼?謝謝。

虎科大許教授 發文於   2025/08/04

你的程式只會列印第一檔商品每根K棒的收盤價。

XS小編 發文於   2025/08/07

Hello 阿哲DR5,

 

小編補充,建議您在print的時候可以印出多一些資訊,例如改為 print(date, myGroup[1], value1); 這樣就可以比較容易實際比對數值看是否正確。

阿哲DR5 發文於   2025/08/11

Hello 小編和許老師,

我試著根據商品清單功能這篇文章寫了程式碼如下:

input: _S(group, "排行股票");
Array: rankRT[2000, 2](0);

value1 = GroupSize(_S);

for value2 = 1 to value1 begin
value3 = round(100 * (getsymbolField(_S[value2], "Close", default := 0) - getsymbolField(_S[value2], "開盤價", "D", default := 0))
/ getsymbolField(_S[value2], "開盤價", "D", default := 1), 2); 

rankRT[value2, 1] = strtoNum(leftStr(_S[value2], 4));
rankRT[value2, 2] = value3;

end;

Array_Sort2d(rankRT, 1, value1, 2, true);

for value2 =1 to 100 
    begin
    print(text(numtostr(rankRT[value2, 1], 0), ".TW"), rankRT[value2, 2]);
    end;

 

印出來的結果和看盤軟體完全不一樣,再請幫我看一下程式碼哪裡有問題?謝謝

虎科大許教授 發文於   2025/08/11

我測試是OK的。你需要把

for value2 =1 to 100 改成 for value2 =1 to value1

且在迴圈加入break指令。

for value2 =1 to value1 

    begin

if value2>100 then break;

print(text(numtostr(rankRT[value2, 1], 0), ".TW"), rankRT[value2, 2]);

    end;

阿哲DR5 發文於   2025/08/13

input: _S(group, "排行股票");
Array: rankRT[2000, 2](0);

value1 = GroupSize(_S);

condition1 = getField("成交量", "D")[1]>500;

if condition1 then begin
    for value2 = 1 to value1 begin
    value3 = round(100 * (getsymbolField(_S[value2], "Close", default := 0) - getsymbolField(_S[value2], "開盤價", "D", default := 0))
    / getsymbolField(_S[value2], "開盤價", "D", default := 1), 2); 


    rankRT[value2, 1] = strtoNum(leftStr(_S[value2], 4));
    rankRT[value2, 2] = value3;

    end;

    Array_Sort2d(rankRT, 1, value1, 2, true);

    for value2 = 1 to value1 
        begin
    if value2 > 100 then break;
    print(text(numtostr(rankRT[value2, 1], 0), ".TW"), rankRT[value2, 2]);
        end;
end;

老師我印出來的資料有很多個 txt 檔,裡面的資料筆數也很多,請問怎麼會這樣子?

 

 

 

 

附加文件

顯示更多回應 發表回覆
Close