//这个指标是实现30天内成交量排序 能直观看到那天最大量 最小量
input:n(30,1,9999);
vv:=vol;
dt:=datacount;//
tmp:=sort(vv,0,dt-n+1,dt);//取消这句 最终显示为当前向前推30-1的倒排序28 29 30 怎么会这样呢?
vvv:v,volstick;
sp:=c*0;//提前声明c为序列变量 并将每日价格赋值为 0
for i=dt downto dt-n+1 do begin //从最后周期向前循环
for j=dt downto dt-n+1 do begin //从最后周期向前循环
if vvv[j]=vv[i] then
sp[j]:=i;
end;
end;
drawnumber(barpos>dt-n,v,sp-(dt-n),0),pxup50,align0;
------------------------------------------------------------------
老师,请教2个问题?
1、这句话“tmp:=sort(vv,0,dt-n+1,dt);”意思是排序赋值给tmp,对吧?但是这个赋值后面的代码中没有被使用到,可是又不能删除,删除了这个指标的值就变化了。这是怎么回事呢?这个赋值tmp是如何参与计算的呢?
2、这句循环的意思是不是这样理解?
if vvv[j]=vv[i] then //如果 j日的量=i日的量
sp[j]:=i; //j的循环=序列数据量
[此贴子已经被作者于2018/9/11 17:10:33编辑过]
1.sort排序改变了 vv的值情况,也就是使得VV的值进行了排序了,但不影响vol本身。
2.这个注释没怎么看明白呢。
1、排序后的值,不是已经赋值个tmp了吗?后期使用的话,不是应该要调用tmp吗?上面的语句中vv=vol啊!这应该如何理解呢?
2、那个注释是我理解后写的。不知道对不对?正确的该如何理解呢?
1.sort返回的只是数据量,就是你参与排序的数据量。排序结果体现在VV的改变上。vv:=vol 是复制出来一个和vol值一样的变量保存排序结果而已。因为后面还需要对排序和未排序的进行对比。
2.
序号 1 2 3 4 5 6
12 13 14 15 16 17
14 16 12 17 13 15
2组数据,红色一组已经排序了(vv),黄色一组是原始数据(vvv)。
上面那个代码的操作举例说明:
取红色有序数值倒数第一个值,17
在黄色数值中进行依次对比,序号(从左到右)为4的黄色数据值也等于17,保存这个序号。然后继续下一个红色数据16,继续在黄色数组中寻找对应的值,以此类推。
最后的sp结果:
3 5 1 6 2 4
其实就是获取原始数组每个值的在这6个数字里面的排名而已。