欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 在valuewhen中使用valid函数总是取不到值

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3776人关注过本帖树形打印复制链接

主题:在valuewhen中使用valid函数总是取不到值

帅哥哟,离线,有人找我吗?
a141027
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:472 积分:0 威望:0 精华:0 注册:2014/10/27 16:51:49
在valuewhen中使用valid函数总是取不到值  发帖心情 Post By:2018/1/10 17:46:08 [显示全部帖子]

请见贴图。公式代码如下:

hhv3:=hhv(high,3);
cond:high>ref(hhv3,1),nodraw,colorwhite;
a:if(cond,date,drawnull),nodraw,colorwhite;
valid_a:valid(a),nodraw,colorwhite;
drawicon(valid(a),low-10*mindiff,10);
last_a:if(valid(a),valuewhen(valid(a)=0,valuewhen(valid(a)=1,a)),valuewhen(valid(a)=1,a)),nodraw,colorwhite;

last_a的值总是为零。请问为什么?


图片点击可在新窗口打开查看此主题相关图片如下:20180110_174213.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
a141027
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:472 积分:0 威望:0 精华:0 注册:2014/10/27 16:51:49
  发帖心情 Post By:2018/1/10 19:31:55 [显示全部帖子]

last_a是个赋值语句,我的意图是:

当valid(a)=1时,指针先前移到valid(a)=0的地方,然后再从那个地方往前移到valid(a)=1的地方,把那个地方的a值赋值给last_a;

当valid(a)=0时,指针前移到valid(a)=1的地方,把那个地方的a值赋值给last_a。

我不明白为什么不能成立。

 回到顶部
帅哥哟,离线,有人找我吗?
a141027
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:472 积分:0 威望:0 精华:0 注册:2014/10/27 16:51:49
  发帖心情 Post By:2018/1/10 19:39:59 [显示全部帖子]

好吧,我换一个写法,把a:if(cond,date,drawnull)改写成a:if(cond,date,0),然后后面的相应作改写,结果是可以正常取值的。说明语句逻辑没有问题,而是valid放在valuewhen语句里面应用的时候出了问题。

改写后的语句如下:
hhv3:=hhv(high,3);
cond:high>ref(hhv3,1),nodraw,colorwhite;
a:if(cond,date,0),nodraw,colorwhite;//把drawnull改为零了
drawicon(a>0,low-10*mindiff,10);
//last_a:if(valid(a),valuewhen(valid(a)=0,valuewhen(valid(a)=1,a)),valuewhen(valid(a)=1,a)),nodraw,colorwhite;//这是原语句
last_a:if(a>0,valuewhen(a=0,valuewhen(a>0,a)),valuewhen(a>0,a)),nodraw,colorwhite;

为省事,我不贴图了,你把公式拉到图表上就能看到,last_a是始终都能取得到值的。


 回到顶部
帅哥哟,离线,有人找我吗?
a141027
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:472 积分:0 威望:0 精华:0 注册:2014/10/27 16:51:49
  发帖心情 Post By:2018/1/10 20:48:18 [显示全部帖子]

我猜问题可能不是valid不能用于valuewhen内,而是因为valuewhen不能用于非连续序列变量中,上面把drawnull改为零之后就可以取值,这就可以解释我的猜测。

 回到顶部
帅哥哟,离线,有人找我吗?
a141027
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:472 积分:0 威望:0 精华:0 注册:2014/10/27 16:51:49
  发帖心情 Post By:2018/1/12 13:21:02 [显示全部帖子]

请问‘无法传递’具体指什么?能给个具体的例子么?

另外,如果用你的写法,只能在相邻两个a值都是valid的时候last_a才能取到值,除此以外的情形都取不到值,这个解决方案行不通呢。

 回到顶部
帅哥哟,离线,有人找我吗?
a141027
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:472 积分:0 威望:0 精华:0 注册:2014/10/27 16:51:49
  发帖心情 Post By:2018/1/12 13:28:00 [显示全部帖子]

我使用金字塔的体验是,连续序列变量的使用限制最小,无论怎么复杂的嵌套查询、运算都没有问题,但非连续序列变量往往会碰到各种意想不到的问题,比如上面的例子,a变量就是一个非连续序列变量,对它进行查询就会碰到问题。所以,我一般都避免使用非连续序列变量,但有时出于编程需要,总有些变量不宜于设计成连续序列变量,因此,找到一个对非连续序列变量的有效查询、运算手段是很需要的。

 回到顶部
帅哥哟,离线,有人找我吗?
a141027
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:472 积分:0 威望:0 精华:0 注册:2014/10/27 16:51:49
  发帖心情 Post By:2018/1/12 15:10:33 [显示全部帖子]

多谢解答。我也知道barslast+ref可以查询某个历史值的所在地址,包括无效值,但是它的语句比较啰嗦,不及valuewhen简洁,特别是嵌套查询的时候,后者的语句要简单得多。如果没有其他更好的解决方案,那就罢了。

 回到顶部