以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  请教循环语句中的赋值问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=165466)

--  作者:马立秋
--  发布时间:2018/9/11 17:09:11
--  请教循环语句中的赋值问题
//这个指标是实现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编辑过]

--  作者:FireScript
--  发布时间:2018/9/11 17:30:40
--  
 1.sort排序改变了 vv的值情况,也就是使得VV的值进行了排序了,但不影响vol本身。

2.这个注释没怎么看明白呢。

--  作者:马立秋
--  发布时间:2018/9/12 9:13:33
--  
1、排序后的值,不是已经赋值个tmp了吗?后期使用的话,不是应该要调用tmp吗?上面的语句中vv=vol啊!这应该如何理解呢?

2、那个注释是我理解后写的。不知道对不对?正确的该如何理解呢?

--  作者:FireScript
--  发布时间:2018/9/12 9:51:43
--  
 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个数字里面的排名而已。




--  作者:马立秋
--  发布时间:2018/9/12 11:15:22
--  
多谢“帅哥,在线噢!FireScript”老师

我再消化消化