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

奇狐社區論壇 (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=12605)


由 Gary_007 在 2009-11-30 15:01 發表:

[求救]請問 陣列的問題

我想計算外資成本
構想如下:
第1日金額:=第1日外資持股*第1日DC;
第1日成本:=第1日金額 / 第1日外資持股;

第2日金額:=第2日G1*第2日DC + 第1日成本*(第1日外資持股-第2日G2);
第2日成本:=第2日金額 / (第1日外資持股+G3);

第3日金額:=第3日G1*第3日DC + 第2日成本*(第2日外資持股-第3日G2);
第3日成本:=第3日金額 / (第2日外資持股+G3);

//==========================================
程式如下:
DC:=(H+L+O+2*C)/5;
G1:galdata(1),Colorwhite,Linethick0; CTG2:=DC*G1; //外資買進量
G2:galdata(2),Colorwhite,Linethick0; //外資賣出量
G3:galdata(3),Colorwhite,Linethick0; //外資買賣超

G1:=if((G1=0) and (G2=0) and G3 >0,G3,G1);
G2:=if((G1=0) and (G2=0) and G3 <0,-G3,G2);

外股:FGNDATA(4)/1000,Colorwhite,Linethick0;
外股1:sum(G1-G2,0),Colorwhite,Linethick0;
ck1:barslast(外股 = 外股1),Colorwhite,Linethick0;
ck2:barslast(外股 <> 外股1),Colorwhite,Linethick0;

G1:=if(ck1 =1 and 外股 > 外股1, 外股,G1);
外股1:=sum(G1-G2,0),Colorwhite,Linethick0;
G2:=if(ck2 =1 and 外股 < 外股1, ref(外股,1),G2);
外股1:=sum(G1-G2,0),Colorwhite,Linethick0;
G3:=G1-G2;

金額:DC*0,Colorwhite,Linethick0;
成本:金額/外股,Colorwhite,Linethick0;

for i = lbound(G1) to datacount do begin
金額[i]:=G1[i]*DC[i]+成本[i-1]*(外股[i-1]-G2[i]);
成本[i]:=金額[i]/(外股[i-1]+G3[i]);
end;


可是一直出現如下訊息:
外資10指標數組下標越界或超出有效數據區間

在此求助版主大人, 感恩

__________________
Gary


由 cgjj 在 2009-11-30 17:13 發表:

回覆: [求救]請問 陣列的問題

引用:
最初由 Gary_007 發表
我想計算外資成本
構想如下:
第1日金額:=第1日外資持股*第1日DC;
第1日成本:=第1日金額 / 第1日外資持股;

第2日金額:=第2日G1*第2日DC + 第1日成本*(第1日外資持股-第2日G2);
第2日成本:=第2日金額 / (第1日外資持股+G3);

第3日金額:=第3日G1*第3日DC + 第2日成本*(第2日外資持股-第3日G2);
第3日成本:=第3日金額 / (第2日外資持股+G3);

//==========================================
程式如下:
DC:=(H+L+O+2*C)/5;
G1:galdata(1),Colorwhite,Linethick0; CTG2:=DC*G1; //外資買進量
G2:galdata(2),Colorwhite,Linethick0; //外資賣出量
G3:galdata(3),Colorwhite,Linethick0; //外資買賣超

G1:=if((G1=0) and (G2=0) and G3 >0,G3,G1);
G2:=if((G1=0) and (G2=0) and G3 <0,-G3,G2);

外股:FGNDATA(4)/1000,Colorwhite,Linethick0;
外股1:sum(G1-G2,0),Colorwhite,Linethick0;
ck1:barslast(外股 = 外股1),Colorwhite,Linethick0;
ck2:barslast(外股 <> 外股1),Colorwhite,Linethick0;

G1:=if(ck1 =1 and 外股 > 外股1, 外股,G1);
外股1:=sum(G1-G2,0),Colorwhite,Linethick0;
G2:=if(ck2 =1 and 外股 < 外股1, ref(外股,1),G2);
外股1:=sum(G1-G2,0),Colorwhite,Linethick0;
G3:=G1-G2;

金額:DC*0,Colorwhite,Linethick0;
成本:金額/外股,Colorwhite,Linethick0;

for i = lbound(G1) to datacount do begin
金額[i]:=G1[i]*DC[i]+成本[i-1]*(外股[i-1]-G2[i]);
成本[i]:=金額[i]/(外股[i-1]+G3[i]);
end;


可是一直出現如下訊息:
外資10指標數組下標越界或超出有效數據區間

在此求助版主大人, 感恩



問題可能在於

剛好沒有 外股 = 外股1 的這種情況
此時 barslast(外股 = 外股1) 會傳回一個無效數列
讓 ck1 和 G1 也成為無效數列
而 lbound(G1) 為零, 讓 i 第一次跑為零值
變數[i] ==> 變數[0] , 如此就會導致下標越界


由 Gary_007 在 2009-11-30 17:20 發表:

好快喔

那我該如何修正 ㄚ

__________________
Gary


由 Gary_007 在 2009-11-30 17:24 發表:

版主大大

確實是 ck1 是無效數列ㄝ
我再努力試試看

感恩

__________________
Gary


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


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

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