如何在這段程式碼加進去"細指標族群中至少有多少個股漲幅超過x%"

  •   37 
  • 最後發表   師哥  2025 十月 21
師哥 發文於   2025/10/21

如題,我想表達出當類股指數大於一定的%數時,同時這類股中的個股漲了多少,但是我想加進去這個類股中至少有多少個股漲幅大於x%,但是不知道該怎麼表達出來。
先謝過各位大大了



Setbarmode(1);

 

settotalBar(120);

input:N(10,numericSimple,"RS計算天數");

input:period(0,numericSimple,"今天還是昨天");

input:rate_of_change(5,numericsimple,"細指標漲幅%");

input:threshold(5,numericsimple,"個股漲幅%");

 

Array: ValueArray[200](0), ratioArray[200](0), upArray[200](0), dnArray[200](0);

var: si(0);

var:x(0);

// === Symbol 判斷與 si 指派(Excel產業邏輯,從 si=1 開始) ===

 

if symbol = "2451.TW" or symbol = "3260.TW" or symbol = "4967.TW" or symbol = "4973.TW" or symbol = "5289.TW" or symbol = "8088.TW" or symbol = "8271.TW" or symbol = "8277.TW" or symbol = "8299.TW" then si = 1 // 記憶體模組

else if symbol = "1599.TW" or symbol = "2206.TW" or symbol = "5276.TW" or symbol = "5288.TW" or symbol = "8937.TW" then si = 2 // 機車相關

else if symbol = "3038.TW" or symbol = "3168.TW" or symbol = "4995.TW" or symbol = "5315.TW" or symbol = "6120.TW" or symbol = "6167.TW" or symbol = "6916.TW" or symbol = "8049.TW" or symbol = "8105.TW" then si = 3 // LCM

else if symbol = "5205.TW" or symbol = "6581.TW" or symbol = "6803.TW" or symbol = "6887.TW" or symbol = "6894.TW" or symbol = "6923.TW" or symbol = "8341.TW" or symbol = "8390.TW" or symbol = "8422.TW" or symbol = "8438.TW" or symbol = "8440.TW" or symbol = "9955.TW" then si = 4 // 回收、焚化

else if symbol = "3002.TW" or symbol = "3064.TW" or symbol = "3083.TW" or symbol = "3086.TW" or symbol = "3293.TW" or symbol = "3546.TW" or symbol = "4916.TW" or symbol = "4946.TW" or symbol = "4994.TW" or symbol = "5263.TW" or symbol = "5478.TW" or symbol = "6111.TW" or symbol = "6169.TW" or symbol = "6180.TW" or symbol = "6441.TW" or symbol = "6482.TW" or symbol = "6542.TW" or symbol = "7584.TW" then si = 5 // 遊戲相關

else if symbol = "8411.TW" or symbol = "8488.TW" or symbol = "9905.TW" or symbol = "9907.TW" or symbol = "9939.TW" then si = 6 // 製藥(瓶)

else if symbol = "2630.TW" or symbol = "2634.TW" or symbol = "2645.TW" or symbol = "3004.TW" or symbol = "4541.TW" or symbol = "4572.TW" or symbol = "4916.TW" or symbol = "6829.TW" or symbol = "8222.TW" then si = 7 // 飛機零組件

else if symbol = "1516.TW" or symbol = "2347.TW" or symbol = "2359.TW" or symbol = "2459.TW" or symbol = "3010.TW" or symbol = "3114.TW" or symbol = "3224.TW" or symbol = "3444.TW" or symbol = "3597.TW" or symbol = "5434.TW" or symbol = "5452.TW" or symbol = "6114.TW" or symbol = "6136.TW" or symbol = "6170.TW" or symbol = "6259.TW" or symbol = "6761.TW" or symbol = "6967.TW" or symbol = "8070.TW" or symbol = "8084.TW" or symbol = "8455.TW" then si = 8 // 其他電子通路

else if symbol = "1708.TW" or symbol = "1722.TW" or symbol = "4148.TW" then si = 9 // 肥料

else if symbol = "1294.TW" or symbol = "1707.TW" or symbol = "1720.TW" or symbol = "1734.TW" or symbol = "1796.TW" or symbol = "3054.TW" or symbol = "3164.TW" or symbol = "3205.TW" or symbol = "3555.TW" or symbol = "3705.TW" or symbol = "4108.TW" or symbol = "4109.TW" or symbol = "4120.TW" or symbol = "4123.TW" or symbol = "4127.TW" or symbol = "4128.TW" or symbol = "4192.TW" or symbol = "6236.TW" or symbol = "6242.TW" or symbol = "6846.TW" or symbol = "6919.TW" or symbol = "8279.TW" or symbol = "8436.TW" then si = 10; // 保健品

if si = 0 then return;

ValueArray[1] = GetSymbolField("I023290.TW", "收盤價", "D"); // 記憶體模組

ValueArray[2] = GetSymbolField("I022011.TW", "收盤價", "D"); // 機車相關

ValueArray[3] = GetSymbolField("I023090.TW", "收盤價", "D"); // LCM

ValueArray[4] = GetSymbolField("I099022.TW", "收盤價", "D"); // 回收、焚化

ValueArray[5] = GetSymbolField("I023420.TW", "收盤價", "D"); // 遊戲相關

ValueArray[6] = GetSymbolField("I099060.TW", "收盤價", "D"); // 製藥(瓶)

ValueArray[7] = GetSymbolField("I015043.TW", "收盤價", "D"); // 飛機零組件

ValueArray[8] = GetSymbolField("I023630.TW", "收盤價", "D"); // 其他電子通路

ValueArray[9] = GetSymbolField("I017012.TW", "收盤價", "D"); // 肥料

 

ValueArray[10] = GetSymbolField("I017060.TW", "收盤價", "D"); // 保健品

// 取得台灣加權指數收盤價(日頻率)漲跌幅

value1 = RateOfChange(GetSymbolField("TSE.TW", "收盤價", "D"),N);

Value87 = RateOfChange((ValueArray[si]),N);

Value88 = RateOfChange(GetField("收盤價"),N);

 

if Value87[period] > rate_of_change 

and value88[period]>threshold

and value87[period]>Value1[period]

and volume[period] >500

then retval=value87[period]

 

 else

 

 return;

虎科大許教授 發文於   2025/10/21

這個問題可用Group處理。建議你先學習Group的用法。

https://www.xq.com.tw/lesson/xspractice/商品清單功能/

發表回覆
Close