74 1234
发新话题
打印

[教学] 飞狐排序函数的用法-南客

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

排序函数共有2个:
1、SORT(X,D,N1,N2):
①用法:对X序列或数组从序号N1到N2进行排序,D为0升序,D为1降序。返回N1到N2的数据数量
②示例(函数DATACOUNT,返回当前证券的K线数):
复制内容到剪贴板
代码:
FC:=C; //序列变量FC赋值为收盘价序列
n1:=SORT(FC,0,1,DATACOUNT); //对FC序列排序,从第1个元素到最后一个元素,按降序排列
FC; //输出曲线
上述代码可以简化为:
复制内容到剪贴板
代码:
FC:C; //序列变量FC赋值为收盘价序列,并输出(实际输出是按最后的结果进行的,即经下面排序后才输出)
n1:=SORT(FC,0,1,DATACOUNT); //对FC序列排序,从第1个元素到最后一个元素,按从小到大即升序排列
图示如下:可看出,FC已经不是原来顺序的收盘价序列了,而是按升序排列了,第1条K线位置对应的是收盘价最小值,最后一条K线对应的位置是收盘价的最大值,因此,你可以通过FC[1]、FC[2]得到最小值、次小值,FC[datacount]、FC[datacount-1]得到最大值、次大值,依此类推。

如果想按降序对收盘价排序,应怎么写公式代码?最大、最小值应该怎么写?有兴趣的话,请大家自行练习。
难一点的问题:2003年,收盘价的最大值是多少?写出公式代码。
附件: 您所在的用户组无法下载或查看附件

TOP

2、SORTPOS(X,D,N1,N2),别名: 排序位置
①用法:对序列或数组进行排序后的原本位置,对X序列或数组从序号N1到N2进行排序后X存放原数值对应的位置,D为0升序,D为1降序。返回N1到N2的数据数量
②示例(这个函数稍抽象,相当于是索引指针,保存排序的位置,而不是原来的数值):
复制内容到剪贴板
代码:
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]];
图示如下:


函数练习:
  1、所给示例是升序操作,请按降序操作,写出公式代码。
  2、输出当前股票,上市以来的最大成交量、最小成交量,最大的前10名成交量平均值是多少?
附件: 您所在的用户组无法下载或查看附件

TOP

一个综合实例:
1、历史高点A——历史高点A之后的某波段次高点B 画线;红线
2、历史高点A——历史高点A之后的最低点C画线; 黄线

以下是我回复某论坛问题的公式代码,其中部分代码,可用本次介绍的排序函数来重写,有兴趣不妨动手试试:
复制内容到剪贴板
代码:
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;
附件: 您所在的用户组无法下载或查看附件

TOP

好复杂啊。不知道什么时候能学会呢!

TOP

TOP

谢谢!!!!!!

TOP

多谢

来这儿学习学习!

TOP

好复杂啊。不知道什么时候能学会呢!

TOP

谢谢

TOP

谢谢!!!

TOP

来这儿学习学习!谢!

TOP

谢谢!!!!!!

谢谢!!!!!!

TOP

不错的功能,谢谢!

TOP

好复杂啊。不知道什么时候能学会呢!

TOP

ok

TOP

不错的功能,谢谢!

TOP

谢谢!!!!!!

TOP

谢谢

能看的懂,但好像对我用处不大。不过这样的知识多学些是有好处的。

TOP

好复杂

TOP

3q

TOP

谢谢!!!!!!

TOP

好多人在线!hx817老师谢谢!

TOP

引用:
redrose 于 2004-5-22 10:46 AM 写道:
谢谢南客老师~~  要是能办个指标讲座就好了,哪怕带我们入入门也好啊~

TOP

不错的功能,好复杂啊。不知道什么时候能学会呢! 谢谢!

TOP

 74 1234
发新话题
报警岗亭