Uiwebview 优化:飞狐排序函数的用法-南客(页 1) - 飞狐软件区 - 飞狐使用教学 - 飞狐绿色通道-福...

来源:百度文库 编辑:中财网 时间:2024/05/05 15:06:54

飞狐排序函数的用法-南客

排序函数共有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 hh1hh1:=fh[i]; phh1:=i; //用hh1单值变量记录历史最高价,phh1记录位置
end;

///以下找phh1之后的最低点,ll表示最低价,pll最低点位置
if phh1ll:=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 hh2hh2:=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]