奇狐社區論壇
在這個頁面顯示本主題全部的 6 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 下標越界問題請教 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=24160)


由 Rosetta 在 2024-12-25 08:39 發表:

下標越界問題請教

根據以前帖子,修改的個股預估量,發現一個問題,在15分跑時,有時少部份股票會出現「指標組下標越界或超出有效數據區間」的訊息,據觀察好像是K棒數量不足,例如6919、6982等等,有沒有辦法調整K棒數量,讓程式順利顯示出來,謝謝


源碼如下:

VARIABLE:MN[18]=0; //定義15分鐘K棒對應乘數
MN[01]:=8; MN[07]:=2; MN[13]:=1.38;
MN[02]:=5; MN[08]:=1.8; MN[14]:=1.32;
MN[03]:=4; MN[09]:=1.7; MN[15]:=1.25;
MN[04]:=3; MN[10]:=1.6; MN[16]:=1.18;
MN[05]:=2.5; MN[11]:=1.5; MN[17]:=1.11;
MN[06]:=2.2; MN[12]:=1.45; MN[18]:=1;

成交:=VOL;

DEKN:=barslast(date<>ref(date,1))+1;
預估:C*0; VV:=成交;
for i=lbound(DEKN) to datacount do begin
if DEKN[i]=1 then SV:=0;
SV:=SV+VV[i];
預估[i]:=SV*MN[DEKN[i]];
end;
預估;


由 cgjj 在 2024-12-25 08:49 發表:

回覆: 下標越界問題請教

引用:
最初由 Rosetta 發表
根據以前帖子,修改的個股預估量,發現一個問題,在15分跑時,有時少部份股票會出現「指標組下標越界或超出有效數據區間」的訊息,據觀察好像是K棒數量不足,例如6919、6982等等,有沒有辦法調整K棒數量,讓程式順利顯示出來,謝謝


源碼如下:

VARIABLE:MN[18]=0; //定義15分鐘K棒對應乘數
MN[01]:=8; MN[07]:=2; MN[13]:=1.38;
MN[02]:=5; MN[08]:=1.8; MN[14]:=1.32;
MN[03]:=4; MN[09]:=1.7; MN[15]:=1.25;
MN[04]:=3; MN[10]:=1.6; MN[16]:=1.18;
MN[05]:=2.5; MN[11]:=1.5; MN[17]:=1.11;
MN[06]:=2.2; MN[12]:=1.45; MN[18]:=1;

成交:=VOL;

DEKN:=barslast(date<>ref(date,1))+1;
預估:C*0; VV:=成交;
for i=lbound(DEKN) to datacount do begin
if DEKN[i]=1 then SV:=0;
SV:=SV+VV[i];
預估[i]:=SV*MN[DEKN[i]];
end;
預估;



測試過在6919、6982正常唷
甚至拿它來選股(所有上市上櫃股票),也是正常的!

此公式為股票專用!
您若不小心去跑到期貨商品,出現錯誤是必然的(期貨交易時間長,不只18根)
公式應該要去限定,僅有股票才能跑,範例如下:(加在程式最前頭)
CkMT:=MARKETLABEL='TW' or MARKETLABEL='TO';
if CkMT=0 then exit;


由 cgjj 在 2024-12-25 08:54 發表:

若該商品K棒不足一日,則會出錯!
要預防很簡單!


DEKN:=barslast(date<>ref(date,1))+1;

改為
DEKN:=barslast(date<>ref(date,1))+1;
if lbound(DEKN)=0 then exit;


由 Rosetta 在 2024-12-26 07:25 發表:

引用:
最初由 cgjj 發表
若該商品K棒不足一日,則會出錯!
要預防很簡單!


DEKN:=barslast(date<>ref(date,1))+1;

改為
DEKN:=barslast(date<>ref(date,1))+1;
if lbound(DEKN)=0 then exit;



我知道原因了,因為我將上面程式命名為「預估量」的子公式,然後新建公式去引用,目的是切換任何周其實都可以固定數值,然後就出現上述問題,請問該如何解決?

A01:=STKINDI('','預估量.預估',0,3);//15MIN預估量
EXPLAINEX (1, '15MIN預估量=',A01,2,0);

註:「預估量.預估」中間這個點,不知如何一貼文就變成句號


由 cgjj 在 2024-12-26 08:58 發表:

引用:
最初由 Rosetta 發表
我知道原因了,因為我將上面程式命名為「預估量」的子公式,然後新建公式去引用,目的是切換任何周其實都可以固定數值,然後就出現上述問題,請問該如何解決?

A01:=STKINDI('','預估量.預估',0,3);//15MIN預估量
EXPLAINEX (1, '15MIN預估量=',A01,2,0);

註:「預估量.預估」中間這個點,不知如何一貼文就變成句號



A01:=STKINDI('','預估量.預估',0,3);//15MIN預估量
EXPLAINEX (1, '15MIN預估量=',A01,2,0);

這兩行不會有機會在 6919、6982 引發下標越界的!

只要是確定是引用15分鐘周期,且對象是股票,基本上它是不會出現越界的!
除非該商品剛上市,且分鐘K棒累積尚未超過一個交易日,才會出現越界的

若以上因素皆排除,仍會見到!
則可能是您其他未貼出的程式碼所引起的


由 cgjj 在 2024-12-26 09:05 發表:

如果您有機會跑到剛上市的商品!

請將
DEKN:=barslast(date<>ref(date,1))+1;
預估:C*0; VV:=成交;

改為這樣(這邊的先後次序,請勿變動)
DEKN:=barslast(date<>ref(date,1))+1;
預估:C*0; VV:=成交;
if lbound(DEKN)=0 then exit;

這樣就不會因為剛上市,無法計算而出現越界(預估值會得到0)


全部時間均為台灣時間, 現在時間為04:04
在這個頁面顯示本主題全部的 6 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.