選股中心有關00981A的currentBar數值

  •   71 
  • 最後發表   ycchang8511  2 週前
ycchang8511 發文於   2026/05/05

該圖片之程式碼為

{設定資料計算範圍}
settotalbar(300);
setbackBar(300, "D");

outputfield(1, currentBar, "K棒數");

 

請問客服

為什麼00981A的currentBar跑出來是43啊?

感覺不太對

 

 

附加文件

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

我這邊測試的結果是228。

settotalbar(300);
setbackBar(300, "D");
if symbol="00981A.TW" then ret=1;
outputfield(1, currentBar, "K棒數");

ycchang8511 發文於   2026/05/05

請問許教授

那可能的問題原因是什麼啊?

虎科大許教授 發文於   2026/05/06

你試著用我提供的腳本測試看看,若結果還是43根K棒,那可能你的XQ系統有問題。若與我一樣是228,代表問題出在你的選股程式。

XS小編 發文於   2026/05/08

Hello ycchang8511,

 

小編推測應該是您的選股腳本中有使用到前期值所導致 (參考副圖)。

附加文件

ycchang8511 發文於   2026/05/08

小編您好:

對!沒有錯

因為我是想要去計算過去N個月的報酬率

所以有用到close[X]的變數

X=想計算的前期值

 

那我想請問有沒有其他方法可以解決呢?

虎科大許教授 發文於   2026/05/08

若腳本裡面有使用到close[100],則跑的K棒數會變少。你要解決的問題是什麼呢?

ycchang8511 發文於   2026/05/08

{設定資料計算範圍}
settotalbar(300);
setbackBar(300, "D");

var:
    _3month_roi(0);

value1 = minlist(currentBar, 60);

_3month_roi = (close - close[value1]) / close[value1] * 100;

if GetFieldDate("除權息日期") <> 0 then ret = 1;

outputfield(1, _3month_roi, "過去三個月報酬率");

 

程式碼大概是這樣

就是想要去算過去三個月的報酬

虎科大許教授 發文於   2026/05/08

要解決你的問題,並不需要控制讀取或引用K棒數。若計算的序列是資料庫的數據,儘管用預設的10筆讀取資料,仍然可以抓到更早的數據。修改之後的選股腳本如下(選股範圍:普通股與ETF(系統)):

var: _3month_roi(0);
if isLastBar then
    begin
        _3month_roi = rateOfChange(close, 60);
        if GetFieldDate("除權息日期") <> 0 then ret = 1;
        outputfield(1, _3month_roi, "過去三個月報酬率");
    end;

  • 按讚來自於
  • ycchang8511
XS小編 發文於   2026/05/14

Hello ycchang8511,

 

小編補充,選股中心在執行時預設就會取得取用商品欄位所有的歷史資料。

所以不需要特別設定資料引用筆數 (setbackbar)。

至於單純取前期值來計算的話,也不需要設定資料讀取筆數 (settotalbar)。

關於兩者的細部資訊,可參考 SetTotalBar資料讀取範圍與腳本執行的關係

發表回覆
Close