奇狐社區論壇
在這個頁面顯示本主題全部的 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=22153)


由 p0250 在 2019-11-14 14:46 發表:

指標數組下標越界或超出有效數據區間

pp:=sysparam(1);
aaaa:=setlbound(pp,10);
日kd:=stkindi('','wkdj.wk(9,3,3,1,2,2000)',0,-1);
日dd:=stkindi('','wkdj.wd(9,3,3,1,2,2000)',0,-1);
日rsv:=stkindi('','wkdj.wrsv(9,3,3,1,2,2000)',0,-1);
{ bkd:=日kD[SYSPARAM(1)];}
{ aDD:=日DD[SYSPARAM(1)];}
{ aRSV:=日RSV[SYSPARAM(1)];}
hjk:=setlbound(aaaa,10);
bkd:=日kD[aaaa];
add:=日DD[aaaa];
arsv:=日RSV[aaaa];

FILLRGN(日KD<日dd and 日rsv<日kd,日kd,日rsv),color006600;
FILLRGN(日kd<日dd and 日rsv>日Kd and 日rsv<日dd,日KD,日RSV),color99cc33;
FILLRGN(日kd<日dd and 日rsv>日Dd,日DD,日RSV),color99cc33;
STICKLINE(日kd<日dd,日kd,日dd,8,0),color003300;

FILLRGN(日kd>日dd and 日rsv>日kd,日kd,日rsv),color996699;
FILLRGN(日kd>日dd and 日rsv<日kd and 日rsv>日dd,日kD,日RSV),color996699;
FILLRGN(日kd>日dd and 日rsv<日Dd,日DD,日RSV),color006600;

STICKLINE(日KD>日Dd,日kd,日DD,6,0),color99cc99;


公式內容如上 在5分鐘週期引用 會出現如標題所示的信息出來 然後指標線都沒有顯示 請幫忙 謝謝


由 cgjj 在 2019-11-14 15:22 發表:

回覆: 指標數組下標越界或超出有效數據區間

引用:
最初由 p0250 發表
pp:=sysparam(1);
aaaa:=setlbound(pp,10);
日kd:=stkindi('','wkdj.wk(9,3,3,1,2,2000)',0,-1);
日dd:=stkindi('','wkdj.wd(9,3,3,1,2,2000)',0,-1);
日rsv:=stkindi('','wkdj.wrsv(9,3,3,1,2,2000)',0,-1);
{ bkd:=日kD[SYSPARAM(1)];}
{ aDD:=日DD[SYSPARAM(1)];}
{ aRSV:=日RSV[SYSPARAM(1)];}
hjk:=setlbound(aaaa,10);
bkd:=日kD[aaaa];
add:=日DD[aaaa];
arsv:=日RSV[aaaa];

FILLRGN(日KD<日dd and 日rsv<日kd,日kd,日rsv),color006600;
FILLRGN(日kd<日dd and 日rsv>日Kd and 日rsv<日dd,日KD,日RSV),color99cc33;
FILLRGN(日kd<日dd and 日rsv>日Dd,日DD,日RSV),color99cc33;
STICKLINE(日kd<日dd,日kd,日dd,8,0),color003300;

FILLRGN(日kd>日dd and 日rsv>日kd,日kd,日rsv),color996699;
FILLRGN(日kd>日dd and 日rsv<日kd and 日rsv>日dd,日kD,日RSV),color996699;
FILLRGN(日kd>日dd and 日rsv<日Dd,日DD,日RSV),color006600;

STICKLINE(日KD>日Dd,日kd,日DD,6,0),color99cc99;


公式內容如上 在5分鐘週期引用 會出現如標題所示的信息出來 然後指標線都沒有顯示 請幫忙 謝謝



這不是你實際跑的吧,有些變數後面根本沒有用到
我只能用猜的回應你的問題

pp:=sysparam(1); //PP 結果並非數列!!!
aaaa:=setlbound(pp,10); //對非數列的 PP 設定數列下限,這是錯誤的做法,會引發非預期的結果,甚至造成軟體崩潰


日kD[SYSPARAM(1)]
日kD[aaaa];
程式中像這樣的例子,都會有越界的問題

要檢查數列下界
lbound(數列) 可以得到數列下界

以 bkd 為例,若十字游標處不存在日kD值,則給 -1

PP:=sysparam(1);
bkd:=-1;
IF PP>=lbound(日kD) then bkd:=日kD[PP];


由 p0250 在 2019-11-14 15:35 發表:

回覆: 原來公式更複雜 我只截取一小段引用日線數據時 也是出現相同 信息 所以我只PO出 這段公式 至於 信息 所以我只PO出 這段公式 至於下面顯示的fillran函數是無關的


由 p0250 在 2019-11-14 15:42 發表:

早上 我有從論壇上查到 我也有嚐試輸入這個
pp:=sysparam(1);

IF PP>datacount or pp<lbound(pp) then pp:=datacount;


但是失敗ㄌ

我再來試試 IF PP>=lbound(日kD) then bkd:=日kD[PP];這個

謝謝 既時的教導


由 p0250 在 2019-11-14 16:00 發表:

好像可以了 萬分感謝 謝謝


由 cgjj 在 2019-11-14 16:05 發表:

引用:
最初由 p0250 發表
早上 我有從論壇上查到 我也有嚐試輸入這個
pp:=sysparam(1);

IF PP>datacount or pp<lbound(pp) then pp:=datacount;


但是失敗ㄌ

我再來試試 IF PP>=lbound(日kD) then bkd:=日kD[PP];這個

謝謝 既時的教導



兩者是不同的狀態處置 !!!
一個是確保 PP 在 K棒範圍內
一個是防止PP越界存取該數列下界

請先把程式看懂再去用
不然很容易錯用,還錯的渾然不知!!!


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


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

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