在這個頁面顯示本主題全部的 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)
05. 排序函數 SORT, SORTPOS 《適用4.0版》
【語句】SORT
【用途】
將數列中的數值依大小次序重新排列(一般以排序稱之) |
SORT(NAry, |
NAry |
若前頭有指定變數, 例如 XX:=SORT(NAry, Mode, N1, N2) 則該變數(XX)取得的運算值為已排序的數據量(即 N2-N1+1 的值) |
【語句】SORTPOS
【用途】
取得將數列中的數值依大小次序重新排列,存放排序後該數值原來所在K棒的位置 SORT 是將排序後的數值存放於原數列中 SORTPOS 則是將排序後該數值原來所在K棒的位置(序號)存放於原數列中 |
SORTPOS(NAry, |
NAry |
若前頭有指定變數, 例如 XX:=SORTPOS(NAry, Mode, N1, N2) 則該變數(XX)取得的運算值為已排序的數據量(即 N2-N1+1 的值) |
【範例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); |
【範例2】將最近五十日的成交量由大排到小
VV:vol; EndNo:= ubound(VV); tmp:= SORT(VV, 1, EndNo-50+1, EndNo); 註: 運算後 tmp 的值為50 |
【範例3】找出成交量最大的那根K棒位置
VV:=vol; StartNo:= lbound(VV); EndNo:= ubound(VV); tmp:= SORTPOS(VV, 0, StartNo, EndNo); MaxVPos: VV[EndNo]; |
【範例4】找出最近50根K棒,高的第一高和第二高
N1:=datacount-50+1; N2:=datacount; GetHH:=H; PosHH:=H; |
【範例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.