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

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


由 a666666 在 2010-11-12 16:23 發表:

老师: 请教一个函数问题

老师: 请教一个函数问题
for i=3+1 to datacount do begin
if fc[i]>mhn[i-1] then
hld[i]:=1
else if fc[i]<mln[i-1] then
hld[i]:=-1
else
hld[i]:=hld[i-1];
end; 这个函数总是出现这个问题;
k线指标组下标超界或超出有效数据区间:
这是什么问题 有解决的方法吗?
感谢


由 cgjj 在 2010-11-12 18:24 發表:

回覆: 老师: 请教一个函数问题

引用:
最初由 a666666 發表
老师: 请教一个函数问题
for i=3+1 to datacount do begin
if fc[i]>mhn[i-1] then
hld[i]:=1
else if fc[i]<mln[i-1] then
hld[i]:=-1
else
hld[i]:=hld[i-1];
end; 这个函数总是出现这个问题;
k线指标组下标超界或超出有效数据区间:
这是什么问题 有解决的方法吗?
感谢



代表您迴圈存取數列的範圍越界了

例如:
MM:MA(C,5);

MM數列有效起始位址為5, 您若用 MM[4] 去存取就越界了
註: 可用 LBOUND 函數來取得數列有效起始位址


由 a666666 在 2010-11-12 19:24 發表:

太难了 没用过这函数 不知函数"LBOUND()"怎样用 用在何处改在什么地方 自己实在无法办到

for i=3+1 to datacount do begin
if fc[i]>mhn[i-1] then
hld[i]:=1
else if fc[i]<mln[i-1] then
hld[i]:=-1
else
hld[i]:=hld[i-1];
end;



希望 老师能把上面这个用"LBOUND()"函数或其它函数改下 感谢


由 cgjj 在 2010-11-15 09:45 發表:

引用:
最初由 a666666 發表
太难了 没用过这函数 不知函数"LBOUND()"怎样用 用在何处改在什么地方 自己实在无法办到

for i=3+1 to datacount do begin
if fc[i]>mhn[i-1] then
hld[i]:=1
else if fc[i]<mln[i-1] then
hld[i]:=-1
else
hld[i]:=hld[i-1];
end;



希望 老师能把上面这个用"LBOUND()"函数或其它函数改下 感谢



沒見完整的公式, 是無法協助您修改的

您去試試這兩行, 觀察一下 LB 的數值(先將N設5, 再將N設10)
MM:MA(C,N);
LB:lbound(MM);

迴圈起點必須是這四個數列起點的最大值, 否則就會越界
fc, mhn, mln, hid


由 a666666 在 2010-11-15 16:50 發表:

老师 以下这就是完整公式:

fc:=close;
mhn:=ma(high,n1);
mln:=ma(low,n1);
hld:=if(close>ref(MA(H,N1),1),1,if(close<ref(MA(L,N1),1),-1,ref(hld,1)));
for i=n1+1 to datacount do begin
if fc[i]>mhn[i-1] then
hld[i]:=1
else if fc[i]<mln[i-1] then
hld[i]:=-1
else
hld[i]:=hld[i-1];
end;
hilo:if(hld=-1,ma(h,n1),ma(l,N1))LINETHICK2;
感谢


由 cgjj 在 2010-11-15 17:45 發表:

引用:
最初由 a666666 發表
老师 以下这就是完整公式:

fc:=close;
mhn:=ma(high,n1);
mln:=ma(low,n1);
hld:=if(close>ref(MA(H,N1),1),1,if(close<ref(MA(L,N1),1),-1,ref(hld,1)));
for i=n1+1 to datacount do begin
if fc[i]>mhn[i-1] then
hld[i]:=1
else if fc[i]<mln[i-1] then
hld[i]:=-1
else
hld[i]:=hld[i-1];
end;
hilo:if(hld=-1,ma(h,n1),ma(l,N1))LINETHICK2;
感谢



這個公式是錯的
因為 hld 變數尚未被定義, 就被帶入拿來計算

或者
它不是奇狐也不是飛狐的公式


由 a666666 在 2010-11-15 17:59 發表:

老师: 这个公式我在用 不是不能用 就是夸周期用时出现以下问题

k线指标组下标超界或超出有效数据区间:


由 cgjj 在 2010-11-15 18:34 發表:

引用:
最初由 a666666 發表
老师: 这个公式我在用 不是不能用 就是夸周期用时出现以下问题

k线指标组下标超界或超出有效数据区间:



可以跑不代表它是對的
再某些情況下 hld 會是無效變數

前段就有錯嚕, 改後段無意義

若這原碼不是給奇狐用的, 您會錯的渾然不知


由 a666666 在 2010-11-15 18:49 發表:

老师:
是奇狐公式 用了很长时间 可能有未来意义在里面 用的好 是好东西 用的不好...... 没办法 做股期总要相信一总技术分析公式指标 谢谢老师改改


由 cgjj 在 2010-11-15 19:20 發表:

fc:=close;
mhn:=ma(high,n1);
mln:=ma(low,n1);
hld:if(close>ref(MA(H,N1),1),1,if(close<ref(MA(L,N1),1),-1,-999999));
VERTLINE(hld=-999999) colorred linedot;

先單獨跑上面這段公式(縮小K棒, 輪換商品跑)
找到商品有發現被標紅色垂直線的地方(就是有錯的地方)

找到後您再將公式換成跑下面這段(僅跑這四行)
fc:=close;
mhn:=ma(high,n1);
mln:=ma(low,n1);
hld:if(close>ref(MA(H,N1),1),1,if(close<ref(MA(L,N1),1),-1,ref(hld,1)));

您就會發覺 hld 此時沒有輸出(無效數列)

也就是說後續的迴圈, 會有機會存取到無效的數列位置
結果輕則數據錯亂, 重則造成軟體錯誤當掉(記憶體溢位)

但實際受傷害比較重的, 往往會是輕的結果
錯的讓您渾然不知 ......


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


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

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