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

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


由 tajenchung 在 2015-07-03 23:21 發表:

[求救] 排序問題

我想以 date 和 price 兩個欄位為資料來源,然後每3天為一個群體,分別對date 及 price 進行排序,進而得到該群體中每日的 date 排名 和 price 排名。

詳細的例子如附件。

懇請高手相助,謝謝!


由 cgjj 在 2015-07-06 09:12 發表:

回覆: [求救] 排序問題

引用:
最初由 tajenchung 發表
我想以 date 和 price 兩個欄位為資料來源,然後每3天為一個群體,分別對date 及 price 進行排序,進而得到該群體中每日的 date 排名 和 price 排名。

詳細的例子如附件。

懇請高手相助,謝謝!



日線總數,不會每天都剛剛好能被3整除
當日線最末根date_rank不為3時,如何處理?


由 tajenchung 在 2015-07-06 13:40 發表:

版主您好:

謝謝您的回覆。
可能是我的描述上的關係,讓您混亂了。
若用以下的形容,應該比較清楚:

『每根K棒與前二根K棒形成一個群體』



這樣應該就不須要除以3了。

再次感恩!


由 cgjj 在 2015-07-06 14:59 發表:

引用:
最初由 tajenchung 發表
版主您好:

謝謝您的回覆。
可能是我的描述上的關係,讓您混亂了。
若用以下的形容,應該比較清楚:

『每根K棒與前二根K棒形成一個群體』



這樣應該就不須要除以3了。

再次感恩!



(price_rank 減 date_rank) 的 [每3日總合] 計算有意義嗎?
因為其值必定永遠為零


由 tajenchung 在 2015-07-06 17:45 發表:

price_rank 減 date_rank 的值 "不會" 永遠為零, 如附件的第一個例子,其值是"2"。


由 cgjj 在 2015-07-06 18:51 發表:

引用:
最初由 tajenchung 發表
price_rank 減 date_rank 的值 "不會" 永遠為零, 如附件的第一個例子,其值是"2"。


price_rank 減 date_rank
20150101 = 2
20150102 = -1
20150103 = -1

每3日總合 = 2 + (-1) + (-1) = 0
是零,並非2


由 tajenchung 在 2015-07-07 10:47 發表:

其實我要求出的值是:

(price_rank 減 date_rank)*(price_rank 減 date_rank) 的每3日總合。

只是為了簡化問題,所以才寫成price_rank 減 date_rank。

沒想到版主這麼細心,看到結果都是0。

不好意思造成困擾。


由 cgjj 在 2015-07-07 11:35 發表:

引用:
最初由 tajenchung 發表
其實我要求出的值是:

(price_rank 減 date_rank)*(price_rank 減 date_rank) 的每3日總合。

只是為了簡化問題,所以才寫成price_rank 減 date_rank。

沒想到版主這麼細心,看到結果都是0。

不好意思造成困擾。



SS 就是您要的數值 (本公式計算負荷較重)

原碼:

CC
:=CWK:=C*0PRDR:=WK
SS:WK;
for 
i=3 to datacount do begin
  FtN
:=i-2;
  for 
j=i downto FtN do begin
    WK
[j]:=CC[j];
  
end;
  
x:=sortpos(WK,0,j+1,i);
  for 
j=i downto FtN do begin
    PRDR
[WK[j]]:=(i-j+1)-(WK[j]-FtN+1);
    
SS[i]:=SS[i]+POW(PRDR[WK[j]],2);
  
end;  
end;


由 tajenchung 在 2015-07-07 15:49 發表:

完全符合我的需求,謝謝版主的解答,感激不盡!!!


程式中有一行,引起我對奇狐內部運算的好奇:

for j=i downto FtN do begin

WK[j]:=CC[j];

end;

x:=sortpos(WK,0,j+1,i);

為何x:=sortpos(WK,0,j+1,i)的j值,在for 執行完之後,會等於for最後的J值 減 1

例子:
I=3,J=3 downto 1,x:=sortpos(WK,0,j+1,i)的j值 =0

I=4,J=4 downto 2,x:=sortpos(WK,0,j+1,i)的j值 =1

蠻特別的,沒遇到還真不知道是如此呢...


由 cgjj 在 2015-07-07 17:08 發表:

引用:
最初由 tajenchung 發表
完全符合我的需求,謝謝版主的解答,感激不盡!!!


程式中有一行,引起我對奇狐內部運算的好奇:

for j=i downto FtN do begin

WK[j]:=CC[j];

end;

x:=sortpos(WK,0,j+1,i);

為何x:=sortpos(WK,0,j+1,i)的j值,在for 執行完之後,會等於for最後的J值 減 1

例子:
I=3,J=3 downto 1,x:=sortpos(WK,0,j+1,i)的j值 =0

I=4,J=4 downto 2,x:=sortpos(WK,0,j+1,i)的j值 =1

蠻特別的,沒遇到還真不知道是如此呢...



那跟 sortpos 沒有任何關係
並非奇狐的迴圈比較特別
許多程式語言皆是如此處理迴圈
例如:VBScript 也是相同處理方法

對迴圈來說,本來就是如此

for i=1 to 5 do begin
end;

該迴圈若無中途跳離, 迴圈跑完後 i = 6

i 是計數器
當 i=1 此輪的迴圈跑到最後一行
會碰到結尾的 End ,此刻系統就將 i +1,令 i =2
然後回到開頭的 for 那一行去做 Check
若 i >5 ,就會結束迴圈
若 i <=5,就會再進行新一輪

可以拿結束迴圈後的 i 值來判斷
去檢驗迴圈有無中途被跳開
正常跑完 i 會是6, 中途跳開 i 為 1 to 5

跑跑以下範例,就能更精確了解迴圈運作
downto 只是反過來跑而已(由大到小,每次減1)

//範例1
for i=1 to 5 do begin
if i=3 then break;
end;


//範例2
for i=1 to 5 do begin
i:=9;
end;


由 tajenchung 在 2015-07-07 17:48 發表:

明白了,謝謝版主的熱心教學,感恩!!!


由 cgjj 在 2015-07-07 17:55 發表:

引用:
最初由 tajenchung 發表
明白了,謝謝版主的熱心教學,感恩!!!


不客氣 ^^


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


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

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