到奇狐勝券首頁 奇狐社區論壇 購買奇狐勝券 試用奇狐勝券
 
論壇首頁 你可以在這裡編輯你的資料,查看短訊,訂閱主題和論壇參數等等 免費會員註冊 會員列表 論壇幫助 論壇日曆 論壇搜索 加入我的最愛 登出論壇  
奇狐社區論壇 : Powered by vBulletin version 2.3.0 奇狐社區論壇 > 指標公式 > 問題交流 > 收盤價陣列寫法
  上一主題   下一主題
作者
主題 發表新主題    回覆主題
一心不亂
資深會員

註冊日期: Apr 2014
來  自:
文章數量: 118

收盤價陣列寫法

請問版主:

MAXKBAR:= 1000; //設定運算近期1000根
StPos:=datacount-MAXKBAR+1;
x:=c;
if StPos<1 then StPos:=1;
for i=datacount downto StPos do begin
x[i]:=close[i]; //將每根K棒收盤價存入X陣列中
end;


但是編譯不通過請問怎麼改?

謝謝

向版主報告此篇 | 查IP位址
Old Post 2017-12-18 13:58
一心不亂 現在離線 點選這裡查看 一心不亂 的個人資料 點選這裡給 一心不亂 傳送一條短訊 查找更多關於 一心不亂 的文章 增加 一心不亂 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18117

回覆: 收盤價陣列寫法

引用:
最初由 一心不亂 發表
請問版主:

MAXKBAR:= 1000; //設定運算近期1000根
StPos:=datacount-MAXKBAR+1;
x:=c;
if StPos<1 then StPos:=1;
for i=datacount downto StPos do begin
x[i]:=close[i]; //將每根K棒收盤價存入X陣列中
end;


但是編譯不通過請問怎麼改?

謝謝



Close 是系統函數,不能直接用 [n] 處理
必須先指定給一個變數,才能以變數[n]存取

不需這麼麻煩,這樣處理就可:
MAXKBAR:=1000;
X:Close;
if datacount>=MAXKBAR then tmp:=SETLBOUND(X,datacount-MAXKBAR+1);

向版主報告此篇 | 查IP位址
Old Post 2017-12-18 14:12
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
一心不亂
資深會員

註冊日期: Apr 2014
來  自:
文章數量: 118

謝謝版主,
這樣改正後自當前K棒算起1000根K棒的收盤價都存在tmp陣列中是嗎?
如果我要調用自當前K棒算起第M根的收盤價是用 y:=datacount-M+1
tmp[Y] 就是我要的收盤價嗎?

向版主報告此篇 | 查IP位址
Old Post 2017-12-18 14:33
一心不亂 現在離線 點選這裡查看 一心不亂 的個人資料 點選這裡給 一心不亂 傳送一條短訊 查找更多關於 一心不亂 的文章 增加 一心不亂 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18117

引用:
最初由 一心不亂 發表
謝謝版主,
這樣改正後自當前K棒算起1000根K棒的收盤價都存在tmp陣列中是嗎?
如果我要調用自當前K棒算起第M根的收盤價是用 y:=datacount-M+1
tmp[Y] 就是我要的收盤價嗎?



不是,是在 X 陣列中
tmp 是數列下界

這個問題,您實際跑公式看就知結果了
程式碼不要僅用看的,要實際去跑~~

向版主報告此篇 | 查IP位址
Old Post 2017-12-18 14:40
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
一心不亂
資深會員

註冊日期: Apr 2014
來  自:
文章數量: 118

lambda:=100;
MAXKBAR:= 50;
x:h;Z:=0;H4:=0;H1:=0;HH5:=0;HH2:=0;H2:=0;HH3:=0;H3:=0;HB:=0;H5:=0;
a:=x*0;b:=x*0;c1:=x*0;
if datacount>=MAXKBAR then tmp:=SETLBOUND(X,datacount-MAXKBAR+1);
StPos:=DATACOUNT;

a[tmp]:=1.0+lambda;
b[tmp]:=-2.0*lambda;
c1[tmp]:=lambda;

FOR i=tmp to i<StPos-2 do begin
a[i]=6.0*lambda+1.0;
b[i]=-4.0*lambda;
c1[i]=lambda;
end;

a[tmp]:=5.0*lambda+1;
a[StPos-1]:=1.0+lambda;
a[StPos-2]:=5.0+lambda+1.0;
b[StPos-2]:=-2.0+lambda;
b[StPos-1]:=0.0;
c1[StPos-2]:=0.0;
c1[StPos-1]:=0.0;

//Forward
FOR i=tmp to i<StPos do begin
Z:=a[i]-H4*H1-HH5*HH2;
HB:=b[i];
HH1:=H1;
H1:=(HB-H4*H2)/Z;
b[i]:=H1;
HC:=c1[i];
HH2:=H2;
H2:=HC/Z;
c1[i]:=H2;
a[i]:=(x[i]-HH3*HH5-H3*H4)/Z;
HH3:=H3;
H3:=a[i];
H4:=HB-H5*HH1;
HH5:=H5;
H5:=HC;
end;

//BACKWARD

H2:=0;
H1:=a[StPos-1];
y[StPos-1]:=H1;
for i=StPos-2 downto i<=tmp do begin
y[i]:=a[i]-b[i]*H1-c1[i]*H2;
H2:=H1;
H1:=y[i];
end;

partline(1,y);


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

向版主報告此篇 | 查IP位址
Old Post 2017-12-19 18:49
一心不亂 現在離線 點選這裡查看 一心不亂 的個人資料 點選這裡給 一心不亂 傳送一條短訊 查找更多關於 一心不亂 的文章 增加 一心不亂 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18117

引用:
最初由 一心不亂 發表
lambda:=100;
MAXKBAR:= 50;
x:h;Z:=0;H4:=0;H1:=0;HH5:=0;HH2:=0;H2:=0;HH3:=0;H3:=0;HB:=0;H5:=0;
a:=x*0;b:=x*0;c1:=x*0;
if datacount>=MAXKBAR then tmp:=SETLBOUND(X,datacount-MAXKBAR+1);
StPos:=DATACOUNT;

a[tmp]:=1.0+lambda;
b[tmp]:=-2.0*lambda;
c1[tmp]:=lambda;

FOR i=tmp to i<StPos-2 do begin
a[i]=6.0*lambda+1.0;
b[i]=-4.0*lambda;
c1[i]=lambda;
end;

a[tmp]:=5.0*lambda+1;
a[StPos-1]:=1.0+lambda;
a[StPos-2]:=5.0+lambda+1.0;
b[StPos-2]:=-2.0+lambda;
b[StPos-1]:=0.0;
c1[StPos-2]:=0.0;
c1[StPos-1]:=0.0;

//Forward
FOR i=tmp to i<StPos do begin
Z:=a[i]-H4*H1-HH5*HH2;
HB:=b[i];
HH1:=H1;
H1:=(HB-H4*H2)/Z;
b[i]:=H1;
HC:=c1[i];
HH2:=H2;
H2:=HC/Z;
c1[i]:=H2;
a[i]:=(x[i]-HH3*HH5-H3*H4)/Z;
HH3:=H3;
H3:=a[i];
H4:=HB-H5*HH1;
HH5:=H5;
H5:=HC;
end;

//BACKWARD

H2:=0;
H1:=a[StPos-1];
y[StPos-1]:=H1;
for i=StPos-2 downto i<=tmp do begin
y[i]:=a[i]-b[i]*H1-c1[i]*H2;
H2:=H1;
H1:=y[i];
end;

partline(1,y);


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



前面您貼的這段程式
根本就還沒有機會跑到 "指標數組下標越界或超出有效數據區間"

因為根本就無法編譯通過,更不用說執行了
請貼上您實際跑的公式!!! 否則難以協助

向版主報告此篇 | 查IP位址
Old Post 2017-12-19 20:46
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
一心不亂
資深會員

註冊日期: Apr 2014
來  自:
文章數量: 118

我這裡可以編譯通過,附圖是執行時出現的錯誤訊息

一心不亂 附帶上了此圖片:

向版主報告此篇 | 查IP位址
Old Post 2017-12-19 20:57
一心不亂 現在離線 點選這裡查看 一心不亂 的個人資料 點選這裡給 一心不亂 傳送一條短訊 查找更多關於 一心不亂 的文章 增加 一心不亂 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18117

引用:
最初由 一心不亂 發表
我這裡可以編譯通過,附圖是執行時出現的錯誤訊息


@@ 您用的是 v5.1 版,我是用 v5.0 測試的

v5.1 編譯檢查的有遺漏

這三行是錯的!!!
a[i]=6.0*lambda+1.0;
b[i]=-4.0*lambda;
c1[i]=lambda;

應該是
a[i]:=6.0*lambda+1.0;
b[i]:=-4.0*lambda;
c1[i]:=lambda;

另外一個看到的問題是
當 datacount<MAXKBAR 時 tmp 這個變數不存在

您先修正這兩部分後,再跑跑

向版主報告此篇 | 查IP位址
Old Post 2017-12-19 21:45
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
一心不亂
資深會員

註冊日期: Apr 2014
來  自:
文章數量: 118

謝謝總版主幫忙,已經修正上述錯誤,但是還是出現下標越界的問題,雖然再三檢查程式,實在看不出錯在哪裡?還請總版主幫忙除錯一下! 謝謝

向版主報告此篇 | 查IP位址
Old Post 2017-12-19 23:16
一心不亂 現在離線 點選這裡查看 一心不亂 的個人資料 點選這裡給 一心不亂 傳送一條短訊 查找更多關於 一心不亂 的文章 增加 一心不亂 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18117

引用:
最初由 一心不亂 發表
謝謝總版主幫忙,已經修正上述錯誤,但是還是出現下標越界的問題,雖然再三檢查程式,實在看不出錯在哪裡?還請總版主幫忙除錯一下! 謝謝


迴圈 to xx
和迴圈 downto xx

xx 都寫錯了

xx 是應該是指定要計數到哪個值

而您帶入的 xx,卻都是 邏輯判斷式
判斷式只有成立和不成立(1或0)

因而變成是計數到 1 或 0
故會產生下標越界的問題

向版主報告此篇 | 查IP位址
Old Post 2017-12-19 23:44
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
全部時間均為台灣時間, 現在時間為02:30 發表新主題    回覆主題
  上一主題   下一主題
顯示可列印版本 | 訂閱此主題

論壇跳轉:
主題評分:

論壇規定:
你不可以發表新主題
你不可以回覆文章
你不可以上傳附件
你不可以編輯自己的文章
HTML語法禁止
vB 語法核准
表情符號核准
貼圖語法[IMG]核准
 

本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。

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

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.  聯絡我們