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

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- [進階教學] (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=46)
-- 05. 排序函數 SORT, SORTPOS 《適用4.0版》 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=2650)


由 cgjj 在 2005-03-10 18:59 發表:

05. 排序函數 SORT, SORTPOS 《適用4.0版》

【語句】SORT



【用途】





將數列中的數值依大小次序重新排列(一般以排序稱之)

 

【語法】





SORT(NAry,
Mode, N1,
N2
)





【參數】





NAry
為欲排序的數列

Mode 用於設定排序的方式(
0.由小排到大, 1.由大排到小
)

N1 為排序的起始位置

N2 為排序的終止位置(N2的數值需大於N1,否則無效)





【說明】





若前頭有指定變數, 例如 XX:=SORT(NAry,
Mode, N1,
N2
)

則該變數(XX)取得的運算值為已排序的數據量(即 N2-N1+1 的值)


由 cgjj 在 2005-03-10 19:01 發表:

【語句】SORTPOS



【用途】





取得將數列中的數值依大小次序重新排列,存放排序後該數值原來所在K棒的位置

SORT 是將排序後的數值存放於原數列中

SORTPOS 則是將排序後該數值原來所在K棒的位置(序號)存放於原數列中

 

【語法】





SORTPOS(NAry,
Mode, N1,
N2
)





【參數】





NAry
為欲排序的數列

Mode 用於設定排序的方式(
0.由小排到大, 1.由大排到小
)

N1 為排序的起始位置

N2 為排序的終止位置(N2的數值需大於N1,否則無效)





【說明】





若前頭有指定變數, 例如 XX:=SORTPOS(NAry,
Mode, N1,
N2
)

則該變數(XX)取得的運算值為已排序的數據量(即 N2-N1+1 的值)


由 cgjj 在 2005-03-10 19:06 發表:

【範例1】將成交量由小排到大








■原來用 FOR 語句以氣泡式排序撰寫(跑的很慢)

VV:vol;

StartNo:= lbound(VV);

EndNo:= ubound(VV);

for i = StartNo to
EndNo-1 do begin

  for j = i+1
to
EndNo do begin

    if VV[i]>VV[j]
then begin


      temp:=VV[i];
VV[i]:=VV[j]; VV[j]:=temp;

    end;

  end;

end;




■改用內建 SORT 排序函數的寫法(程式很短且跑的非常快)

VV:vol;

StartNo:= lbound(VV);

EndNo:= ubound(VV);

tmp:= SORT(VV, 0, StartNo, EndNo);


由 cgjj 在 2005-03-10 19:07 發表:

【範例2】將最近五十日的成交量由大排到小








VV:vol;

EndNo:= ubound(VV);

tmp:= SORT(VV, 1, EndNo-50+1, EndNo);

註: 運算後 tmp 的值為50


由 cgjj 在 2005-03-10 19:08 發表:

【範例3】找出成交量最大的那根K棒位置







VV:=vol;

StartNo:= lbound(VV);

EndNo:= ubound(VV);

tmp:= SORTPOS(VV, 0, StartNo, EndNo);

MaxVPos: VV[EndNo];


由 cgjj 在 2006-01-03 11:44 發表:

【範例4】找出最近50根K棒,高的第一高和第二高








N1:=datacount-50+1;

N2:=datacount;

GetHH:=H;

x:=SORT(GetHH, 1, N1, N2);

前一高:GetHH[N1];

前二高:GetHH[N1+1];


PosHH:=H;

x:=SORTPOS(PosHH, 1, N1,
N2);

前一高位置:PosHH[N1] LINETHICK0;

前二高位置:PosHH[N1+1] LINETHICK0;


由 cgjj 在 2006-05-03 12:19 發表:


【範例5】找出最大量的價(用於分筆成交週期)

 註:此例延續 數列運算(陣列運算)
之 [範例7 求當日那一個價成交量最多]


   運算速度大幅提升









UseSC:=C;

UseSV:=V;

UseCP:=UseSC;

UseVP:=V;



//以價大小排序

x:=SORT(UseSC,0,1,datacount);
//排序後將結果存入 UseC

x:=SORTPos(UseCP,0,1,datacount);
//排序後將原本位置存入 UseCP



//將量依據前面排序結果位置存放入 UseSV

for i=1 to datacount
do begin


  UseSV[i]:=UseVP[UseCP[i]];

end;



//標示每個價的起點(StP=1)

StP:=barpos=1 or ref(UseSC,1)<UseSC;

//加總每個價的量

SVV:=sum(UseSV,barslast(StP)+1);



//找出最大量的價的位置

HVP:=hhvbars(SVV,0);

HVP:=datacount-HVP[datacount];

MaxVolC:UseSC[HVP];

MaxVolV:SVV[HVP];


 與原範例不同的是若碰到有兩個價都是量最多時, 其是取價位較高的價(而非取離目前時間最近的價)


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


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

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