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

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


由 Rosetta 在 2021-05-31 15:32 發表:

請問指標問題

請問版主,我根據下圖


寫了公式如下:
UD:=(H-L)-ABS(O-C);
LF:=POW(UD,4);
ZD:SUM(C*V*LF,20)/SUM(V*LF,20);

在日線還好,但是在一分線會出現嚴重偏離現象(如下圖),請問是哪裡寫錯了?


由 cgjj 在 2021-05-31 16:13 發表:

回覆: 請問指標問題

引用:
最初由 Rosetta 發表
請問版主,我根據下圖


寫了公式如下:
UD:=(H-L)-ABS(O-C);
LF:=POW(UD,4);
ZD:SUM(C*V*LF,20)/SUM(V*LF,20);

在日線還好,但是在一分線會出現嚴重偏離現象(如下圖),請問是哪裡寫錯了?



按你給的圖
UD:=(H-L)-ABS(O-C);
應修正為 UD:=ABS(C-O)-(H-L);
不過那個只會影響到UD正負

嚴重偏離?
每個指標有每個指標的特性

這個算法!
當除號兩邊的元素,數值差異很大時就會出現您所謂的 "偏離",並非是算錯!

適不適用於1分線,以及適不適用所有商品,需要去視該指標的特性,自己審慎評估抉擇!


由 Rosetta 在 2021-06-01 07:52 發表:

回覆: 回覆: 請問指標問題

引用:
最初由 cgjj 發表
按你給的圖
UD:=(H-L)-ABS(O-C);
應修正為 UD:=ABS(C-O)-(H-L);
不過那個只會影響到UD正負

嚴重偏離?
每個指標有每個指標的特性

這個算法!
當除號兩邊的元素,數值差異很大時就會出現您所謂的 "偏離",並非是算錯!

適不適用於1分線,以及適不適用所有商品,需要去視該指標的特性,自己審慎評估抉擇!



將程式改為:
UD:=ABS(O-C)-(H-L),linethick0;
LF:=POW(UD,4),linethick0;
LF1:=MAX(LF,1),linethick0;
ZD1:=SUM(CLOSE*VOL*LF1,N),linethick0;
ZD2:=SUM(VOL*LF1,N);
ZD:ZD1/ZD2;

以6244茂迪,2020年3月23日為例:
當N=1時,ZD、ZD1、ZD2每個數值皆為正
當N=2時,ZD數值開始出現負值
檢查之後,發現是ZD1造成,但是ZD2是正值,但是裡面個別的數值都不可能為負值,每天的數值也不可能為負值,那如何產生負值的?


由 cgjj 在 2021-06-01 10:39 發表:

回覆: 回覆: 回覆: 請問指標問題

引用:
最初由 Rosetta 發表
將程式改為:
UD:=ABS(O-C)-(H-L),linethick0;
LF:=POW(UD,4),linethick0;
LF1:=MAX(LF,1),linethick0;
ZD1:=SUM(CLOSE*VOL*LF1,N),linethick0;
ZD2:=SUM(VOL*LF1,N);
ZD:ZD1/ZD2;

以6244茂迪,2020年3月23日為例:
當N=1時,ZD、ZD1、ZD2每個數值皆為正
當N=2時,ZD數值開始出現負值
檢查之後,發現是ZD1造成,但是ZD2是正值,但是裡面個別的數值都不可能為負值,每天的數值也不可能為負值,那如何產生負值的?



測試了一下,確實是有點問題!

初步尋找原因,應該是 POW 函數引起的問題!
發生在POW在第一個參數為數列,且數值為零或負數時。
傳回的零可能不是一個絕對的零(精度差異)
細部還要請工程師確認,確認後會進行修正


由 Rosetta 在 2021-06-01 11:01 發表:

回覆: 回覆: 回覆: 回覆: 請問指標問題

引用:
最初由 cgjj 發表
測試了一下,確實是有點問題!

初步尋找原因,應該是 POW 函數引起的問題!
發生在POW在第一個參數為數列,且數值為零或負數時。
傳回的零可能不是一個絕對的零(精度差異)
細部還要請工程師確認,確認後會進行修正



如果將
LF:=POW(UD,4);
改為
LF:=UD*UD*UD*UD;
這樣不涉及POW函數,但是結果沒變


由 cgjj 在 2021-06-01 11:20 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 請問指標問題

引用:
最初由 Rosetta 發表
如果將
LF:=POW(UD,4);
改為
LF:=UD*UD*UD*UD;
這樣不涉及POW函數,但是結果沒變



是的! 會請工程師盡快查明,盡快解決。
謝謝您


由 cgjj 在 2021-06-01 13:22 發表:

應該是 SUM(CLOSE*VOL*LF1,N) 計算過程中,產生巨大的數,超過極限值。導致無法繼續正常計算~~

將各自多乘上個數,縮小巨值,即可正常!

UD:=ABS(O-C)-(H-L),linethick0;
LF:=POW(UD,4),linethick0;
LF1:=MAX(LF,1),linethick0;
ZD1:=SUM(CLOSE*VOL*LF1*0.1,N),linethick0;
ZD2:=SUM(VOL*LF1*0.1,N);
ZD:ZD1/ZD2;


其實乘上 LF1 是多餘的,根本沒必要!!!
可直接簡化為這樣!
ZD1:=SUM(CLOSE*VOL,N),linethick0;
ZD2:=SUM(VOL,N);
ZD:ZD1/ZD2;

乘太多東西,容易引起巨數,可能會超過軟體能處理的巨數極限!


由 cgjj 在 2021-06-01 15:32 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 請問指標問題

工程師已經查明原因了!

是SUM函數算法中的單精度浮點誤差引起的攪動,造成了計算失真。
我手邊的最新測試版本,已經修正了這個問題,已經可正常算出數值。
下次軟體升級就會包含此部分的功能修正!

若有急需可先私訊,可先提供新的版本EXE


由 Rosetta 在 2021-06-02 06:34 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 請問指標問題

引用:
最初由 cgjj 發表
工程師已經查明原因了!

是SUM函數算法中的單精度浮點誤差引起的攪動,造成了計算失真。
我手邊的最新測試版本,已經修正了這個問題,已經可正常算出數值。
下次軟體升級就會包含此部分的功能修正!

若有急需可先私訊,可先提供新的版本EXE



將公式改為:
UD:ABS(O-C)-(H-L),linethick0;
LF:POW(UD,4),linethick0;
LF1:MAX(LF,1),linethick0;
ZD1:MA(CLOSE*VOL*LF1,N)*N,linethick0;
ZD2:MA(VOL*LF1,N)*N,linethick0;
ZD:ZD1/ZD2;
避開SUM函數,結果一樣


由 cgjj 在 2021-06-02 08:57 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 請問指標問題

引用:
最初由 Rosetta 發表
將公式改為:
UD:ABS(O-C)-(H-L),linethick0;
LF:POW(UD,4),linethick0;
LF1:MAX(LF,1),linethick0;
ZD1:MA(CLOSE*VOL*LF1,N)*N,linethick0;
ZD2:MA(VOL*LF1,N)*N,linethick0;
ZD:ZD1/ZD2;
避開SUM函數,結果一樣



Yes!
工程師會把有累加成分的函數,都檢視過一次,進行修正! (目前正在進行中)
謝謝回報 ^^


由 cgjj 在 2021-06-02 11:22 發表:

我手邊的最新測試版本,已經修正了MA這個問題,已經可正常算出數值。

並非有累加成分的函數都有這個問題存在~~

是SUM 和 MA 這兩個函數,有用到了相同的累加優化算法,該算法會有單精度浮點計算累計誤差的問題,現在都已改正。

下次軟體升級就會包含此部分的功能修正!

基本上這問題只有累加到數值大小超過單精度有效位數範圍以上時,才會開始有累計誤差。故不常見!


由 Rosetta 在 2021-06-02 14:20 發表:

引用:
最初由 cgjj 發表
我手邊的最新測試版本,已經修正了MA這個問題,已經可正常算出數值。

並非有累加成分的函數都有這個問題存在~~

是SUM 和 MA 這兩個函數,有用到了相同的累加優化算法,該算法會有單精度浮點計算累計誤差的問題,現在都已改正。

下次軟體升級就會包含此部分的功能修正!

基本上這問題只有累加到數值大小超過單精度有效位數範圍以上時,才會開始有累計誤差。故不常見!



請問版主,有沒有辦法將
ZD1:SUM(CLOSE*VOL*LF1,N)*N,linethick0;
不用SUM、MA函數而可以表達的方式,謝謝


由 cgjj 在 2021-06-02 14:38 發表:

引用:
最初由 Rosetta 發表
請問版主,有沒有辦法將
ZD1:SUM(CLOSE*VOL*LF1,N)*N,linethick0;
不用SUM、MA函數而可以表達的方式,謝謝



是可以用迴圈自行去累加去實現這部分(範例如下)
但速度會比用內建的 SUM 算來的慢。故不建議! (尤其在資料量大時)
預計最快這周就會發佈軟體升級!

原碼:
ZD1:=C*0; CV:=CLOSE*VOL*LF1; for i=N to datacount do begin for j=i downto i-N+1 do begin ZD1[i]:=ZD1[i]+CV[j]; end; end; ZD1:=ZD1*N; x:=SETLBOUND(ZD1,N);


由 Rosetta 在 2021-06-03 08:03 發表:

引用:
最初由 cgjj 發表
是可以用迴圈自行去累加去實現這部分(範例如下)
但速度會比用內建的 SUM 算來的慢。故不建議! (尤其在資料量大時)
預計最快這周就會發佈軟體升級!

原碼:
ZD1:=C*0; CV:=CLOSE*VOL*LF1; for i=N to datacount do begin for j=i downto i-N+1 do begin ZD1[i]:=ZD1[i]+CV[j]; end; end; ZD1:=ZD1*N; x:=SETLBOUND(ZD1,N);



1.請問版主,x:=SETLBOUND(ZD1,N);代表什麼意思,怎麼看他都等於N

2.將公式改為
UD:ABS(O-C)-(H-L),linethick0;
LF:POW(UD,4),linethick0;
LF1:MAX(LF,1),linethick0;

ZD1:=C*0; CV:=CLOSE*VOL*LF1;
for i=N to datacount do begin
for j=i downto i-N+1 do begin
ZD1[i]:=ZD1[i]+CV[j];
end;
end;
ZD1:ZD1*N,linethick0;
X:SETLBOUND(ZD1,N),linethick0;
ZD2:SUM(VOL*LF1,N),linethick0;
ZD:ZD1/ZD2;

雖然ZD1為正值了,但是看起來還是有問題,還不如用原始程式+還權圖來的好

3.如果要將其寫入選股系統,又不想在選項內將權息校正勾選,要加上哪段程式碼,謝謝


由 cgjj 在 2021-06-03 09:52 發表:

引用:
最初由 Rosetta 發表
1.請問版主,x:=SETLBOUND(ZD1,N);代表什麼意思,怎麼看他都等於N

2.將公式改為
UD:ABS(O-C)-(H-L),linethick0;
LF:POW(UD,4),linethick0;
LF1:MAX(LF,1),linethick0;

ZD1:=C*0; CV:=CLOSE*VOL*LF1;
for i=N to datacount do begin
for j=i downto i-N+1 do begin
ZD1[i]:=ZD1[i]+CV[j];
end;
end;
ZD1:ZD1*N,linethick0;
X:SETLBOUND(ZD1,N),linethick0;
ZD2:SUM(VOL*LF1,N),linethick0;
ZD:ZD1/ZD2;

雖然ZD1為正值了,但是看起來還是有問題,還不如用原始程式+還權圖來的好

3.如果要將其寫入選股系統,又不想在選項內將權息校正勾選,要加上哪段程式碼,謝謝




x:=SETLBOUND(ZD1,N);
是將 ZD1 這個數列的下界(有效起點)設為第N根


目前:
用已還權的資料做選股,一定要在系統選項中勾選[選股,交易系統權息]校正

若是應用在日線,且是採用未還權的資料做日線選股
才可以透過 SEQDATA 函數取得未還權的日線資料,例如:
未還權日線之收盤價:SEQDATA('','DAY','CLOSE');


由 cgjj 在 2021-06-09 14:02 發表:

引用:
最初由 cgjj 發表
我手邊的最新測試版本,已經修正了MA這個問題,已經可正常算出數值。

並非有累加成分的函數都有這個問題存在~~

是SUM 和 MA 這兩個函數,有用到了相同的累加優化算法,該算法會有單精度浮點計算累計誤差的問題,現在都已改正。

下次軟體升級就會包含此部分的功能修正!

基本上這問題只有累加到數值大小超過單精度有效位數範圍以上時,才會開始有累計誤差。故不常見!



已發佈軟體修正更新,請見:
http://www.chiefox.com.tw/bbs/showt...&threadid=23018


由 Rosetta 在 2021-06-09 14:09 發表:

引用:
最初由 cgjj 發表
已發佈軟體修正更新,請見:
http://www.chiefox.com.tw/bbs/showt...&threadid=23018



感謝版主


由 cgjj 在 2021-06-09 14:10 發表:

引用:
最初由 Rosetta 發表
感謝版主


不客氣^^


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


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

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