hx817 2004-1-17 14:14
飞狐排序函数的用法-南客
排序函数共有2个:
1、SORT(X,D,N1,N2):
①用法:对X序列或数组从序号N1到N2进行排序,D为0升序,D为1降序。返回N1到N2的数据数量
②示例(函数DATACOUNT,返回当前证券的K线数):
[code]
FC:=C; //序列变量FC赋值为收盘价序列
n1:=SORT(FC,0,1,DATACOUNT); //对FC序列排序,从第1个元素到最后一个元素,按降序排列
FC; //输出曲线
[/code]
上述代码可以简化为:
[code]FC:C; //序列变量FC赋值为收盘价序列,并输出(实际输出是按最后的结果进行的,即经下面排序后才输出)
n1:=SORT(FC,0,1,DATACOUNT); //对FC序列排序,从第1个元素到最后一个元素,按从小到大即升序排列[/code]
图示如下:可看出,FC已经不是原来顺序的收盘价序列了,而是按升序排列了,第1条K线位置对应的是收盘价最小值,最后一条K线对应的位置是收盘价的最大值,因此,你可以通过FC[1]、FC[2]得到最小值、次小值,FC[datacount]、FC[datacount-1]得到最大值、次大值,依此类推。
如果想按降序对收盘价排序,应怎么写公式代码?最大、最小值应该怎么写?有兴趣的话,请大家自行练习。
难一点的问题:2003年,收盘价的最大值是多少?写出公式代码。
hx817 2004-1-17 14:15
2、SORTPOS(X,D,N1,N2),别名: 排序位置
①用法:对序列或数组进行排序后的原本位置,对X序列或数组从序号N1到N2进行排序后X存放原数值对应的位置,D为0升序,D为1降序。返回N1到N2的数据数量
②示例(这个函数稍抽象,相当于是索引指针,保存排序的位置,而不是原来的数值):
[code]
FC:C; //收盘价序列,赋值给序列变量FC
pFC:=C; //定义一个序列变量,用于下一行语句,保存排序后的位置
n1:=SORTPOS(pFC,0,1,DATACOUNT);//对收盘价序列进行升序排序,排序后,pFC中保存的是排序后的位置
{经过上一行语句,pFC序列就保存了收盘价升序排序后的位置,因为是升序操作,pFC的第1号元素即pFC[1]就表示,最小的收盘价对应的位置,如果pFC[1]=20,那就表示最小的收盘价位于第20根K线,同理,pFC[2]为次小收盘价的位置,pFC[datacount]为最大收盘价的位置,有了位置,就可以知道最小、最大收盘价的数值,见下面的语句}
最大收盘价:FC[pFC[datacount]]; //这是数组下标的嵌套应用,会稍微抽象些,参见前例来理解
最小收盘价:FC[pFC[1]];
[/code]
图示如下:
函数练习:
1、所给示例是升序操作,请按降序操作,写出公式代码。
2、输出当前股票,上市以来的最大成交量、最小成交量,最大的前10名成交量平均值是多少?
hx817 2004-1-17 14:16
一个综合实例:
1、历史高点A——历史高点A之后的某波段次高点B 画线;红线
2、历史高点A——历史高点A之后的最低点C画线; 黄线
以下是我回复某论坛问题的公式代码,其中部分代码,可用本次介绍的排序函数来重写,有兴趣不妨动手试试:
[code]
input:n(5,5,30);
fh:=high; fl:=low;
///以下找历史最高点,hh1表示最高价,phh1表示最高点位置///
hh1:=fh[1]; phh1:=1;
for i=1 to datacount do //从第1条K线开始,循环执行下面3条复合语句,直到K线结束
if hh1<fh[i] then begin //判断
hh1:=fh[i]; phh1:=i; //用hh1单值变量记录历史最高价,phh1记录位置
end;
///以下找phh1之后的最低点,ll表示最低价,pll最低点位置
if phh1<datacount then begin
ll:=fl[phh1+1];
for i=phh1 to datacount do
if ll>fl[i] then begin
ll:=fl[i]; pll:=i;
end;
end;
///以下用zig转折模拟波段,通过参数n来调整波的分布///
///找历史最高后的波峰最高点,hh2次高价,phh2位置///
tj:=peakbars(high,n,1)=0;
nstart:=max(lbound(tj),phh1+1);
if nstart<=datacount then begin
hh2:=0;
for i=nstart to datacount do
if tj[i] then begin
if hh2<fh[i] then begin
hh2:=fh[i];
phh2:=i;
end;
end;
end;
//////以下画线///////////
drawline(barpos=phh1,high,barpos=phh2,high,1),colormagenta;
drawline(barpos=phh1,high,barpos=pll,low,1),coloryellow;
[/code]
newbadboy 2004-3-27 22:02
谢谢
白郎 2004-5-21 08:47
谢谢
能看的懂,但好像对我用处不大。不过这样的知识多学些是有好处的。
beifen008 2004-5-21 10:11
好复杂
糊涂难道 2004-6-21 09:09
[quote][i]redrose[/i] 于 2004-5-22 10:46 AM 写道:
谢谢南客老师~~ 要是能办个指标讲座就好了,哪怕带我们入入门也好啊~ [/quote]
:cool::cool::cool:
tomyu 2004-6-21 09:14
不错的功能,好复杂啊。不知道什么时候能学会呢! 谢谢!
zyh631226 2004-6-21 09:45
ok
wangzhaoyang1 2004-7-7 09:36
谢谢!
dxzcjkcq 2004-10-15 21:42
hao
wlg 2004-10-16 09:54
:cool::clap: 谢谢! 提供如此功能强大排序函数用法.
遂波荡漾 2004-10-22 10:26
已经困惑老长时间了:thinking:,这下明白了:yes:,谢谢!谢谢!
pengyou 2004-10-25 16:03
能回就看
不能学会就套用
但是我知道 老师 是尽心的教大家
还能说什么
除了感激还是感激
谢谢了
myly1 2004-11-13 02:58
请教版主:
飞狐能不能在动态显示牌上动态更新2个以上的自设指标(排序只能动态更新1个自设指标)。谢谢!
realcolc 2004-12-15 17:47
定
映雪 2004-12-19 23:05
谢谢~不知道什么时候能学会呢! :thinking: