以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  上面的公式如何修改才能让9:31分这根线的值为0??  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=159442)

--  作者:代人发贴
--  发布时间:2017/11/13 10:24:46
--  上面的公式如何修改才能让9:31分这根线的值为0??

公式Vaaa
a:sum(buyvol,todaybar);


公式Vbuyvol
a1:=stkindiex(\'\',\'Vaaa.a\',0,0,0,todaybar);


a2:=ref(a1,1);


if todaybar>1 then
ans:=(a1-a2) ;


xx:ans;


公式Vbuyvol-2
a1:=stkindiex(\'\',\'Vaaa.a\',0,0,0,todaybar);


a2:=ref(a1,1);


if todaybar>1 then ans:=(a1-a2);


else ans:=0;


xx:ans;

如图:
Vbuyvol的线输出正常,于是想在Vbuyvol中想办法去掉每天9:31分的这根线的输出值,让这一分钟的值=0,加入else语句后,输出的图线上面看这两个公式的线型没有任何区别,未实现我的想法.请教一下上面的公式如何修改才能让9:31分这根线的值为0??


此主题相关图片如下:88888888888.jpg
按此在新窗口浏览图片

--  作者:FireScript
--  发布时间:2017/11/13 10:38:54
--  

试下这样呢:

if  todaybar>1 then ans:=(a1-a2) ; else if then ans:=0;


--  作者:500178
--  发布时间:2017/11/13 10:55:48
--  

 版主好,这个帖子是我请客服MM代发的,经过测试将

 

if todaybar>1 then ans:=(a1-a2);


else ans:=0;

 

改为

 

if  todaybar>1 then ans:=(a1-a2) ;

 

else if then ans:=0;

 

输出结果和图线如原图,还是没有改变~请再帮忙想想办法~


--  作者:FireScript
--  发布时间:2017/11/13 13:02:20
--  
你的公式的模式是序列模式吧。  你换成用逐K模式试下。
--  作者:500178
--  发布时间:2017/11/13 13:49:52
--  

 选择逐K模式的话,线图就没有任何输出了,这是逐K的说明,是否这个模式用REF会有问题?

 

  逐K线执行模式虽然效率要比序列模式低,但是他的执行语法更加灵活,可以执行到我们在每个周期上做到的各种操作,TB就是这种模式运行的,BUY等新交易系统只能在逐K线计算模式下运行。 像例如REF,MA等带有统计性质的函数逐K线运行时无法直接使用在IF语句之中(序列运行模式可以),因为带变量判断的IF语句会在某些周期无法调用这些统计函数而导致计算结果出现错误,关于 逐K线模式下统计函数如何工作在控制语句之中用户可以参考帮助。


--  作者:500178
--  发布时间:2017/11/13 13:54:04
--  

换用逐K后,公式在9:31分点上面输出可以得到0这个值,但是其他的位置的线没有输出了.


--  作者:FireScript
--  发布时间:2017/11/13 14:19:05
--  
以下是引用500178在2017/11/13 13:54:04的发言:

换用逐K后,公式在9:31分点上面输出可以得到0这个值,但是其他的位置的线没有输出了.

1.ref的使用只要注意不使用未来引用就OK。

2.我注意到你用了stkindiex。 你换下stkind试下。因为你引用的是分笔的原因,分笔数比较多,你原先那样限制使用K线数量,数据是不够用的。a1:=stkindiex(\'\',\'Vaaa.a\',0,0,0,todaybar);   这里加入当前周期的todaybar是100,那你引用分笔的时候就是引用100个分笔,根本就不够用。