求助...個股近幾年本益比 程式寫法問題

  •   123 
  • 最後發表   lobogaw  2023 八月 31
lobogaw 發文於   2023/08/17

如標題.

請教 XQ 小幫手及版上前輩.

我寫一個程式, 要撈出個股近 5年來本益比的 10分位, 15分位, 以及中位數.

本想每周抓一次本益比資料, 但考慮到使用陣列會更大, 執行時間更久, 所以改成 8天抓一次.

完成程式如附件.

 

問題是.....

1. 每次執行都要很久(大概 3~5分鐘, 有時更久).

2. 只要是往前執行 (例如  今天是 8/17, 而指定日期 8/1 執行), 程式就會跑很久, 幾乎每次都 "連線逾時".

 

請問, 我的程式碼哪裡有寫錯, 或有可以改進的地方? 感謝 !

 

 

附加文件

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

Hello lobogaw,

 

小幫手認為是您使用了太多的迴圈導致運算量大,進而導致運算過久進而逾時。

如果您打開 nthlowestArray 的函數來觀看的話,會發現裡面是使用迴圈來計算。

建議您可以改用 array_sort 來將陣列排序,這樣就不用每次用 nthlowestArray 來抓分位數。

 

附上小幫手寫的簡單範例:

Array: peA[](0);

var: pe10(0), pe15(0);

 

array_SetMaxIndex(peA, 1250);

 

value2 = 0;

for value1 = 1 to 1250 begin

    if getfield("本益比", "D")[value1] <> 0 then begin 

        value2 += 1;

        peA[value2] = getfield("本益比", "D")[value1];

        end;

    end;

 

array_SetMaxIndex(peA, value2);

 

Array_Sort(peA, 1, value2, true);

 

pe10 = peA[ceiling(value2 * 0.1)];

pe15 = pea[ceiling(value2 * 0.15)];

 

outputField1(pe10, "10分位數");

outputField2(pe15, "15分位數");

 

ret = 1;

由於沒有使用到前期運算值,所以資料讀取筆數只要設為1筆即可。

  • 按讚來自於
  • lobogaw
lobogaw 發文於   2023/08/31

原來如此 !

非常感謝小幫手.

發表回覆
Close